Тема: Бот в Телеграмі(Python)
Всім привіт. Пишу бота в телеграмі на Python. Суть бота полягає в тому, щоб бот відповідав на питання користувача в групі (коли користувач тегнув бота), а бот відповість і відмітить якогось рандомного користувача з цієї групи. На приклад:
- @бот, хто сьогодні миє посуд?
- Я думаю, що це @якийсь_користувач
Накидав код, але він не працює, спитав в чата gpt, а він ще гірше зробив Якщо хтось шарить, допоможіть, будь ласка. Буду дуже вдячний.
from typing import Final
from telegram import Update
import random
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
TOKEN: Final = 'токен бота'
BOT_USERNAME: Final = '@назва бота '
def mention_random_user(update: Update, context: CallbackContext):
chat_id = update.message.chat_id
chat_members = context.bot.get_chat_members_count(chat_id)
random_index = random.randint(0, chat_members - 1)
random_member = context.bot.get_chat_member(chat_id, random_index)
random_member_mention = random_member.user.mention_text()
update.message.reply_text(f"Вибраний рандомний користувач: {random_member_mention}")
#Commands
async def start_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("Привіт! Дякую, що обрали цей бот для Вашої групи ???? Щоб почати розважатись просто додайте цей бот до групи та надайте йому права адміністратора ????")
async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("Усе простіше простого ???? Просто на початку свого повідомлення відміть цього ботіка й напиши своє питання. Після цього ботік дасть відповідь відмітивши когось з учасників групи ????")
# Responses
def handle_response(text: str) -> str:
processed: str = text.lower()
if 'хто' in processed:
return update.message.reply_text(f"Я думаю, що це: {random_member_mention}")
if 'хто з ким' in processed:
return 'Я думаю, що це '+ +' і '
if 'чи' in processed:
return 'Я думаю, що '
return 'Я не зрозумів, що Ви хочете від мене ????'
async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
message_type: str = update.message.chat.type
text: str = update.message.text
print(f'User ({update.message.chat.id}) in {message_type}: "{text}"')
if message_type == 'group' :
if BOT_USERNAME in text:
new_text: str = text.replace(BOT_USERNAME, '').strip()
response: str = handle_response(new_text)
else:
return
else:
response: str = handle_response(text)
print('Bot:', response )
await update.message.reply_text(response)
async def error(update: Update, context: ContextTypes.DEFAULT_TYPE):
print(f'Update {update} caused error {context.error}')
if __name__ == '__main__':
app = Application.builder().token(TOKEN).build()
app.add_handler(CommandHandler('start', start_command))
app.add_handler(CommandHandler('help', help_command))
app.add_handler(MessageHandler(filters.TEXT, handle_message))
app.add_error_handler(error)
app.run_polling(poll_interval=5)
def main():
updater = Updater(TOKEN, use_context=True)
dp = updater.dispatcher
dp.add_handler(CommandHandler("mention_random", mention_random_user))
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()