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 TIGER_USERS: if warner: message.reply_text("Tigers cant be warned.") else: message.reply_text( "Tiger triggered an auto warn filter!\n I can't warn tigers but they should avoid abusing this." ) return if user.id in WHITELIST_USERS: if warner: message.reply_text("Wolf disasters are warn immune.") else: message.reply_text( "Wolf Disaster triggered an auto warn filter!\nI can't warn wolves 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) # AstrakoBot'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"<code>�</code><b>Warn Event</b>\n<code> </code><b>• User:</b> {mention_html(user.id, user.first_name)}\n<code> </code><b>• Count:</b> {num_warns}/{limit}" if reason: reply += f"\n<code> </code><b>• Reason:</b> {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
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, can't even be warned!") 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: # kick chat.unban_member(user.id) reply = "{} warnings, {} has been kicked!".format( limit, mention_html(user.id, user.first_name)) else: # ban chat.kick_member(user.id) reply = "{} warnings, {} has been banned!".format( limit, mention_html(user.id, user.first_name)) for warn_reason in reasons: reply += "\n - {}".format(html.escape(warn_reason)) message.bot.send_sticker(chat.id, BAN_STICKER) # banhammer marie sticker keyboard = [] log_reason = "<b>{}:</b>" \ "\n#WARN_BAN" \ "\n<b>Admin:</b> {}" \ "\n<b>User:</b> {}" \ "\n<b>Reason:</b> {}"\ "\n<b>Counts:</b> <code>{}/{}</code>".format(html.escape(chat.title), warner_tag, mention_html(user.id, user.first_name), reason, num_warns, limit) else: keyboard = InlineKeyboardMarkup([[ InlineKeyboardButton("Remove warn", callback_data="rm_warn({})".format(user.id)) ]]) reply = "{} has {}/{} warnings... watch out!".format( mention_html(user.id, user.first_name), num_warns, limit) if reason: reply += "\nReason for last warn:\n{}".format(html.escape(reason)) log_reason = "<b>{}:</b>" \ "\n#WARN" \ "\n<b>Admin:</b> {}" \ "\n<b>User:</b> {}" \ "\n<b>Reason:</b> {}"\ "\n<b>Counts:</b> <code>{}/{}</code>".format(html.escape(chat.title), warner_tag, mention_html(user.id, user.first_name), reason, num_warns, limit) 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
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 kicked!") return if user.id in SARDEGNA_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("Whitelisted users are warn immune.") else: message.reply_text( "Neptunian triggered an auto warn filter!\nI can't warn Neptunians users 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: # kick chat.unban_member(user.id) reply = ( f"<code>�</code><b>Kick Event</b>\n" f"<code> </code><b>• User:</b> {mention_html(user.id, user.first_name)}\n" f"<code> </code><b>• Count:</b> {limit}" ) else: # ban chat.kick_member(user.id) reply = ( f"<code>�</code><b>Ban Event</b>\n" f"<code> </code><b>• User:</b> {mention_html(user.id, user.first_name)}\n" f"<code> </code><b>• Count:</b> {limit}" ) for warn_reason in reasons: reply += f"\n - {html.escape(warn_reason)}" # message.bot.send_sticker(chat.id, BAN_STICKER) # Saitama's sticker keyboard = None 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"<code>�</code><b>Warn Event</b>\n" f"<code> </code><b>• User:</b> {mention_html(user.id, user.first_name)}\n" f"<code> </code><b>• Count:</b> {num_warns}/{limit}" ) if reason: reply += f"\n<code> </code><b>• Reason:</b> {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
def warn(user: User, chat: Chat, reason: str, message: Message, warner: User = None, conn=False) -> str: if is_user_admin(chat, user.id): return "" if warner: warner_tag = mention_html(warner.id, warner.first_name) else: warner_tag = tl(chat.id, "Filter peringatan otomatis.") limit, soft_warn, warn_mode = 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 not soft_warn: if not warn_mode: chat.unban_member(user.id) reply = tl(chat.id, "{} peringatan, {} telah ditendang!").format( limit, mention_html(user.id, user.first_name)) elif warn_mode == 1: chat.unban_member(user.id) reply = tl(chat.id, "{} peringatan, {} telah ditendang!").format( limit, mention_html(user.id, user.first_name)) elif warn_mode == 2: chat.kick_member(user.id) reply = tl(chat.id, "{} peringatan, {} telah diblokir!").format( limit, mention_html(user.id, user.first_name)) elif warn_mode == 3: message.bot.restrict_chat_member(chat.id, user.id, can_send_messages=False) reply = tl(chat.id, "{} peringatan, {} telah dibisukan!").format( limit, mention_html(user.id, user.first_name)) else: chat.kick_member(user.id) reply = tl(chat.id, "{} peringatan, {} telah diblokir!").format( limit, mention_html(user.id, user.first_name)) for warn_reason in reasons: reply += "\n - {}".format(html.escape(warn_reason)) message.bot.send_sticker(chat.id, BAN_STICKER) # banhammer marie sticker keyboard = None log_reason = "<b>{}:</b>" \ "\n#WARN_BAN" \ "\n<b>Admin:</b> {}" \ "\n<b>User:</b> {} (<code>{}</code>)" \ "\n<b>Reason:</b> {}"\ "\n<b>Counts:</b> <code>{}/{}</code>".format(html.escape(chat.title), warner_tag, mention_html(user.id, user.first_name), user.id, reason, num_warns, limit) else: keyboard = InlineKeyboardMarkup([[ InlineKeyboardButton(tl(chat.id, "Hapus peringatan"), callback_data="rm_warn({})".format(user.id)), InlineKeyboardButton(tl(chat.id, "Peraturan"), url="t.me/{}?start={}".format( dispatcher.bot.username, chat.id)) ]]) if num_warns + 1 == limit: if not warn_mode: action_mode = tl(chat.id, "tendang") elif warn_mode == 1: action_mode = tl(chat.id, "tendang") elif warn_mode == 2: action_mode = tl(chat.id, "blokir") elif warn_mode == 3: action_mode = tl(chat.id, "bisukan") reply = tl( chat.id, "{} punya {}/{} peringatan... Jika anda di peringati lagi maka kamu akan di {}!" ).format(mention_html(user.id, user.first_name), num_warns, limit, action_mode) else: reply = tl(chat.id, "{} punya {}/{} peringatan... Hati-hati!").format( mention_html(user.id, user.first_name), num_warns, limit) if reason: reply += tl(chat.id, "\nAlasan pada peringatan terakhir:\n{}").format( html.escape(reason)) log_reason = "<b>{}:</b>" \ "\n#WARN" \ "\n<b>Admin:</b> {}" \ "\n<b>User:</b> {} (<code>{}</code>)" \ "\n<b>Reason:</b> {}"\ "\n<b>Counts:</b> <code>{}/{}</code>".format(html.escape(chat.title), warner_tag, mention_html(user.id, user.first_name), user.id, reason, num_warns, limit) try: if conn: send_message_raw(chat.id, reply, reply_markup=keyboard, parse_mode=ParseMode.HTML) else: send_message_raw(chat.id, reply, reply_to_message_id=message.message_id, reply_markup=keyboard, parse_mode=ParseMode.HTML) # send_message(update.effective_message, reply, reply_markup=keyboard, parse_mode=ParseMode.HTML) except BadRequest as excp: if excp.message == "Reply message not found": # Do not reply if conn: message.bot.sendMessage(chat.id, reply, reply_markup=keyboard, parse_mode=ParseMode.HTML) else: try: message.bot.sendMessage( chat.id, reply, reply_to_message_id=message.message_id, reply_markup=keyboard, parse_mode=ParseMode.HTML, quote=False) except BadRequest: message.bot.sendMessage(chat.id, reply, reply_markup=keyboard, parse_mode=ParseMode.HTML, quote=False) # send_message(update.effective_message, reply, reply_markup=keyboard, parse_mode=ParseMode.HTML, quote=False) else: raise return log_reason
def warn(user: User, chat: Chat, reason: str, message: Message, warner: User = None) -> str: bot = dispatcher.bot if is_user_admin(chat, user.id): message.reply_text(tld(chat.id, 'warns_warn_admin_no_warn')) return "" if warner: warner_tag = mention_html(warner.id, warner.first_name) else: warner_tag = tld(chat.id, 'warns_warn_admin_autofilter') 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: # kick chat.unban_member(user.id) reply = tld(chat.id, 'warns_max_warn_kick').format( limit, mention_html(user.id, user.first_name)) else: # ban chat.kick_member(user.id) reply = tld(chat.id, 'warns_max_warn_ban').format( limit, mention_html(user.id, user.first_name)) for warn_reason in reasons: reply += "\n - {}".format(html.escape(warn_reason)) keyboard = [] log_reason = tld(chat.id, 'warns_warn_ban_log_channel').format( html.escape(chat.title), warner_tag, mention_html(user.id, user.first_name), user.id, reason, num_warns, limit) else: keyboard = [[ InlineKeyboardButton(tld(chat.id, 'warns_btn_remove_warn'), callback_data="rm_warn({})".format(user.id)) ]] rules = rules_sql.get_rules(chat.id) if rules: keyboard[0].append( InlineKeyboardButton(tld(chat.id, 'warns_btn_rules'), url="t.me/{}?start={}".format( bot.username, chat.id))) reply = tld(chat.id, 'warns_user_warned').format( mention_html(user.id, user.first_name), num_warns, limit) if reason: reply += tld(chat.id, 'warns_latest_warn_reason').format( html.escape(reason)) log_reason = tld(chat.id, 'warns_warn_log_channel').format( html.escape(chat.title), warner_tag, mention_html(user.id, user.first_name), user.id, reason, num_warns, limit) try: message.reply_text(reply, reply_markup=InlineKeyboardMarkup(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=InlineKeyboardMarkup(keyboard), parse_mode=ParseMode.HTML, quote=False) else: raise return log_reason
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 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: # kick chat.unban_member(user.id) reply = f"{limit} warnings, {mention_html(user.id, user.first_name)} with a normal warn! " else: # ban chat.kick_member(user.id) reply = f"{limit} warnings, {mention_html(user.id, user.first_name)} with a Serious warn " for warn_reason in reasons: reply += f"\n - {html.escape(warn_reason)}" message.bot.send_sticker(chat.id, BAN_STICKER) # banhammer marie 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"#WARNn<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
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 FROG_USERS: if warner: message.reply_text("Las 'Ranas' no pueden ser advertidos.") else: message.reply_text( "El usuario es una 'Rana'\nNo puedo advertir a estos usuarios, pero deben evitar abusar de esto." ) return if user.id in WHITELIST_USERS: if warner: message.reply_text("Los 'Sapos' no pueden ser advertidos.") else: message.reply_text( "El usuario es una 'Rana'\nNo puedo advertir a estos usuarios, pero deben evitar abusar de esto." ) return if warner: warner_tag = mention_html(warner.id, warner.first_name) else: warner_tag = "Filtro de advertencia automatizado." 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"<code>💥</code> <b>Kickeo</b>\n" f" <b>• Usuario:</b> {mention_html(user.id, user.first_name)}\n" f" <b>• Advertencias:</b> {limit}" ) else: # ban chat.kick_member(user.id) reply = ( f"<code>💥</code><b>Baneo</b>\n" f" <b>• Usuario:</b> {mention_html(user.id, user.first_name)}\n" f" <b>• Advertencias:</b> {limit}" ) for warn_reason in reasons: reply += f"\n - {html.escape(warn_reason)}" # message.bot.send_sticker(chat.id, BAN_STICKER) # Saitama's sticker keyboard = None log_reason = ( f"<b>{html.escape(chat.title)}:</b>\n" f"#AdvertenciaBan\n" f"<b>Administrador:</b> {warner_tag}\n" f"<b>Usuario:</b> {mention_html(user.id, user.first_name)}\n" f"<b>Razón:</b> {reason}\n" f"<b>Advertencias:</b> <code>{num_warns}/{limit}</code>" ) else: keyboard = InlineKeyboardMarkup( [ [ InlineKeyboardButton( "✖ Quitar Advertencia", callback_data="rm_warn({})".format(user.id), ) ] ] ) reply = ( f"<code>💥</code><b>Advertencia</b>\n" f"<code> </code><b>• Usuario:</b> {mention_html(user.id, user.first_name)}\n" f"<code> </code><b>• Advertencias:</b> {num_warns}/{limit}" ) if reason: reply += f"\n<code> </code><b>• Razón:</b> {html.escape(reason)}" log_reason = ( f"<b>{html.escape(chat.title)}:</b>\n" f"#Advertencia\n" f"<b>Administrador:</b> {warner_tag}\n" f"<b>Usuario:</b> {mention_html(user.id, user.first_name)}\n" f"<b>Razón:</b> {reason}\n" f"<b>Advertencias:</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
def warn(user: User, chat: Chat, reason: str, message: Message, warner: User = None) -> str: if is_user_admin(chat, user.id): message.reply_text("I'm not going to warn an admin!") 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: # kick chat.unban_member(user.id) reply = "{} warnings, {} has been kicked!".format( limit, mention_html(user.id, user.first_name)) else: # ban chat.kick_member(user.id) reply = "{} warnings, {} has been banned!".format( limit, mention_html(user.id, user.first_name)) for warn_reason in reasons: reply += "\n • {}".format(html.escape(warn_reason)) keyboard = [] log_reason = "<b>{}:</b>" \ "\n#WARN_BAN" \ "\n<b>Admin:</b> {}" \ "\n<b>User:</b> {} (<code>{}</code>)" \ "\n<b>Reason:</b> {}"\ "\n<b>Counts:</b> <code>{}/{}</code>".format(html.escape(chat.title), warner_tag, mention_html(user.id, user.first_name), user.id, reason, num_warns, limit) else: keyboard = InlineKeyboardMarkup([[ InlineKeyboardButton("Remove warn⚠️(admin only)", callback_data="rm_warn({})".format(user.id)) ]]) reply = "User {} <b>has been warned in {}!</b>\nTotal warn that this user have {}/{}".format( mention_html(user.id, user.first_name), chat.title, num_warns, limit) if reason: reply += "\nReason for the warn:\n<code>{}</code>".format( html.escape(reason)) log_reason = "<b>{}:</b>" \ "\n#WARN" \ "\n<b>Admin:</b> {}" \ "\n<b>User:</b> {} (<code>{}</code>)" \ "\n<b>Reason:</b> {}"\ "\n<b>Counts:</b> <code>{}/{}</code>".format(html.escape(chat.title), warner_tag, mention_html(user.id, user.first_name), user.id, reason, num_warns, limit) 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
def warn(user: User, chat: Chat, reason: str, message: Message, warner: User = None) -> str: if is_user_admin(chat, user.id): message.reply_text("빌어먹을 관리자들, 경고도 못 해!") return "" if warner: warner_tag = mention_html(warner.id, warner.first_name) else: warner_tag = "자동 경고 필터." 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: # kick chat.unban_member(user.id) reply = "{} 번 경고, {} 님이 강퇴되었어요!".format(limit, mention_html(user.id, user.first_name)) else: # ban chat.kick_member(user.id) reply = "{} 번 경고, {} 님이 Ban 당했어요!".format(limit, mention_html(user.id, user.first_name)) for warn_reason in reasons: reply += "\n - {}".format(html.escape(warn_reason)) message.bot.send_sticker(chat.id, BAN_STICKER) # banhammer marie sticker keyboard = [] log_reason = "<b>{}:</b>" \ "\n#경고_BAN" \ "\n<b>관리자:</b> {}" \ "\n<b>유저:</b> {} (<code>{}</code>)" \ "\n<b>이유:</b> {}"\ "\n<b>횟수:</b> <code>{}/{}</code>".format(html.escape(chat.title), warner_tag, mention_html(user.id, user.first_name), user.id, reason, num_warns, limit) else: keyboard = InlineKeyboardMarkup( [[InlineKeyboardButton("경고 제거", callback_data="rm_warn({})".format(user.id))]]) reply = "{} (이)가 {}/{} 경고입니다... 조심하세요!".format(mention_html(user.id, user.first_name), num_warns, limit) if reason: reply += "\n마지막 경고 이유:\n{}".format(html.escape(reason)) log_reason = "<b>{}:</b>" \ "\n#경고" \ "\n<b>관리자:</b> {}" \ "\n<b>유저:</b> {} (<code>{}</code>)" \ "\n<b>이유:</b> {}"\ "\n<b>횟수:</b> <code>{}/{}</code>".format(html.escape(chat.title), warner_tag, mention_html(user.id, user.first_name), user.id, reason, num_warns, limit) 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
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 TIGERS: if warner: message.reply_text("Los tigres no pueden ser advertidos.") else: message.reply_text( "¡El tigre activó un filtro de advertencia automática! \nNo puedo advertir a los tigres, pero deberÃan evitar abusar de esto." ) return if user.id in WOLVES: if warner: message.reply_text("Los desastres de lobo son inmunes a las advertencias.") else: message.reply_text( "¡El lobo activó un filtro de advertencia automática! \nNo puedo advertir a los lobos, pero deben evitar abusar de esto." ) return if warner: warner_tag = mention_html(warner.id, warner.first_name) else: warner_tag = "Filtro de advertencia automatizado." 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"<code>â�•</code><b>Evento de advertencias</b>\n" f"<code> </code><b>• Usuario:</b> {mention_html(user.id, user.first_name)}\n" f"<code> </code><b>• Número de advertencias:</b> {limit}") else: # ban chat.kick_member(user.id) reply = ( f"<code>â�•</code><b>Evento de baneo</b>\n" f"<code> </code><b>• Usuario:</b> {mention_html(user.id, user.first_name)}\n" f"<code> </code><b>• Número de advertencias:</b> {limit}") for warn_reason in reasons: reply += f"\n - {html.escape(warn_reason)}" # message.bot.send_sticker(chat.id, BAN_STICKER) # Saitama's sticker keyboard = None log_reason = (f"<b>{html.escape(chat.title)}:</b>\n" f"#WARN_BAN\n" f"<b>Admin:</b> {warner_tag}\n" f"<b>Usuario:</b> {mention_html(user.id, user.first_name)}\n" f"<b>Razón:</b> {reason}\n" f"<b>Número de advertencias:</b> <code>{num_warns}/{limit}</code>") else: keyboard = InlineKeyboardMarkup([[ InlineKeyboardButton( "🔘 Remover advertencia", callback_data="rm_warn({})".format(user.id)) ]]) reply = ( f"<code>â�•</code><b>Evento de advertencia</b>\n" f"<code> </code><b>• Usuario:</b> {mention_html(user.id, user.first_name)}\n" f"<code> </code><b>• Número de advertencias:</b> {num_warns}/{limit}") if reason: reply += f"\n<code> </code><b>• Razón:</b> {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>Usuario:</b> {mention_html(user.id, user.first_name)}\n" f"<b>Razón:</b> {reason}\n" f"<b>Número de advertencias:</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 == "No encuentro el mensaje que respondiste.": # Do not reply message.reply_text( reply, reply_markup=keyboard, parse_mode=ParseMode.HTML, quote=False) else: raise return log_reason
def warn( user: User, chat: Chat, reason: str, message: Message, warner: User = None ) -> str: bot = dispatcher.bot if is_user_admin(chat, user.id): message.reply_text("Damn admins, can't even be warned!") return "" if not user.id or int(user.id) == 777000 or int(user.id) == 1087968824: message.reply_text("This is the Telegram Service Bot or the Group Anonymous Bot. Kinda pointless to warn it, don't you think?") 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: # kick chat.unban_member(user.id) reply = "That's {} warnings, {} has been kicked!".format( limit, mention_html(user.id, user.first_name) ) else: # ban chat.kick_member(user.id) reply = "That's{} warnings, {} has been banned!".format( limit, mention_html(user.id, user.first_name) ) for warn_reason in reasons: reply += "\n - {}".format(html.escape(warn_reason)) keyboard = None log_reason = ( "<b>{}:</b>" "\n#WARN_BAN" "\n<b>Admin:</b> {}" "\n<b>User:</b> {} (<code>{}</code>)" "\n<b>Reason:</b> {}" "\n<b>Counts:</b> <code>{}/{}</code>".format( html.escape(chat.title), warner_tag, mention_html(user.id, user.first_name), user.id, reason, num_warns, limit, ) ) else: keyboard = [[ InlineKeyboardButton("Remove warn", callback_data="rm_warn({})".format(user.id)) ]] rules = rules_sql.get_rules(chat.id) if rules: keyboard[0].append( InlineKeyboardButton("Rules", url="t.me/{}?start={}".format( bot.username, chat.id))) reply = "User {} has {}/{} warnings... watch out!".format( mention_html(user.id, user.first_name), num_warns, limit ) if reason: reply += "\nReason for last warn:\n{}".format(html.escape(reason)) log_reason = ( "<b>{}:</b>" "\n#WARN" "\n<b>Admin:</b> {}" "\n<b>User:</b> {} (<code>{}</code>)" "\n<b>Reason:</b> {}" "\n<b>Counts:</b> <code>{}/{}</code>".format( html.escape(chat.title), warner_tag, mention_html(user.id, user.first_name), user.id, reason, num_warns, limit, ) ) try: message.reply_text(reply, reply_markup=InlineKeyboardMarkup(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=InlineKeyboardMarkup(keyboard), parse_mode=ParseMode.HTML, quote=False ) else: raise return log_reason