Guest User

Untitled

a guest
Jun 24th, 2026
32
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.82 KB | None | 0 0
  1. from ptbcontrib.roles import setup_roles, RolesHandler
  2. from telegram import Update, Bot, InlineKeyboardButton, InlineKeyboardMarkup
  3. # check out the telegram docs:
  4. # https://docs.python-telegram-bot.org/en/stable/telegram.bot.html
  5. from telegram.constants import (
  6.     ChatMemberStatus,
  7.     ParseMode,
  8.     ChatType,
  9. )
  10. from telegram.ext import (
  11.     Application,
  12.     ChatJoinRequestHandler,
  13.     ChatMemberHandler,
  14.     CommandHandler,
  15.     ContextTypes,
  16.     Defaults,
  17.     filters,
  18.     MessageHandler,
  19.     PersistenceInput,
  20.     PicklePersistence
  21. )
  22. from telegram.ext.filters import UpdateFilter
  23.  
  24.  
  25. #Setup variables#########################
  26.  
  27. ottbot_persistence = PicklePersistence(
  28.     filepath="ottbot",
  29.     store_data=(
  30.         PersistenceInput(
  31.             bot_data=True,
  32.             chat_data=False,
  33.             user_data=False,
  34.             callback_data=False,
  35.         )
  36.     ),
  37.     update_interval=60
  38. )
  39.  
  40.  
  41. # Setup ########################################################################
  42.  
  43.  
  44. def main() -> None:
  45.     check_config()
  46.     app = Application \
  47.         .builder() \
  48.         .token(_configVariables.get("BOT_TOKEN")) \
  49.         .defaults(defaults) \
  50.         .persistence(persistence=ottbot_persistence) \
  51.         .post_init(initialize) \
  52.         .post_stop(finalize) \
  53.         .build()
  54.  
  55.     job_queue = app.job_queue
  56.     app.run_polling(allowed_updates=Update.ALL_TYPES)  # Update.ALL_TYPES required to get ChatMemberHandler events
  57.  
  58.  
  59. # Commands #######################################################################
  60. async def cmd_join(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
  61.     """/join:"""
  62.     print("Join")
  63.     user = update.effective_user
  64.     member_type = await context.bot.get_chat_member(_configVariables.get("MAIN_GROUP_ID"), user.id)
  65.     if member_type.status == ChatMemberStatus.MEMBER or member_type.status == ChatMemberStatus.ADMINISTRATOR:
  66.         await update.message.reply_text("You're already a member!")
  67.         return
  68.     if member_type.status == ChatMemberStatus.BANNED or user.id in ban_list:
  69.         await update.message.reply_text("You cannot apply to rejoin Cambridge Furs as you have previously been banned.")
  70.     if member_type.status == ChatMemberStatus.LEFT:
  71.         print("Hit LEFT")
  72.         name = set_topic_from_user(user)
  73.         print(name)
  74.         topic = await context.bot.create_forum_topic(chat_id=_configVariables.get("WAITING_ROOM_TOPICS_ID"), name=name)
  75.         print(f" Created {topic.name} as topic ID: {topic.message_thread_id}")
  76.         await context.bot.forwardMessage(
  77.             chat_id=_configVariables.get("WAITING_ROOM_TOPICS_ID"),
  78.             from_chat_id=user.id,
  79.             message_thread_id=topic.message_thread_id,
  80.             message_id=update.message.id
  81.         )
  82.         print(f"Forwareded message from {user.id} to Topic id {topic.message_thread_id}")
  83.         context.bot_data[topic.message_thread_id] = user.id
  84.         print(f"Stored user id {context.bot_data.get(topic.message_thread_id)} for key topic ID {topic.message_thread_id}")
  85.         context.bot_data[user.id] = topic.message_thread_id
  86.         print(f"Stored for topic {context.bot_data.get(user.id)} for key user id {user.id}")
  87.         await ottbot_persistence.flush()
  88.         print("flushed")
  89.  
  90. # Init and Finalize Methods #########################################################
  91. async def initialize(app: Application) -> None:
  92.     # Exceptions escaping from the initialize function result in a silent crash.
  93.     # It's therefore important to wrap everything in a try block
  94.     try:
  95.         print("Started Initialisation")
  96.         roles = await role_setup(app)
  97.         # General Commands
  98.         app.add_handler(CommandHandler("join", cmd_join, filters.Regex(WEBSITE)))
  99.         app.add_handler(ChatJoinRequestHandler(join_request), group=0)
  100.         app.add_handler(CommandHandler("meet_dates", cmd_meet_dates))
  101.         app.add_handler(ChatMemberHandler(chat_member_updated, ChatMemberHandler.CHAT_MEMBER))
  102.         app.add_handler(CommandHandler("registerasadmin", cmd_register_admin))
  103.         app.add_handler(CommandHandler("join", cmd_join))
  104.         app.add_handler(RolesHandler(MessageHandler(
  105.                                         filter_waiting_room & (~filters.COMMAND),
  106.                                         message_reply_from_admin),
  107.                                     roles=roles.admins))
  108.         app.add_handler(RolesHandler(MessageHandler(
  109.                                         filter_direct_message & (~filters.COMMAND),
  110.                                         message_reply_from_joiner),
  111.                                     roles=~roles["sfw_member"]))
  112.         # Admin Commands
  113.         app.add_handler(RolesHandler(CommandHandler("start", cmd_start), roles=roles.admins))
  114.         app.add_handler(RolesHandler(CommandHandler("say", cmd_say), roles=roles.admins))
  115.         app.add_handler(RolesHandler(CommandHandler("notify", cmd_notify), roles=roles.admins))
  116.         app.add_handler(RolesHandler(CommandHandler("canceljob", cmd_cancel_deletion), roles=roles.admins))
  117.         app.add_handler(RolesHandler(CommandHandler("approve", cmd_approve), roles=roles.admins))
  118.         app.add_handler(RolesHandler(CommandHandler("reject", cmd_topic_approve), roles=roles.admins))
  119.         app.add_handler(RolesHandler(CommandHandler("reject", cmd_topic_ban), roles=roles.admins))
  120.         job_hourly_callback = app.job_queue.run_repeating(
  121.             hourly_callback,
  122.             interval=3600,
  123.             first=arrow.utcnow().ceil("hour").datetime)
  124.         app.job_queue.run_repeating(callback=print_persistence, interval=30)
  125.  
  126.     except Exception as e:
  127.         await alert(app.bot, f"🆘 0ttbot failed to start {e}")
  128.         raise
  129.     else:
  130.         await alert(app.bot, "🟢 0ttbot started")
  131.  
  132.  
  133. async def finalize(app) -> None:
  134.     await alert(app.bot, "🆘 CatBot stopped")
Advertisement
Add Comment
Please, Sign In to add comment