From 9c15227cbf26894baae98fe1e1f6078be83c91f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Guglas?= <32432158+miloszowi@users.noreply.github.com> Date: Sat, 18 Sep 2021 15:30:56 +0200 Subject: [PATCH] Initial commit --- .env.local | 8 ++ .gitignore | 129 +++++++++++++++++++++ LICENSE | 21 ++++ Procfile | 1 + README.md | 67 +++++++++++ docs/commands.png | Bin 0 -> 28149 bytes docs/everyone_command.png | Bin 0 -> 9379 bytes docs/everyone_noone_to_mention.png | Bin 0 -> 8903 bytes docs/in_command.png | Bin 0 -> 9444 bytes docs/in_command_already_opted_in.png | Bin 0 -> 9554 bytes docs/logo.png | Bin 0 -> 26458 bytes docs/out_command.png | Bin 0 -> 9557 bytes docs/out_command_did_not_opt_in_before.png | Bin 0 -> 9956 bytes entrypoint.py | 6 + requirements.txt | 3 + runtime.txt | 1 + src/app.py | 34 ++++++ src/config/contents.py | 8 ++ src/config/credentials.py | 16 +++ src/config/handlers.py | 9 ++ src/firebaseProxy.py | 34 ++++++ src/handlers/handlerInterface.py | 18 +++ src/handlers/inHandler.py | 39 +++++++ src/handlers/mentionHandler.py | 42 +++++++ src/handlers/outHandler.py | 39 +++++++ src/repositories/groupRepository.py | 18 +++ src/repositories/userRepository.py | 30 +++++ 27 files changed, 523 insertions(+) create mode 100644 .env.local create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 Procfile create mode 100644 README.md create mode 100644 docs/commands.png create mode 100644 docs/everyone_command.png create mode 100644 docs/everyone_noone_to_mention.png create mode 100644 docs/in_command.png create mode 100644 docs/in_command_already_opted_in.png create mode 100644 docs/logo.png create mode 100644 docs/out_command.png create mode 100644 docs/out_command_did_not_opt_in_before.png create mode 100644 entrypoint.py create mode 100644 requirements.txt create mode 100644 runtime.txt create mode 100644 src/app.py create mode 100644 src/config/contents.py create mode 100644 src/config/credentials.py create mode 100644 src/config/handlers.py create mode 100644 src/firebaseProxy.py create mode 100644 src/handlers/handlerInterface.py create mode 100644 src/handlers/inHandler.py create mode 100644 src/handlers/mentionHandler.py create mode 100644 src/handlers/outHandler.py create mode 100644 src/repositories/groupRepository.py create mode 100644 src/repositories/userRepository.py diff --git a/.env.local b/.env.local new file mode 100644 index 0000000..a0bec50 --- /dev/null +++ b/.env.local @@ -0,0 +1,8 @@ +bot_token= +firebase_apiKey= +firebase_authDomain= +firebase_databaseURL= +firebase_projectId= +firebase_storageBucket= +app_url= +PORT= \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b6e4761 --- /dev/null +++ b/.gitignore @@ -0,0 +1,129 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..beeb482 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 MiƂosz Guglas + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Procfile b/Procfile new file mode 100644 index 0000000..fe54d30 --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: python entrypoint.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..2d254aa --- /dev/null +++ b/README.md @@ -0,0 +1,67 @@ +#

[everyone-mention-telegram-bot](http://t.me/everyone_mention_bot) +

+

simple, but useful telegram bot to gather all of group members attention! + + +## Contents + +* [Getting started.](#getting-started) + * [Installation](#installation) + * [Requirements](#requirements) + * [Env file](#env-file) +* [Commands](#commands) + * [`/in`](#in) + * [`/out`](#out) + * [`/everyone`](#everyone) + +### Getting started +#### Installation +```bash +git clone https://github.com/miloszowi/everyone-mention-telegram-bot.git +pip install -r requirements.txt +python entrypoint.py +``` + +#### Requirements +- `python` with version specified in `runtime.txt` +- `pip` with version `20.0.2` + +#### Env file +```bash +cp .env.local .env +``` +and then fulfill copied `.env` file with required values +- `bot_token` - your telegram bot token from [BotFather](https://telegram.me/BotFather) +- `firebase_*` - all of those values you can find in firebase console +- `app_url` - your app url for retrieving webhooks +- `PORT` - port for your app + +### Commands +#### `/in` +Will sign you in for everyone-mentions. + +![in command example](docs/in_command.png) + +If you have already opted-in before, alternative reply will be displayed. + +![in command when someone already opted in example](docs/in_command_already_opted_in.png) + +#### `/out` +Will sign you off for everyone-mentions. + +![out command example](docs/out_command.png) + +If you haven't opted-in before, alternative reply will be displayed. + +![out command when someone did not opt in example](docs/out_command_did_not_opt_in_before.png) + +#### `/everone` +Will mention everyone that opted-in for everyone-mentions separated by spaces. + +If user does not contain nickname, his ID will be present instead of nickname. + +![everybody command example](docs/everyone_command.png) + +If there are no users that opted-in for mentioning, alternative reply will be displayed. + +![everybone noone to mention example](docs/everyone_noone_to_mention.png) diff --git a/docs/commands.png b/docs/commands.png new file mode 100644 index 0000000000000000000000000000000000000000..24caf9d54023405748428ebb8558dd3e091f9349 GIT binary patch literal 28149 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 literal 0 HcmV?d00001 diff --git a/docs/everyone_noone_to_mention.png b/docs/everyone_noone_to_mention.png new file mode 100644 index 0000000000000000000000000000000000000000..88200a1ae1c1214bbd17304b0a05f6cd537bdd81 GIT binary patch literal 8903 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 b1aIuau(7s3bIRRsOL*!kFy&fBoACbuo>V9_ literal 0 HcmV?d00001 diff --git a/docs/in_command_already_opted_in.png b/docs/in_command_already_opted_in.png new file mode 100644 index 0000000000000000000000000000000000000000..4370a08d2cc89300acfd3a5856643a2ca9e5c559 GIT binary patch literal 9554 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 literal 0 HcmV?d00001 diff --git a/docs/out_command.png b/docs/out_command.png new file mode 100644 index 0000000000000000000000000000000000000000..062b91396ce88f0eb5b0b9e26553ae1fca9aa86a GIT binary patch literal 9557 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 XIpb<03^VY5TO-ibG}Ne7bBz5zTsWri literal 0 HcmV?d00001 diff --git a/entrypoint.py b/entrypoint.py new file mode 100644 index 0000000..2e270f8 --- /dev/null +++ b/entrypoint.py @@ -0,0 +1,6 @@ +from src.app import App + +if __name__ == "__main__": + app = App() + + app.run() diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..af1197a --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +python-dotenv==0.19.0 +python-telegram-bot==13.7 +Pyrebase==3.0.27 diff --git a/runtime.txt b/runtime.txt new file mode 100644 index 0000000..a48890e --- /dev/null +++ b/runtime.txt @@ -0,0 +1 @@ +python-3.8.10 diff --git a/src/app.py b/src/app.py new file mode 100644 index 0000000..42eb3d2 --- /dev/null +++ b/src/app.py @@ -0,0 +1,34 @@ +from .config.credentials import bot_token, app_url, port +from .config.handlers import handlers +from .handlers.handlerInterface import HandlerInterface +from telegram.ext.dispatcher import Dispatcher +from telegram.ext import Updater + + +class App: + updater: Updater + dispatcher: Dispatcher + + def __init__(self): + self.updater = Updater(bot_token) + + def run(self) -> None: + self.registerHandlers() + self.registerWebhook() + + self.updater.idle() + + def registerHandlers(self) -> None: + for handler in handlers: + if not isinstance(handler, HandlerInterface): + raise Exception('Invalid list of handlers provided. Handler must implement HandlerInterface') + + self.updater.dispatcher.add_handler(handler.getBotHandler()) + + def registerWebhook(self) -> None: + self.updater.start_webhook( + listen="0.0.0.0", + port=int(port), + url_path=bot_token, + webhook_url=f'{app_url}/{bot_token}' + ) diff --git a/src/config/contents.py b/src/config/contents.py new file mode 100644 index 0000000..d36c2fc --- /dev/null +++ b/src/config/contents.py @@ -0,0 +1,8 @@ +import re + +# These are MarkdownV2 python-telegram-bot specific +opted_in_successfully = re.escape('You have opted-in for everyone-mentions.') +opted_in_failed = re.escape('You already opted-in for everyone-mentions.') +opted_off_successfully = re.escape('You have opted-off for everyone-mentions.') +opted_off_failed = re.escape('You need to opt-in first before processing this command.') +mention_failed = re.escape('There are no users to mention.') diff --git a/src/config/credentials.py b/src/config/credentials.py new file mode 100644 index 0000000..8cb7c00 --- /dev/null +++ b/src/config/credentials.py @@ -0,0 +1,16 @@ +import os +from dotenv import load_dotenv + +load_dotenv() + +bot_token = os.environ['bot_token'] +app_url = os.environ['app_url'] +port = os.environ['PORT'] + +firebaseConfig = { + "apiKey": os.environ['firebase_apiKey'], + "authDomain": os.environ['firebase_authDomain'], + "databaseURL": os.environ['firebase_databaseURL'], + "projectId": os.environ['firebase_projectId'], + "storageBucket": os.environ['firebase_storageBucket'], +} diff --git a/src/config/handlers.py b/src/config/handlers.py new file mode 100644 index 0000000..a7d81d6 --- /dev/null +++ b/src/config/handlers.py @@ -0,0 +1,9 @@ +from ..handlers.inHandler import InHandler +from ..handlers.outHandler import OutHandler +from ..handlers.mentionHandler import MentionHandler + +handlers = [ + InHandler(), + OutHandler(), + MentionHandler() +] diff --git a/src/firebaseProxy.py b/src/firebaseProxy.py new file mode 100644 index 0000000..aa8db8c --- /dev/null +++ b/src/firebaseProxy.py @@ -0,0 +1,34 @@ +import pyrebase +from pyrebase.pyrebase import Database as FirebaseDB +from .config.credentials import firebaseConfig + + +class FirebaseProxy(): + db: FirebaseDB + + # Group specific values + group_index: str = 'groups' + + # User specific values + id_index: str = 'id' + name_index: str = 'name' + + def __init__(self) -> None: + firebase = pyrebase.pyrebase.initialize_app(firebaseConfig) + self.db = firebase.database() + + def getChilds(self, *childs: str) -> FirebaseDB: + current = self.db + + for child_index in childs: + current = current.child(child_index) + + return current + + @staticmethod + def getGroupPath(groupId: int) -> str: + return f'{FirebaseProxy.group_index}/{groupId}' + + @staticmethod + def getUserPath(userId: int, groupId: int) -> str: + return f'{groupId}_{userId}' diff --git a/src/handlers/handlerInterface.py b/src/handlers/handlerInterface.py new file mode 100644 index 0000000..3cad7ce --- /dev/null +++ b/src/handlers/handlerInterface.py @@ -0,0 +1,18 @@ +from abc import abstractmethod +from telegram.ext.callbackcontext import CallbackContext +from telegram.ext.handler import Handler +from telegram.update import Update + + +class HandlerInterface: + def __init__(self) -> None: + pass + + @abstractmethod + def getBotHandler(self) -> Handler: raise Exception('getBotHandler method is not implemented') + + @abstractmethod + def handle(self, update: Update, context: CallbackContext) -> None: raise Exception('handle method is not implemented') + + @abstractmethod + def getCommandName(self) -> str: raise Exception('getCommandName method is not implemented') diff --git a/src/handlers/inHandler.py b/src/handlers/inHandler.py new file mode 100644 index 0000000..5f55e1c --- /dev/null +++ b/src/handlers/inHandler.py @@ -0,0 +1,39 @@ +from ..config.contents import opted_in_successfully, opted_in_failed +from ..repositories.userRepository import UserRepository +from ..firebaseProxy import FirebaseProxy +from .handlerInterface import HandlerInterface +from telegram.ext.callbackcontext import CallbackContext +from telegram.ext.commandhandler import CommandHandler +from telegram.update import Update + + +class InHandler(HandlerInterface): + botHandler: CommandHandler + commandName: str = 'in' + + def __init__(self) -> None: + self.botHandler = CommandHandler( + self.getCommandName(), + self.handle + ) + + def handle(self, update: Update, context: CallbackContext) -> None: + groupId = update.effective_chat.id + userData = { + FirebaseProxy.id_index: update.effective_user.id, + FirebaseProxy.name_index: update.effective_user.username + } + userRepository = UserRepository() + + if userRepository.isPresentInGroup(userData.get(FirebaseProxy.id_index), groupId): + update.message.reply_markdown_v2(text=opted_in_failed) + return + + userRepository.addForGroup(userData, groupId) + update.message.reply_markdown_v2(text=opted_in_successfully) + + def getBotHandler(self) -> CommandHandler: + return self.botHandler + + def getCommandName(self) -> str: + return self.commandName diff --git a/src/handlers/mentionHandler.py b/src/handlers/mentionHandler.py new file mode 100644 index 0000000..cef012c --- /dev/null +++ b/src/handlers/mentionHandler.py @@ -0,0 +1,42 @@ +from ..config.contents import mention_failed +from ..firebaseProxy import FirebaseProxy +from ..repositories.groupRepository import GroupRepository +from .handlerInterface import HandlerInterface +from telegram.ext.callbackcontext import CallbackContext +from telegram.ext.commandhandler import CommandHandler +from telegram.update import Update + + +class MentionHandler(HandlerInterface): + botHandler: CommandHandler + commandName: str = 'everyone' + + def __init__(self) -> None: + self.botHandler = CommandHandler( + self.getCommandName(), + self.handle + ) + + def handle(self, update: Update, context: CallbackContext) -> None: + groupId = update.effective_chat.id + groupRepository = GroupRepository() + mentionMessage = self.buildMentionMessage(groupRepository.get(id=groupId)) + + update.message.reply_markdown_v2(text=mentionMessage) + + def getBotHandler(self) -> CommandHandler: + return self.botHandler + + def getCommandName(self) -> str: + return self.commandName + + def buildMentionMessage(self, usersData: dict) -> str: + result = '' + + for userData in usersData: + userId = str(userData.get(FirebaseProxy.id_index)) + username = userData.get(FirebaseProxy.name_index) or userId + + result += "*[%s](tg://user?id=%s)* " % (username, userId) + + return result or mention_failed diff --git a/src/handlers/outHandler.py b/src/handlers/outHandler.py new file mode 100644 index 0000000..e102829 --- /dev/null +++ b/src/handlers/outHandler.py @@ -0,0 +1,39 @@ +from ..config.contents import opted_off_successfully, opted_off_failed +from ..repositories.userRepository import UserRepository +from .handlerInterface import HandlerInterface +from telegram.ext.callbackcontext import CallbackContext +from telegram.ext.commandhandler import CommandHandler +from telegram.update import Update + + +class OutHandler(HandlerInterface): + botHandler: CommandHandler + commandName: str = 'out' + + def __init__(self) -> None: + self.botHandler = CommandHandler( + self.getCommandName(), + self.handle + ) + + def handle(self, update: Update, context: CallbackContext) -> None: + groupId = update.effective_chat.id + userData = { + 'id': update.effective_user.id, + 'name': update.effective_user.username + } + + userRepository = UserRepository() + if not userRepository.isPresentInGroup(userData.get('id'), groupId): + update.message.reply_markdown_v2(text=opted_off_failed) + return + + userRepository.removeForGroup(userId=userData.get('id'), groupId=groupId) + + update.message.reply_markdown_v2(text=opted_off_successfully) + + def getBotHandler(self) -> CommandHandler: + return self.botHandler + + def getCommandName(self) -> str: + return self.commandName diff --git a/src/repositories/groupRepository.py b/src/repositories/groupRepository.py new file mode 100644 index 0000000..9747ab4 --- /dev/null +++ b/src/repositories/groupRepository.py @@ -0,0 +1,18 @@ +from ..firebaseProxy import FirebaseProxy + + +class GroupRepository(): + firebase: FirebaseProxy + + def __init__(self) -> None: + self.firebase = FirebaseProxy() + + def get(self, id: int) -> dict: + result = [] + groupData = self.firebase.getChilds(FirebaseProxy.group_index, id).get() + + if groupData.each(): + for user_root in groupData.each(): + result.append(user_root.val()) + + return result diff --git a/src/repositories/userRepository.py b/src/repositories/userRepository.py new file mode 100644 index 0000000..d1d472b --- /dev/null +++ b/src/repositories/userRepository.py @@ -0,0 +1,30 @@ +from ..firebaseProxy import FirebaseProxy + + +class UserRepository(): + firebaseProxy: FirebaseProxy + + def __init__(self) -> None: + self.firebaseProxy = FirebaseProxy() + + def addForGroup(self, userData: dict, groupId: int) -> None: + self.firebaseProxy.getChilds(FirebaseProxy.getGroupPath(groupId)).update({ + f'{groupId}_{userData.get("id")}': { + FirebaseProxy.id_index: userData.get("id"), + FirebaseProxy.name_index: userData.get("name") + } + }) + + def removeForGroup(self, userId: int, groupId: int) -> None: + self.firebaseProxy.getChilds(FirebaseProxy.getGroupPath(groupId)).update({ + FirebaseProxy.getUserPath(userId, groupId): {} + }) + + def isPresentInGroup(self, userId: int, groupId: int) -> bool: + user = self.firebaseProxy.getChilds( + FirebaseProxy.getGroupPath(groupId), + FirebaseProxy.getUserPath(userId, groupId) + ).get().val() + + return bool(user) + \ No newline at end of file