Как в CallbackData передать айди пользователя?
У меня есть код, который даёт мут новым пользователям, и что бы снять его нужно написать команду "Принять пользователя 123", я хотел бы заменить это на inline кнопку, что бы при нажатии например кнопки "Принять", с пользователя снимался мут, если нажать "Отказать", то банить пользователя, но не знаю как передать айди нового участника в CallbackData, как это можно сделать? Код:
@dp.message_handler(content_types=["new_chat_members"])
async def handler_new_member(message):
safe_text = md.quote_html(message.chat.title)
await bot.restrict_chat_member(message.chat.id, message.new_chat_members[0].id, can_send_messages=False)
await message.reply(f'Уважаемый {message.new_chat_members[0].full_name}, Вы вступили в беседу "{safe_text}", \
вам выдан мут, в целях защиты беседы. Подождите, пожалуйста, пока прибудет администратор...\n⏰ | Срок наказания: Навсегда\n⭐\
Немного информации об участнике:\n? Никнейм: ' + str(message.new_chat_members[0].full_name) + '\n⏰ Дата входа: '\
+ str(message.date) + '\nПриятно провести время!')
admins = await bot.get_chat_administrators(message.chat.id)
await bot.send_message(message.chat.id, f'?? В беседу вступил новый участник {message.new_chat_members[0].full_name}\nКоманда для принятия:\n"<code>Принять пользователя {message.new_chat_members[0].id}</code>"\n' + "".join([f'<a href="tg://user?id={admin.user.id}">ᅠ</a>' for admin in admins]), parse_mode='html')
Ответы (1 шт):
Автор решения: Дима Абдукаримов
→ Ссылка
@dp.message_handler(content_types=['new_chat_members'])
def capcha_handler(message):
db = sqlite3.connect("server.db")
cur = db.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS new_members(ID TEXT)")
db.commit()
cur.execute("INSERT INTO new_members VALUES (?)", (message.new_chat_members[0].id,))
db.commit()
dp.restrict_chat_member(message.chat.id, message.new_chat_members[0].id, can_send_messages=False)
markup = types.InlineKeyboardMarkup()
button1 = types.InlineKeyboardButton(text="Кикнуть", callback_data='not_yes')
button2 = types.InlineKeyboardButton(text="Принять", callback_data='yes')
if message.new_chat_members[0].id == {айди твоего бота}:
pass
else:
dp.send_message(message.chat.id, f"Уважаемый {message.new_chat_members[0].full_name}, Вы вступили в беседу '{safe_text}', \
вам выдан мут, в целях защиты беседы. Подождите, пожалуйста, пока прибудет администратор...\n⏰ | Срок наказания: Навсегда\n⭐\
Немного информации об участнике:\n? Никнейм: ' + str(message.new_chat_members[0].full_name) + '\n⏰ Дата входа: '\
+ str(message.date) + '\nПриятно провести время!", reply_markup=markup)
@dp.callback_query_handler(func=lambda call: True)
def callback_query(call):
db = sqlite3.connect("server.db")
cur = db.cursor()
db.commit()
ids = ""
for uid in cur.execute("SELECT ID FROM new_members"):
ids += f"{uid[0]}"
admins = dp.get_chat_administrators(call.message.chat.id)
if call.data == 'yes':
if call.from_user.id in admins:
cur.execute(f"DELETE FROM new_members WHERE ID = {ids}")
db.commit()
dp.edit_message_text("Добро пожаловать!", call.message.chat.id, call.message.message_id)
dp.restrict_chat_member(call.message.chat.id, int(ids),
can_send_messages=True,
can_send_media_messages=True,
can_add_web_page_previews=True,
can_send_polls=True,
can_send_other_messages=True,
can_invite_users=True)
elif call.data == 'not_yes':
if call.from_user.id in admins:
cur.execute(f"DELETE FROM new_members WHERE ID = {ids}")
db.commit()
dp.kick_chat_member(call.message.chat.id, int(ids))