fix: use Telegram API to lookup users by username
_find_user_id_by_username now uses ctx.bot.get_chat() to lookup any user by username, not just bounty creators. This allows /admin add to work for any user in the group.
This commit is contained in:
@@ -771,15 +771,14 @@ async def cmd_recover(update: Update, ctx: ContextTypes.DEFAULT_TYPE) -> None:
|
||||
await update.message.reply_text("\n".join(response_lines))
|
||||
|
||||
|
||||
def _find_user_id_by_username(room_id: int, username: str) -> int | None:
|
||||
"""Find user_id by username from bounty creators in the room."""
|
||||
bounties = BOUNTY_SERVICE.list_bounties(room_id)
|
||||
for bounty in bounties:
|
||||
if (
|
||||
bounty.created_by_username
|
||||
and bounty.created_by_username.lower() == username.lower()
|
||||
):
|
||||
return bounty.created_by_user_id
|
||||
async def _find_user_id_by_username(
|
||||
ctx: ContextTypes.DEFAULT_TYPE, username: str
|
||||
) -> int | None:
|
||||
"""Find user_id by username using Telegram API."""
|
||||
try:
|
||||
chat = await ctx.bot.get_chat(f"@{username}")
|
||||
return chat.id
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
|
||||
@@ -845,7 +844,7 @@ async def cmd_admin(update: Update, ctx: ContextTypes.DEFAULT_TYPE) -> None:
|
||||
await update.message.reply_text("⛔ Only admins can perform this action.")
|
||||
return
|
||||
|
||||
target_user_id = _find_user_id_by_username(room_id, username)
|
||||
target_user_id = await _find_user_id_by_username(ctx, username)
|
||||
|
||||
if target_user_id is None:
|
||||
await update.message.reply_text(f"⛔ User @{username} not found.")
|
||||
|
||||
Reference in New Issue
Block a user