-
Notifications
You must be signed in to change notification settings - Fork 916
Add /rban command allowing remote bans #13
base: master
Are you sure you want to change the base?
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12,7 +12,7 @@ | |
is_user_admin, is_user_in_chat | ||
from tg_bot.modules.helper_funcs.extraction import extract_user_and_text | ||
from tg_bot.modules.log_channel import loggable | ||
|
||
from tg_bot.modules.helper_funcs.filters import CustomFilters | ||
|
||
@run_async | ||
@bot_admin | ||
|
@@ -191,6 +191,66 @@ def unban(bot: Bot, update: Update, args: List[str]) -> str: | |
return log | ||
|
||
|
||
@run_async | ||
@bot_admin | ||
def rban(bot: Bot, update: Update, args: List[str]): | ||
message = update.effective_message | ||
|
||
if args: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Use There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. (makes it easier to read + avoids unnecessary indents) |
||
user_id, chat_id = extract_user_and_text(message, args) | ||
|
||
if not user_id: | ||
message.reply_text("You don't seem to be referring to a user.") | ||
return "" | ||
elif not chat_id: | ||
message.reply_text("You don't seem to be referring to a chat.") | ||
return "" | ||
|
||
try: | ||
chat = bot.get_chat(chat_id) | ||
except BadRequest as excp: | ||
if excp.message == "Chat not found": | ||
message.reply_text("Chat not found! Make sure you entered a valid chat ID") | ||
return "" | ||
else: | ||
raise | ||
|
||
else: | ||
message.reply_text("You don't seem to be referring to a chat/user.") | ||
return "" | ||
|
||
try: | ||
member = chat.get_member(user_id) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Check if chat is a group chat first. If you've loaded a private chat, how are you gonna ban? |
||
except BadRequest as excp: | ||
if excp.message == "User not found": | ||
message.reply_text("I can't seem to find this user") | ||
return "" | ||
else: | ||
raise | ||
|
||
if is_user_ban_protected(chat, user_id, member): | ||
message.reply_text("I really wish I could ban admins...") | ||
return "" | ||
|
||
if user_id == bot.id: | ||
message.reply_text("I'm not gonna BAN myself, are you crazy?") | ||
return "" | ||
|
||
try: | ||
chat.kick_member(user_id) | ||
message.reply_text("Banned!") | ||
except BadRequest as excp: | ||
if excp.message == "Reply message not found": | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You're going to need more exception catching here, see the possible gban exceptions. |
||
# Do not reply | ||
message.reply_text('Banned!', quote=False) | ||
return log | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
else: | ||
LOGGER.warning(update) | ||
LOGGER.exception("ERROR banning user %s in chat %s (%s) due to %s", user_id, chat.title, chat.id, | ||
excp.message) | ||
message.reply_text("Well damn, I can't ban that user.") | ||
|
||
|
||
__help__ = """ | ||
- /kickme: kicks the user who issued the command | ||
|
||
|
@@ -206,8 +266,10 @@ def unban(bot: Bot, update: Update, args: List[str]) -> str: | |
KICK_HANDLER = CommandHandler("kick", kick, pass_args=True, filters=Filters.group) | ||
UNBAN_HANDLER = CommandHandler("unban", unban, pass_args=True, filters=Filters.group) | ||
KICKME_HANDLER = DisableAbleCommandHandler("kickme", kickme, filters=Filters.group) | ||
RBAN_HANDLER = CommandHandler("rban", rban, pass_args=True, filters=CustomFilters.sudo_filter) | ||
|
||
dispatcher.add_handler(BAN_HANDLER) | ||
dispatcher.add_handler(KICK_HANDLER) | ||
dispatcher.add_handler(UNBAN_HANDLER) | ||
dispatcher.add_handler(KICKME_HANDLER) | ||
dispatcher.add_handler(RBAN_HANDLER) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All the
return ""
are useless, given this hasn't been set as @loggable. Use normalreturn
instead.