# Ultroid - UserBot # Copyright (C) 2021-2025 TeamUltroid # # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > # PLease read the GNU Affero General Public License in # . """ ✘ Commands Available •`{i}warn ` Gives Warn. •`{i}resetwarn ` To reset All Warns. •`{i}warns ` To Get List of Warnings of a user. •`{i}setwarn | ` Set Number in warn count for warnings After putting " | " mark put action like ban/mute/kick Its Default 3 kick Example : `setwarn 5 | mute` """ from pyUltroid.dB.warn_db import add_warn, reset_warn, warns from . import eor, get_string, inline_mention, udB, ultroid_cmd @ultroid_cmd( pattern="warn( (.*)|$)", manager=True, groups_only=True, admins_only=True, ) async def warn(e): ultroid_bot = e.client reply = await e.get_reply_message() if len(e.text) > 5 and " " not in e.text[5]: return if reply: user = reply.sender_id reason = e.text[5:] if e.pattern_match.group(1).strip() else "unknown" else: try: user = e.text.split()[1] if user.startswith("@"): ok = await ultroid_bot.get_entity(user) user = ok.id else: user = int(user) except BaseException: return await e.eor("Reply To A User", time=5) try: reason = e.text.split(maxsplit=2)[-1] except BaseException: reason = "unknown" count, r = warns(e.chat_id, user) r = f"{r}|$|{reason}" if r else reason try: x = udB.get_key("SETWARN") number, action = int(x.split()[0]), x.split()[1] except BaseException: number, action = 3, "kick" if ("ban" or "kick" or "mute") not in action: action = "kick" if count + 1 >= number: if "ban" in action: try: await ultroid_bot.edit_permissions(e.chat_id, user, view_messages=False) except BaseException: return await e.eor("`Something Went Wrong.`", time=5) elif "kick" in action: try: await ultroid_bot.kick_participant(e.chat_id, user) except BaseException: return await e.eor("`Something Went Wrong.`", time=5) elif "mute" in action: try: await ultroid_bot.edit_permissions( e.chat_id, user, until_date=None, send_messages=False ) except BaseException: return await e.eor("`Something Went Wrong.`", time=5) add_warn(e.chat_id, user, count + 1, r) c, r = warns(e.chat_id, user) ok = await ultroid_bot.get_entity(user) user = inline_mention(ok) r = r.split("|$|") text = f"User {user} Got {action} Due to {count+1} Warns.\n\n" for x in range(c): text += f"•**{x+1}.** {r[x]}\n" await e.eor(text) return reset_warn(e.chat_id, ok.id) add_warn(e.chat_id, user, count + 1, r) ok = await ultroid_bot.get_entity(user) user = inline_mention(ok) await eor( e, f"**WARNING :** {count+1}/{number}\n**To :**{user}\n**Be Careful !!!**\n\n**Reason** : {reason}", ) @ultroid_cmd( pattern="resetwarn( (.*)|$)", manager=True, groups_only=True, admins_only=True, ) async def rwarn(e): reply = await e.get_reply_message() if reply: user = reply.sender_id else: try: user = e.text.split()[1] if user.startswith("@"): ok = await e.client.get_entity(user) user = ok.id else: user = int(user) except BaseException: return await e.eor("Reply To user") reset_warn(e.chat_id, user) ok = await e.client.get_entity(user) user = inline_mention(ok) await e.eor(f"Cleared All Warns of {user}.") @ultroid_cmd( pattern="warns( (.*)|$)", manager=True, groups_only=True, admins_only=True, ) async def twarns(e): reply = await e.get_reply_message() if reply: user = reply.from_id.user_id else: try: user = e.text.split()[1] if user.startswith("@"): ok = await e.client.get_entity(user) user = ok.id else: user = int(user) except BaseException: return await e.eor("Reply To A User", time=5) c, r = warns(e.chat_id, user) if c and r: ok = await e.client.get_entity(user) user = inline_mention(ok) r = r.split("|$|") text = f"User {user} Got {c} Warns.\n\n" for x in range(c): text += f"•**{x+1}.** {r[x]}\n" await e.eor(text) else: await e.eor("`No Warnings`") @ultroid_cmd(pattern="setwarn( (.*)|$)", manager=True) async def warnset(e): ok = e.pattern_match.group(1).strip() if not ok: return await e.eor("Invalid format. Correct usage: .setwarns |") if "|" in ok: try: number, action = ok.split("|") number = int(number.strip()) action = action.strip() except ValueError: return await e.eor( "Invalid format. Correct usage: .setwarns |", time=5 ) if action not in ["ban", "mute", "kick"]: return await e.eor("Only mute / ban / kick options are supported", time=5) udB.set_key("SETWARN", f"{number} {action}") await e.eor(f"Done. Your Warn Count is now {number} and Action is {action}") else: await e.eor( "Invalid format. Correct usage: .setwarns |", time=5 )