mirror of
https://github.com/Nick80835/microbot
synced 2025-08-22 10:09:40 +00:00
add cooldown to mod commands
This commit is contained in:
parent
0119698e81
commit
f24e56e00a
@ -16,6 +16,7 @@ class Command:
|
|||||||
self.help = args.get("help", None) or func.__doc__
|
self.help = args.get("help", None) or func.__doc__
|
||||||
self.hide_help = args.get("hide_help", False)
|
self.hide_help = args.get("hide_help", False)
|
||||||
self.moderation = args.get("moderation", False)
|
self.moderation = args.get("moderation", False)
|
||||||
|
self.mod_cooldown_chats = []
|
||||||
self.owner = args.get("owner", False)
|
self.owner = args.get("owner", False)
|
||||||
self.sudo = args.get("sudo", False)
|
self.sudo = args.get("sudo", False)
|
||||||
self.admin = args.get("admin", False)
|
self.admin = args.get("admin", False)
|
||||||
|
@ -15,12 +15,13 @@ from ubot.database import ChatWrapper
|
|||||||
|
|
||||||
from .fixes import inline_photos
|
from .fixes import inline_photos
|
||||||
|
|
||||||
|
PATTERN_TEMPLATE = "^{0}({1})(?: |\n|$|_|@{2}(?: |\n|$|_))(.*)"
|
||||||
|
SIMPLE_PATTERN_TEMPLATE = "^({0})(?: |\n|$)(.*)"
|
||||||
|
RAW_PATTERN_TEMPLATE = "{0}"
|
||||||
|
MODERATION_COMMAND_COOLDOWN_SEC = 3
|
||||||
|
|
||||||
|
|
||||||
class CommandHandler():
|
class CommandHandler():
|
||||||
pattern_template = "^{0}({1})(?: |\n|$|_|@{2}(?: |\n|$|_))(.*)"
|
|
||||||
simple_pattern_template = "^({0})(?: |\n|$)(.*)"
|
|
||||||
raw_pattern_template = "{0}"
|
|
||||||
|
|
||||||
incoming_commands = []
|
incoming_commands = []
|
||||||
inline_photo_commands = []
|
inline_photo_commands = []
|
||||||
inline_article_commands = []
|
inline_article_commands = []
|
||||||
@ -50,16 +51,16 @@ class CommandHandler():
|
|||||||
|
|
||||||
for command in self.incoming_commands:
|
for command in self.incoming_commands:
|
||||||
if command.simple_pattern:
|
if command.simple_pattern:
|
||||||
pattern_match = search(self.simple_pattern_template.format(command.pattern + command.pattern_extra), event.raw_text, IGNORECASE|DOTALL)
|
pattern_match = search(SIMPLE_PATTERN_TEMPLATE.format(command.pattern + command.pattern_extra), event.raw_text, IGNORECASE|DOTALL)
|
||||||
elif command.raw_pattern:
|
elif command.raw_pattern:
|
||||||
pattern_match = search(self.raw_pattern_template.format(command.pattern + command.pattern_extra), event.raw_text, IGNORECASE|DOTALL)
|
pattern_match = search(RAW_PATTERN_TEMPLATE.format(command.pattern + command.pattern_extra), event.raw_text, IGNORECASE|DOTALL)
|
||||||
else:
|
else:
|
||||||
if command.not_disableable:
|
if command.not_disableable:
|
||||||
prefix_list = self.hard_prefix + [chat_prefix] + ["/"]
|
prefix_list = self.hard_prefix + [chat_prefix] + ["/"]
|
||||||
else:
|
else:
|
||||||
prefix_list = self.hard_prefix + [chat_prefix]
|
prefix_list = self.hard_prefix + [chat_prefix]
|
||||||
|
|
||||||
pattern_match = search(self.pattern_template.format(f"({'|'.join([escape(i) for i in prefix_list])})", command.pattern + command.pattern_extra, self.micro_bot.me.username), event.raw_text, IGNORECASE|DOTALL)
|
pattern_match = search(PATTERN_TEMPLATE.format(f"({'|'.join([escape(i) for i in prefix_list])})", command.pattern + command.pattern_extra, self.micro_bot.me.username), event.raw_text, IGNORECASE|DOTALL)
|
||||||
|
|
||||||
if pattern_match:
|
if pattern_match:
|
||||||
command.uses += 1
|
command.uses += 1
|
||||||
@ -109,7 +110,7 @@ class CommandHandler():
|
|||||||
|
|
||||||
async def handle_inline(self, event: ExtendedInlineQuery):
|
async def handle_inline(self, event: ExtendedInlineQuery):
|
||||||
for command in self.inline_photo_commands:
|
for command in self.inline_photo_commands:
|
||||||
pattern_match = search(self.simple_pattern_template.format(command.pattern + command.pattern_extra), event.text, IGNORECASE|DOTALL)
|
pattern_match = search(SIMPLE_PATTERN_TEMPLATE.format(command.pattern + command.pattern_extra), event.text, IGNORECASE|DOTALL)
|
||||||
|
|
||||||
if pattern_match:
|
if pattern_match:
|
||||||
if self.is_blacklisted(event, True) and not self.is_owner(event) and not self.is_sudo(event):
|
if self.is_blacklisted(event, True) and not self.is_owner(event) and not self.is_sudo(event):
|
||||||
@ -119,7 +120,7 @@ class CommandHandler():
|
|||||||
return
|
return
|
||||||
|
|
||||||
for command in self.inline_article_commands:
|
for command in self.inline_article_commands:
|
||||||
pattern_match = search(self.simple_pattern_template.format(command.pattern + command.pattern_extra), event.text, IGNORECASE|DOTALL)
|
pattern_match = search(SIMPLE_PATTERN_TEMPLATE.format(command.pattern + command.pattern_extra), event.text, IGNORECASE|DOTALL)
|
||||||
|
|
||||||
if pattern_match:
|
if pattern_match:
|
||||||
if self.is_blacklisted(event, True) and not self.is_owner(event) and not self.is_sudo(event):
|
if self.is_blacklisted(event, True) and not self.is_owner(event) and not self.is_sudo(event):
|
||||||
@ -271,9 +272,20 @@ class CommandHandler():
|
|||||||
command.locked_users.append(event.sender_id)
|
command.locked_users.append(event.sender_id)
|
||||||
await command.function(event)
|
await command.function(event)
|
||||||
command.locked_users.remove(event.sender_id)
|
command.locked_users.remove(event.sender_id)
|
||||||
else:
|
elif command.moderation:
|
||||||
if command.chance and randint(0, 100) <= command.chance or not command.chance:
|
if not event.chat.id in command.mod_cooldown_chats:
|
||||||
|
command.mod_cooldown_chats.append(event.chat.id)
|
||||||
await command.function(event)
|
await command.function(event)
|
||||||
|
await asyncio.sleep(MODERATION_COMMAND_COOLDOWN_SEC)
|
||||||
|
|
||||||
|
try:
|
||||||
|
command.mod_cooldown_chats.remove(event.chat.id)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
elif command.chance and randint(0, 100) <= command.chance:
|
||||||
|
await command.function(event)
|
||||||
|
else:
|
||||||
|
await command.function(event)
|
||||||
except Exception as exception:
|
except Exception as exception:
|
||||||
command.lock_reason = None
|
command.lock_reason = None
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user