Skip to content
This repository has been archived by the owner on Sep 30, 2022. It is now read-only.

Add /rban command allowing remote bans #13

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 63 additions & 1 deletion tg_bot/modules/bans.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -191,6 +191,66 @@ def unban(bot: Bot, update: Update, args: List[str]) -> str:
return log


@run_async
@bot_admin
Copy link
Owner

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 normal return instead.

def rban(bot: Bot, update: Update, args: List[str]):
message = update.effective_message

if args:
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use if not args and return immediately

Copy link
Owner

Choose a reason for hiding this comment

The 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)
Copy link
Owner

Choose a reason for hiding this comment

The 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?
Also, check if bot is admin in that chat.

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":
Copy link
Owner

Choose a reason for hiding this comment

The 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
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

log not declared.

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

Expand All @@ -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)