def get_settings(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] user = update.effective_user # type: Optional[User] msg = update.effective_message # type: Optional[Message] args = msg.text.split(None, 1) # ONLY send settings in PM if chat.type != chat.PRIVATE: if is_user_admin(chat, user.id): text = "Click here to get this chat's settings, as well as yours." msg.reply_text( text, reply_markup=InlineKeyboardMarkup([[ InlineKeyboardButton( text="Settings", url="t.me/{}?start=stngs_{}".format( bot.username, chat.id), ) ]]), ) else: text = "Click here to check your settings." else: send_settings(chat.id, user.id, True)
def start(bot: Bot, update: Update, args: List[str]): if update.effective_chat.type == "private": if len(args) >= 1: if args[0].lower() == "help": send_help(update.effective_chat.id, HELP_STRINGS) elif args[0].lower() == "nations": IMPORTED["nations"].send_nations(update) elif args[0].lower().startswith("stngs_"): match = re.match("stngs_(.*)", args[0].lower()) chat = dispatcher.bot.getChat(match.group(1)) if is_user_admin(chat, update.effective_user.id): send_settings(match.group(1), update.effective_user.id, False) else: send_settings(match.group(1), update.effective_user.id, True) elif args[0][1:].isdigit() and "rules" in IMPORTED: IMPORTED["rules"].send_rules(update, args[0], from_pm=True) else: first_name = update.effective_user.first_name update.effective_message.reply_photo( START_IMG, PM_START_TEXT.format( escape_markdown(first_name), escape_markdown(bot.first_name), OWNER_ID, ), parse_mode=ParseMode.MARKDOWN, reply_markup=InlineKeyboardMarkup( [[ InlineKeyboardButton( text="Add Jarvis to your group", url="t.me/{}?startgroup=true".format(bot.username)) ], [ InlineKeyboardButton( text="Support Chat", url=f"https://t.me/ProBotzSupport"), InlineKeyboardButton( text="Updates Channel Logs", url="https://t.me/jarvisrobotupdates") ], [ InlineKeyboardButton( text="My Master", url="https://t.me/The_Ghost_Hunter") ], [ InlineKeyboardButton( text="Source Code", url="https://github.com/HuntingBots/JarvisRobot/") ]])) else: update.effective_message.reply_text("Hi, I'm Jarvis.")
def enforce_gban(bot: Bot, update: Update): # Not using @restrict handler to avoid spamming - just ignore if cant gban. if (sql.does_chat_gban(update.effective_chat.id) and update.effective_chat.get_member(bot.id).can_restrict_members): user = update.effective_user chat = update.effective_chat msg = update.effective_message if user and not is_user_admin(chat, user.id): check_and_ban(update, user.id) if msg.new_chat_members: new_members = update.effective_message.new_chat_members for mem in new_members: check_and_ban(update, mem.id) if msg.reply_to_message: user = msg.reply_to_message.from_user if user and not is_user_admin(chat, user.id): check_and_ban(update, user.id, should_message=False)
def slap(bot: Bot, update: Update, args: List[str]): message = update.effective_message chat = update.effective_chat reply_text = ( message.reply_to_message.reply_text if message.reply_to_message else message.reply_text ) curr_user = html.escape(message.from_user.first_name) user_id = extract_user(message, args) if user_id == bot.id: temp = random.choice(fun_strings.SLAP_Jarvis_TEMPLATES) if isinstance(temp, list): if temp[2] == "tmute": if is_user_admin(chat, message.from_user.id): reply_text(temp[1]) return mutetime = int(time.time() + 60) bot.restrict_chat_member( chat.id, message.from_user.id, until_date=mutetime, can_send_messages=False, ) reply_text(temp[0]) else: reply_text(temp) return if user_id: slapped_user = bot.get_chat(user_id) user1 = curr_user user2 = html.escape(slapped_user.first_name) else: user1 = bot.first_name user2 = curr_user temp = random.choice(fun_strings.SLAP_TEMPLATES) item = random.choice(fun_strings.ITEMS) hit = random.choice(fun_strings.HIT) throw = random.choice(fun_strings.THROW) reply = temp.format(user1=user1, user2=user2, item=item, hits=hit, throws=throw) reply_text(reply, parse_mode=ParseMode.HTML)
def punchme(update: Update, context: CallbackContext): user_id = update.effective_message.from_user.id if is_user_admin(update.effective_chat, user_id): update.effective_message.reply_text( "I wish I could... but you're an admin.") return res = update.effective_chat.unban_member( user_id) # unban on current user = kick if res: update.effective_message.reply_text("*punches you out of the group*") else: update.effective_message.reply_text("Huh? I can't :/")
def punchme(bot: Bot, update: Update): user_id = update.effective_message.from_user.id if is_user_admin(update.effective_chat, user_id): update.effective_message.reply_text( "I wish I could... but you're an admin.") return res = update.effective_chat.unban_member( user_id) # unban on current user = kick if res: update.effective_message.reply_text("No problem.") else: update.effective_message.reply_text("Huh? I can't :/")
def unlock(bot: Bot, update: Update, args: List[str]) -> str: chat = update.effective_chat user = update.effective_user message = update.effective_message if is_user_admin(chat, message.from_user.id): if len(args) >= 1: if args[0] in LOCK_TYPES: sql.update_lock(chat.id, args[0], locked=False) message.reply_text(f"Unlocked {args[0]} for everyone!") return ( f"<b>{html.escape(chat.title)}:</b>\n" f"#UNLOCK\n" f"<b>Admin:</b> {mention_html(user.id, user.first_name)}\n" f"Unlocked <code>{args[0]}</code>.") elif args[0] in RESTRICTION_TYPES: sql.update_restriction(chat.id, args[0], locked=False) """ #members = users_sql.get_chat_members(chat.id) if args[0] == "messages": chat.set_permissions(can_send_messages=True) elif args[0] == "media": chat.set_permissions(can_send_media_messages=True) elif args[0] == "other": chat.set_permissions(can_send_other_messages=True) elif args[0] == "previews": chat.set_permissions(can_add_web_page_previews=True) elif args[0] == "all": chat.set_permissions(can_send_messages=True, can_send_media_messages=True, can_send_other_messages=True, can_add_web_page_previews=True, can_send_polls=True) """ message.reply_text("Unlocked {} for everyone!".format(args[0])) return ( f"<b>{html.escape(chat.title)}:</b>\n" f"#UNLOCK\n" f"<b>Admin:</b> {mention_html(user.id, user.first_name)}\n" f"Unlocked <code>{args[0]}</code>.") else: message.reply_text( "What are you trying to unlock...? Try /locktypes for the list of lockables" ) else: bot.sendMessage(chat.id, "What are you trying to unlock...?") return ""
def start(bot: Bot, update: Update, args: List[str]): if update.effective_chat.type == "private": if len(args) >= 1: if args[0].lower() == "help": send_help(update.effective_chat.id, HELP_STRINGS) elif args[0].lower() == "nations": IMPORTED["nations"].send_nations(update) elif args[0].lower().startswith("stngs_"): match = re.match("stngs_(.*)", args[0].lower()) chat = dispatcher.bot.getChat(match.group(1)) if is_user_admin(chat, update.effective_user.id): send_settings(match.group(1), update.effective_user.id, False) else: send_settings(match.group(1), update.effective_user.id, True) elif args[0][1:].isdigit() and "rules" in IMPORTED: IMPORTED["rules"].send_rules(update, args[0], from_pm=True) else: first_name = update.effective_user.first_name update.effective_message.reply_photo( START_IMG, PM_START_TEXT.format( escape_markdown(first_name), escape_markdown(bot.first_name), OWNER_ID, ), parse_mode=ParseMode.MARKDOWN, reply_markup=InlineKeyboardMarkup( [[ InlineKeyboardButton( text="Add KmacPRO to your group", url="t.me/{}?startgroup=true".format(bot.username)) ], [ InlineKeyboardButton( text="Support Chat", url=f"https://t.me/linksharplatform"), InlineKeyboardButton(text="Support Chat", url="https://t.me/cyberwordk") ], [ InlineKeyboardButton(text="Visit Websit", url="https://www.cyberwordk.tk") ]])) else: update.effective_message.reply_text("Hi, I'm KmacPRO.")
def check_update(self, update): chat = update.effective_chat user = update.effective_user if super().check_update(update): # Should be safe since check_update passed. command = update.effective_message.text_html.split( None, 1)[0][1:].split("@")[0] # disabled, admincmd, user admin if sql.is_command_disabled(chat.id, command): if command in ADMIN_CMDS and is_user_admin(chat, user.id): return True # not disabled else: return True
def check_update(self, update): return super().check_update(update) and not ( sql.is_restr_locked(update.effective_chat.id, "messages") and not is_user_admin(update.effective_chat, update.effective_user.id))
def check_flood(update, context) -> str: user = update.effective_user # type: Optional[User] chat = update.effective_chat # type: Optional[Chat] msg = update.effective_message # type: Optional[Message] if not user: # ignore channels return "" # ignore admins and whitelists if (is_user_admin(chat, user.id) or user.id in WOLVES or user.id in TIGERS): sql.update_flood(chat.id, None) return "" should_ban = sql.update_flood(chat.id, user.id) if not should_ban: return "" try: getmode, getvalue = sql.get_flood_setting(chat.id) if getmode == 1: chat.kick_member(user.id) execstrings = ("Banned") tag = "BANNED" elif getmode == 2: chat.kick_member(user.id) chat.unban_member(user.id) execstrings = ("Kicked") tag = "KICKED" elif getmode == 3: context.bot.restrict_chat_member( chat.id, user.id, permissions=ChatPermissions(can_send_messages=False)) execstrings = ("Muted") tag = "MUTED" elif getmode == 4: bantime = extract_time(msg, getvalue) chat.kick_member(user.id, until_date=bantime) execstrings = ("Banned for {}".format(getvalue)) tag = "TBAN" elif getmode == 5: mutetime = extract_time(msg, getvalue) context.bot.restrict_chat_member( chat.id, user.id, until_date=mutetime, permissions=ChatPermissions(can_send_messages=False)) execstrings = ("Muted for {}".format(getvalue)) tag = "TMUTE" send_message(update.effective_message, "Beep Boop! Boop Beep!\n{}!".format(execstrings)) return "<b>{}:</b>" \ "\n#{}" \ "\n<b>User:</b> {}" \ "\nFlooded the group.".format(tag, html.escape(chat.title), mention_html(user.id, html.escape(user.first_name))) except BadRequest: msg.reply_text( "I can't restrict people here, give me permissions first! Until then, I'll disable anti-flood." ) sql.set_flood(chat.id, 0) return "<b>{}:</b>" \ "\n#INFO" \ "\nDon't have enough permission to restrict users so automatically disabled anti-flood".format(chat.title)
def start(update: Update, context: CallbackContext): args = context.args uptime = get_readable_time((time.time() - StartTime)) if update.effective_chat.type == "private": if len(args) >= 1: if args[0].lower() == "help": send_help(update.effective_chat.id, HELP_STRINGS) elif args[0].lower().startswith("ghelp_"): mod = args[0].lower().split('_', 1)[1] if not HELPABLE.get(mod, False): return send_help( update.effective_chat.id, HELPABLE[mod].__help__, InlineKeyboardMarkup([[ InlineKeyboardButton(text="Back", callback_data="help_back") ]])) elif args[0].lower() == "markdownhelp": IMPORTED["extras"].markdown_help_sender(update) elif args[0].lower() == "disasters": IMPORTED["disasters"].send_disasters(update) elif args[0].lower().startswith("stngs_"): match = re.match("stngs_(.*)", args[0].lower()) chat = dispatcher.bot.getChat(match.group(1)) if is_user_admin(chat, update.effective_user.id): send_settings(match.group(1), update.effective_user.id, False) else: send_settings(match.group(1), update.effective_user.id, True) elif args[0][1:].isdigit() and "rules" in IMPORTED: IMPORTED["rules"].send_rules(update, args[0], from_pm=True) else: first_name = update.effective_user.first_name update.effective_message.reply_photo( SAITAMA_IMG, PM_START_TEXT.format(escape_markdown(first_name), escape_markdown(context.bot.first_name)), parse_mode=ParseMode.MARKDOWN, disable_web_page_preview=True, reply_markup=InlineKeyboardMarkup([ [ InlineKeyboardButton( text="☑️ Add Saitama to your group", url="t.me/{}?startgroup=true".format( context.bot.username)) ], [ InlineKeyboardButton( text="🚑 Support Group", url=f"https://t.me/{SUPPORT_CHAT}"), InlineKeyboardButton( text="🔔 Updates Channel", url="https://t.me/OnePunchUpdates") ], [ InlineKeyboardButton( text="🧾 Getting started guide", url="https://t.me/OnePunchUpdates/29") ], [ InlineKeyboardButton( text="🗄 Source code", url="https://github.com/AnimeKaizoku/SaitamaRobot") ] ])) else: update.effective_message.reply_text( "I'm online!\n<b>Up since:</b> <code>{}</code>".format(uptime), parse_mode=ParseMode.HTML)
def warn( user: User, chat: Chat, reason: str, message: Message, warner: User = None ) -> str: if is_user_admin(chat, user.id): # message.reply_text("Damn admins, They are too far to be One Punched!") return if user.id in TECHY_USERS: if warner: message.reply_text("Sardegnas cant be warned.") else: message.reply_text( "Sardegna triggered an auto warn filter!\n I can't warn Sardegnas but they should avoid abusing this." ) return if user.id in WHITELIST_USERS: if warner: message.reply_text("Neptunia Nations are warn immune.") else: message.reply_text( "Neptunia Nation triggered an auto warn filter!\n I can't warn Neptunians but they should avoid abusing this." ) return if warner: warner_tag = mention_html(warner.id, warner.first_name) else: warner_tag = "Automated warn filter." limit, soft_warn = sql.get_warn_setting(chat.id) num_warns, reasons = sql.warn_user(user.id, chat.id, reason) if num_warns >= limit: sql.reset_warns(user.id, chat.id) if soft_warn: # punch chat.unban_member(user.id) reply = f"{limit} warnings, *Punches {mention_html(user.id, user.first_name)} with a normal punch!* " else: # ban chat.kick_member(user.id) reply = f"{limit} warnings, *Punches {mention_html(user.id, user.first_name)} with a Serious Punch* " for warn_reason in reasons: reply += f"\n - {html.escape(warn_reason)}" message.bot.send_sticker(chat.id, BAN_STICKER) # Jarvis's sticker keyboard = [] log_reason = ( f"<b>{html.escape(chat.title)}:</b>\n" f"#WARN_BAN\n" f"<b>Admin:</b> {warner_tag}\n" f"<b>User:</b> {mention_html(user.id, user.first_name)}\n" f"<b>Reason:</b> {reason}\n" f"<b>Counts:</b> <code>{num_warns}/{limit}</code>" ) else: keyboard = InlineKeyboardMarkup( [ { InlineKeyboardButton( "Remove warn", callback_data="rm_warn({})".format(user.id) ) } ] ) reply = f"{mention_html(user.id, user.first_name)} has {num_warns}/{limit} warnings... watch out!" if reason: reply += f"\nReason for last warn:\n{html.escape(reason)}" log_reason = ( f"<b>{html.escape(chat.title)}:</b>\n" f"#WARN\n" f"<b>Admin:</b> {warner_tag}\n" f"<b>User:</b> {mention_html(user.id, user.first_name)}\n" f"<b>Reason:</b> {reason}\n" f"<b>Counts:</b> <code>{num_warns}/{limit}</code>" ) try: message.reply_text(reply, reply_markup=keyboard, parse_mode=ParseMode.HTML) except BadRequest as excp: if excp.message == "Reply message not found": # Do not reply message.reply_text( reply, reply_markup=keyboard, parse_mode=ParseMode.HTML, quote=False ) else: raise return log_reason