File size: 5,911 Bytes
c7dfe8b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
# <============================================== IMPORTS =========================================================>
from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update
from telegram.constants import ParseMode
from telegram.error import BadRequest
from telegram.ext import CommandHandler, ContextTypes, filters
from telegram.helpers import escape_markdown
import Database.sql.rules_sql as sql
from Mikobot import dispatcher, function
from Mikobot.plugins.helper_funcs.chat_status import check_admin
from Mikobot.plugins.helper_funcs.string_handling import (
markdown_parser,
markdown_to_html,
)
# <=======================================================================================================>
# <================================================ FUNCTION =======================================================>
async def get_rules(update: Update, context: ContextTypes.DEFAULT_TYPE):
chat_id = update.effective_chat.id
await send_rules(update, chat_id)
async def send_rules(update, chat_id, from_pm=False):
bot = dispatcher.bot
user = update.effective_user # type: Optional[User]
reply_msg = update.message.reply_to_message
try:
chat = await bot.get_chat(chat_id)
except BadRequest as excp:
if excp.message == "Chat not found" and from_pm:
await bot.send_message(
user.id,
"The rules shortcut for this chat hasn't been set properly! Ask admins to "
"fix this.\nMaybe they forgot the hyphen in ID",
message_thread_id=update.effective_message.message_thread_id
if chat.is_forum
else None,
)
return
else:
raise
rules = sql.get_rules(chat_id)
text = f"The rules for {escape_markdown(chat.title, 2)} are:\n\n{markdown_to_html(rules)}"
if from_pm and rules:
await bot.send_message(
user.id,
text,
parse_mode=ParseMode.MARKDOWN,
disable_web_page_preview=True,
)
elif from_pm:
await bot.send_message(
user.id,
"The group admins haven't set any rules for this chat yet. "
"This probably doesn't mean it's lawless though...!",
)
elif rules and reply_msg and not reply_msg.forum_topic_created:
await reply_msg.reply_text(
"Please click the button below to see the rules.",
reply_markup=InlineKeyboardMarkup(
[
[
InlineKeyboardButton(
text="RULES",
url=f"t.me/{bot.username}?start={chat_id}",
),
],
],
),
)
elif rules:
await update.effective_message.reply_text(
"Please click the button below to see the rules.",
reply_markup=InlineKeyboardMarkup(
[
[
InlineKeyboardButton(
text="RULES",
url=f"t.me/{bot.username}?start={chat_id}",
),
],
],
),
)
else:
await update.effective_message.reply_text(
"The group admins haven't set any rules for this chat yet. "
"This probably doesn't mean it's lawless though...!",
)
@check_admin(is_user=True)
async def set_rules(update: Update, context: ContextTypes.DEFAULT_TYPE):
chat_id = update.effective_chat.id
msg = update.effective_message # type: Optional[Message]
raw_text = msg.text
args = raw_text.split(None, 1) # use python's maxsplit to separate cmd and args
if len(args) == 2:
txt = args[1]
offset = len(txt) - len(raw_text) # set correct offset relative to command
markdown_rules = markdown_parser(
txt,
entities=msg.parse_entities(),
offset=offset,
)
sql.set_rules(chat_id, markdown_rules)
await update.effective_message.reply_text(
"Successfully set rules for this group."
)
@check_admin(is_user=True)
async def clear_rules(update: Update, context: ContextTypes.DEFAULT_TYPE):
chat_id = update.effective_chat.id
sql.set_rules(chat_id, "")
await update.effective_message.reply_text("Successfully cleared rules!")
def __stats__():
return f"• {sql.num_chats()} chats have rules set."
async def __import_data__(chat_id, data, message):
# set chat rules
rules = data.get("info", {}).get("rules", "")
sql.set_rules(chat_id, rules)
def __migrate__(old_chat_id, new_chat_id):
sql.migrate_chat(old_chat_id, new_chat_id)
def __chat_settings__(chat_id, user_id):
return f"This chat has had its rules set: `{bool(sql.get_rules(chat_id))}`"
# <=======================================================================================================>
# <================================================= HELP ======================================================>
__help__ = """
➠ /rules: Get the rules for this chat.
➠ *Admins only*:
» /setrules <your rules here>: Set the rules for this chat.
» /clearrules: Clear the rules for this chat.
"""
__mod_name__ = "RULES"
# <================================================ HANDLER =======================================================>
function(
CommandHandler("rules", get_rules, filters=filters.ChatType.GROUPS, block=False)
)
function(
CommandHandler("setrules", set_rules, filters=filters.ChatType.GROUPS, block=False)
)
function(
CommandHandler(
"clearrules", clear_rules, filters=filters.ChatType.GROUPS, block=False
)
)
# <================================================== END =====================================================>
|