AlexJameson

Untitled

Feb 5th, 2024
1,216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.90 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. import logging
  3. import os
  4. from dotenv import load_dotenv
  5. from telegram import Update
  6. from telegram.ext import ApplicationBuilder, CallbackContext, MessageHandler, filters
  7.  
  8. logging.basicConfig(level=logging.WARNING, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', filename="bot.log",filemode="a")
  9.  
  10. load_dotenv()
  11.  
  12. TOKEN = os.getenv('FORWARDER_TOKEN')
  13. SOURCE_CHANNEL = os.getenv('SOURCE_CHAT_ID')
  14. TARGET_GROUP = os.getenv('TARGET_GROUP_ID')
  15.  
  16. HASHTAG_THREAD_MAP = {
  17.     '#knowledge': 6,
  18.     '#tools': 14,
  19.     '#text': 7,
  20. }
  21.  
  22. async def forward_hashtag_messages(update: Update, context: CallbackContext):
  23.     message = update.message
  24.     words = message.text.split()
  25.     hashtags = [word for word in words if word[0]=='#']
  26.     channel_id = SOURCE_CHANNEL.replace("@", "")
  27.     link = f"https://t.me/{channel_id}/{message.message_id}"
  28.    
  29.     if message.is_topic_message:
  30.         topic_id = message.message_thread_id
  31.         link = f"https://t.me/{channel_id}/{topic_id}/{message.message_id}"
  32.  
  33.     print(update)
  34.  
  35.     # Ignore messages that contain only hashtags
  36.     if len(words) == len(hashtags) and message.caption is not None:
  37.         return
  38.  
  39.     target_received = False
  40.  
  41.     for tag in hashtags:
  42.         thread_id = HASHTAG_THREAD_MAP.get(tag, None)
  43.         if thread_id is not None:
  44.             await context.bot.send_message(chat_id=TARGET_GROUP,
  45.                                     text=f"[Go to message]({link}) ↓",
  46.                                     disable_web_page_preview=True,
  47.                                     parse_mode="MarkdownV2",
  48.                                     message_thread_id=thread_id)
  49.             await context.bot.forward_message(
  50.                 chat_id=TARGET_GROUP,
  51.                 from_chat_id=SOURCE_CHANNEL,
  52.                 message_thread_id=thread_id,
  53.                 message_id=update.message.message_id
  54.             )
  55.             target_received = True
  56.  
  57.     if not target_received and hashtags:
  58.         await context.bot.send_message(chat_id=TARGET_GROUP,
  59.                                     text=f"[Go to message]({link}) ↓",
  60.                                     disable_web_page_preview=True,
  61.                                     parse_mode="MarkdownV2",
  62.                                     message_thread_id=30)
  63.         await context.bot.forward_message(chat_id=TARGET_GROUP,
  64.                                     from_chat_id=SOURCE_CHANNEL,
  65.                                     message_thread_id=30,
  66.                                     # forwarding to the Support thread
  67.                                     message_id=update.message.message_id)
  68.  
  69. def main():
  70.     print("I'm working")
  71.  
  72.     application = ApplicationBuilder().token(TOKEN).build()
  73.     application.add_handler(MessageHandler(filters.ALL & ~filters.COMMAND, forward_hashtag_messages))
  74.     application.run_polling()
  75.  
  76. if __name__ == '__main__':
  77.     main()
  78.  
Advertisement
Add Comment
Please, Sign In to add comment