From 9ab1160316b16056abe91af13fde6946f2e0ade8 Mon Sep 17 00:00:00 2001 From: mroik Date: Thu, 25 Nov 2021 16:29:39 +0100 Subject: Modified to retain user tagging --- config.py | 2 ++ main.py | 12 ++++++++++++ mentioned.py | 57 --------------------------------------------------------- telegrambot.py | 23 +++++++++++++++++++++++ userbot.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 84 insertions(+), 57 deletions(-) create mode 100644 main.py delete mode 100644 mentioned.py create mode 100644 telegrambot.py create mode 100644 userbot.py diff --git a/config.py b/config.py index 19ea090..8466aa3 100644 --- a/config.py +++ b/config.py @@ -5,3 +5,5 @@ API_HASH = environ.get("TELEGRAM_API_HASH") GROUP_ID = environ.get("TELEGRAM_GROUP_ID") WORDLIST = [] # List of words to be notified about BOT_TOKEN = environ.get("TELEGRAM_BOT_TOKEN") +BOT_ID = environ.get("TELEGRAM_BOT_ID") +USER_ID = environ.get("TELEGRAM_USER_ID") diff --git a/main.py b/main.py new file mode 100644 index 0000000..82fb745 --- /dev/null +++ b/main.py @@ -0,0 +1,12 @@ +from telegrambot import updater +from userbot import client + + +def main(): + client.start() + updater.start_polling() + client.run_until_disconnected() + + +if __name__ == "__main__": + main() diff --git a/mentioned.py b/mentioned.py deleted file mode 100644 index 118d7e2..0000000 --- a/mentioned.py +++ /dev/null @@ -1,57 +0,0 @@ -import re - -from telethon import TelegramClient, events -from telethon.tl.types import PeerUser -from telegram.ext import Updater -from telegram import Chat, Bot - -from config import API_ID, API_HASH, WORDLIST, GROUP_ID, BOT_TOKEN - - -client = TelegramClient("notify me on untagged", API_ID, API_HASH) -updater = Updater(token=BOT_TOKEN) -bot: Bot = updater.bot -chat: Chat = bot.get_chat(GROUP_ID) - - -@client.on(events.NewMessage()) -async def handler(event: events.NewMessage.Event): - me = await client.get_me() - from_ = event.message.from_id - chan = event.message.peer_id - message = event.message - - if isinstance(event.message.peer_id, PeerUser): - return - if bot.get_me().id == from_.user_id: - return - if from_.user_id == me.id: - return - if message.message == "" or message.message is None: - return - if message.mentioned: - return - for word in WORDLIST: - if f" {word.upper()} " in message.message.upper()\ - or message.message.upper().startswith(f"{word.upper()} ")\ - or message.message.upper().endswith(f" {word.upper()}"): - msg = f"[{from_.user_id}](tg://user?id={from_.user_id}) tagged you in" - msg += f" [{chan.channel_id}](https://t.me/c/{chan.channel_id}/{str(message.id)}):\n" - found = re.search(f"{word.upper()}", message.message.upper()) - if found is None: - msg += f"{message.message}" - else: - msg += f"{message.message[:found.start()]}__"\ - f"{message.message[found.start():found.end()]}__"\ - f"{message.message[found.end():]}" - chat.send_message(msg, parse_mode="markdown") - return - - -def main(): - client.start() - client.run_until_disconnected() - - -if __name__ == "__main__": - main() diff --git a/telegrambot.py b/telegrambot.py new file mode 100644 index 0000000..008e38d --- /dev/null +++ b/telegrambot.py @@ -0,0 +1,23 @@ +import logging + +from telegram.ext import Updater, Dispatcher, CallbackContext, MessageHandler +from telegram.ext.filters import Filters +from telegram import Bot, Update + +from config import BOT_TOKEN, USER_ID, GROUP_ID + + +LOG = logging.getLogger(__name__) +updater = Updater(token=BOT_TOKEN) +disp: Dispatcher = updater.dispatcher +bot: Bot = updater.bot + + +def handle_msg_rec(update: Update, context: CallbackContext) -> None: + if update.message.from_user.id != int(USER_ID): + return + update.message.forward(int(GROUP_ID)) + LOG.info(f"Message from {update.message.from_user.id} was forwarded to {GROUP_ID}") + + +disp.add_handler(MessageHandler(Filters.update, callback=handle_msg_rec)) diff --git a/userbot.py b/userbot.py new file mode 100644 index 0000000..bd390d6 --- /dev/null +++ b/userbot.py @@ -0,0 +1,47 @@ +import re +import logging + +from telethon import TelegramClient, events +from telethon.tl.types import PeerUser + +from config import API_ID, API_HASH, WORDLIST, BOT_ID + + +LOG = logging.getLogger(__name__) +client = TelegramClient("notify me on untagged", API_ID, API_HASH) +client.parse_mode = "markdown" + + +@client.on(events.NewMessage()) +async def handler(event: events.NewMessage.Event): + me = await client.get_me() + from_ = event.message.from_id + chan = event.message.peer_id + message = event.message + + if isinstance(event.message.peer_id, PeerUser): + return + if int(BOT_ID) == from_.user_id: + return + if from_.user_id == me.id: + return + if message.message == "" or message.message is None: + return + if message.mentioned: + return + for word in WORDLIST: + if f" {word.upper()} " in message.message.upper()\ + or message.message.upper().startswith(f"{word.upper()} ")\ + or message.message.upper().endswith(f" {word.upper()}"): + msg = f"[{from_.user_id}](tg://user?id={from_.user_id}) tagged you in" + msg += f" [{chan.channel_id}](https://t.me/c/{chan.channel_id}/{str(message.id)}):\n" + found = re.search(f"{word.upper()}", message.message.upper()) + if found is None: + msg += f"{message.message}" + else: + msg += f"{message.message[:found.start()]}__"\ + f"{message.message[found.start():found.end()]}__"\ + f"{message.message[found.end():]}" + await client.send_message(await client.get_input_entity(int(BOT_ID)), msg) + LOG.info(f"Message from {from_.user_id} was sent to BOT {BOT_ID}") + return -- cgit v1.3