async def get_settings(_, m: Message): warn_settings_db = WarnSettings(m.chat.id) settings = warn_settings_db.get_warnings_settings() await m.reply_text( ("This group has these following settings:\n" f"<b>Warn Limit:</b> <code>{settings['warn_limit']}</code>\n" f"<b>Warn Mode:</b> <code>{settings['warn_mode']}</code>"), ) return
async def perform_action_blacklist(m: Message, action: str, trigger: str): if action == "kick": await m.chat.kick_member(m.from_user.id, int(time() + 45)) await m.reply_text( tlang(m, "blacklist.bl_watcher.action_kick").format( user=m.from_user.username or f"<b>{m.from_user.first_name}</b>", ), ) elif action == "ban": (await m.chat.kick_member(m.from_user.id, )) await m.reply_text( tlang(m, "blacklist.bl_watcher.action_ban").format( user=m.from_user.username or f"<b>{m.from_user.first_name}</b>", ), ) elif action == "mute": await m.chat.restrict_member( m.from_user.id, ChatPermissions(), ) await m.reply_text( tlang(m, "blacklist.bl_watcher.action_mute").format( user=m.from_user.username or f"<b>{m.from_user.first_name}</b>", ), ) elif action == "warn": warns_settings_db = WarnSettings(m.chat.id) warns_db = Warns(m.chat.id) warn_settings = warns_settings_db.get_warnings_settings() warn_reason = bl_db.get_reason() _, num = warns_db.warn_user(m.from_user.id, warn_reason) if num >= warn_settings["warn_limit"]: if warn_settings["warn_mode"] == "kick": await m.chat.ban_member( m.from_user.id, until_date=int(time() + 45), ) action = "kicked" elif warn_settings["warn_mode"] == "ban": await m.chat.ban_member(m.from_user.id) action = "banned" elif warn_settings["warn_mode"] == "mute": await m.chat.restrict_member(m.from_user.id, ChatPermissions()) action = "muted" await m.reply_text(( f"Warnings {num}/{warn_settings['warn_limit']}\n" f"{(await mention_html(m.from_user.first_name, m.from_user.id))} has been <b>{action}!</b>" ), ) return await m.reply_text( ( f"{(await mention_html(m.from_user.first_name, m.from_user.id))} warned {num}/{warn_settings['warn_limit']}\n" # f"Last warn was for:\n<i>{warn_reason}</i>" f"Last warn was for:\n<i>{warn_reason.format(trigger)}</i>" ), ) return
async def warnlimit(_, m: Message): warn_settings_db = WarnSettings(m.chat.id) if len(m.text.split()) > 1: wl = int(m.text.split(None, 1)[1]) if not isinstance(wl, int): await m.reply_text("Warn Limit can only be a number!") return warnlimit_var = warn_settings_db.set_warnlimit(wl) await m.reply_text(f"Warn Limit has been set to: {warnlimit_var}") return warnlimit_var = warn_settings_db.get_warnlimit() await m.reply_text(f"This chats current Warn Limit is: {warnlimit_var}") return
async def warnmode(_, m: Message): warn_settings_db = WarnSettings(m.chat.id) if len(m.text.split()) > 1: wm = (m.text.split(None, 1)[1]).lower() if wm not in ("kick", "ban", "mute"): await m.reply_text(( "Please choose a valid warn mode!" "Valid options are: <code>ban</code>,<code>kick</code>,<code>mute</code>" ), ) return warnmode_var = warn_settings_db.set_warnmode(wm) await m.reply_text(f"Warn Mode has been set to: {warnmode_var}") return warnmode_var = warn_settings_db.get_warnmode() await m.reply_text(f"This chats current Warn Mode is: {warnmode_var}") return
async def list_warns(c: Alita, m: Message): from alita import BOT_ID user_id, user_first_name, _ = await extract_user(c, m) if user_id == BOT_ID: await m.reply_text("Huh, why would I warn myself?") return if user_id in SUPPORT_STAFF: await m.reply_text("This user has no warns!") LOGGER.info( f"{m.from_user.id} trying to check warns of {user_id} (SUPPORT_STAFF) in {m.chat.id}", ) return try: admins_group = {i[0] for i in ADMIN_CACHE[m.chat.id]} except KeyError: admins_group = {i[0] for i in (await admin_cache_reload(m, "warns"))} if user_id in admins_group: await m.reply_text( "This user is admin in this chat, they don't have any warns!", ) return warn_db = Warns(m.chat.id) warn_settings_db = WarnSettings(m.chat.id) warns, num_warns = warn_db.get_warns(user_id) warn_settings = warn_settings_db.get_warnings_settings() if not warns: await m.reply_text("This user has no warns!") return msg = f"{(await mention_html(user_first_name,user_id))} has <b>{num_warns}/{warn_settings['warn_limit']}</b> warns!\n\n<b>Reasons:</b>\n" msg += "\n".join([("- No reason" if i is None else f" - {i}") for i in warns]) await m.reply_text(msg) return
from alita.database.warns_db import Warns, WarnSettings from alita.utils.custom_filters import command, dev_filter # initialise bldb = Blacklist() gbandb = GBan() notesdb = Notes() rulesdb = Rules() userdb = Users() appdb = Approve() chatdb = Chats() fldb = Filters() pinsdb = Pins() notesettings_db = NotesSettings() warns_db = Warns() warns_settings_db = WarnSettings() @Alita.on_message(command("stats", DEV_PREFIX_HANDLER) & dev_filter) async def get_stats(_, m: Message): replymsg = await m.reply_text("<b><i>Fetching Stats...</i></b>", quote=True) rply = ( f"<b>Users:</b> <code>{(userdb.count_users())}</code> in <code>{(chatdb.count_chats())}</code> chats\n" f"<b>Anti Channel Pin:</b> <code>{(pinsdb.count_chats('antichannelpin'))}</code> enabled chats\n" f"<b>Clean Linked:</b> <code>{(pinsdb.count_chats('cleanlinked'))}</code> enabled chats\n" f"<b>Filters:</b> <code>{(fldb.count_filters_all())}</code> in <code>{(fldb.count_filters_chats())}</code> chats\n" f" <b>Aliases:</b> <code>{(fldb.count_filter_aliases())}</code>\n" f"<b>Blacklists:</b> <code>{(bldb.count_blacklists_all())}</code> in <code>{(bldb.count_blackists_chats())}</code> chats\n" f" <b>Action Specific:</b>\n" f" <b>None:</b> <code>{(bldb.count_action_bl_all('none'))}</code> chats\n" f" <b>Kick</b> <code>{(bldb.count_action_bl_all('kick'))}</code> chats\n"
async def warn(c: Alita, m: Message): if m.reply_to_message: r_id = m.reply_to_message.message_id if len(m.text.split()) >= 2: reason = m.text.split(None, 1)[1] else: reason = None elif not m.reply_to_message: r_id = m.message_id if len(m.text.split()) >= 3: reason = m.text.split(None, 2)[2] else: reason = None else: reason = None if not len(m.command) > 1 and not m.reply_to_message: await m.reply_text("Я не могу выдать варн никому. Ответь на то сообщение кому нужно выдать") return user_id, user_first_name, _ = await extract_user(c, m) if user_id == Config.BOT_ID: await m.reply_text("Huh, why would I warn myself?") return if user_id in SUPPORT_STAFF: await m.reply_text(tlang(m, "admin.support_cannot_restrict")) LOGGER.info( f"{m.from_user.id} trying to warn {user_id} (SUPPORT_STAFF) in {m.chat.id}", ) return try: admins_group = {i[0] for i in ADMIN_CACHE[m.chat.id]} except KeyError: admins_group = {i[0] for i in (await admin_cache_reload(m, "warn_user"))} if user_id in admins_group: await m.reply_text("This user is admin in this chat, I can't warn them!") return warn_db = Warns(m.chat.id) warn_settings_db = WarnSettings(m.chat.id) _, num = warn_db.warn_user(user_id, reason) warn_settings = warn_settings_db.get_warnings_settings() if num >= warn_settings["warn_limit"]: if warn_settings["warn_mode"] == "kick": await m.chat.ban_member(user_id, until_date=int(time() + 45)) action = "kicked" elif warn_settings["warn_mode"] == "ban": await m.chat.ban_member(user_id) action = "banned" elif warn_settings["warn_mode"] == "mute": await m.chat.restrict_member(user_id, ChatPermissions()) action = "muted" await m.reply_text( ( f"Warnings {num}/{warn_settings['warn_limit']}!" f"\n<b>Reason for last warn</b>:\n{reason}" if reason else "\n" f"{(await mention_html(user_first_name, user_id))} has been <b>{action}!</b>" ), reply_to_message_id=r_id, ) await m.stop_propagation() rules = Rules(m.chat.id).get_rules() if rules: kb = InlineKeyboardButton( "Rules 📋", url=f"https://t.me/{Config.BOT_USERNAME}?start=rules_{m.chat.id}", ) else: kb = InlineKeyboardButton( "Kick ⚠️", callback_data=f"warn.kick.{user_id}", ) if m.text.split()[0] == "/swarn": await m.delete() await m.stop_propagation() if m.text.split()[0] == "/dwarn": if not m.reply_to_message: await m.reply_text("Reply to a message to delete it and ban the user!") await m.stop_propagation() await m.reply_to_message.delete() txt = f"{(await mention_html(user_first_name, user_id))} has {num}/{warn_settings['warn_limit']} warnings!" txt += f"\n<b>Reason for last warn</b>:\n{reason}" if reason else "" await m.reply_text( txt, reply_markup=InlineKeyboardMarkup( [ [ InlineKeyboardButton( "Remove Warn ❌", callback_data=f"warn.remove.{user_id}", ), ] + [kb], ], ), reply_to_message_id=r_id, ) await m.stop_propagation()