Ответы пользователя по тегу Telegram
  • Как проверить, подписан ли пользователь на определённый канал?

    MinTnt
    @MinTnt
    https://core.telegram.org/bots/api#getchatmember

    Вот функция для указного действия.
    getchatmember(chat_id, user_id)
    chat_id = id нужного канала/чата
    user_id = id пользователя

    Если пользователь есть в чате, то оно вернёт информацию по нему, если нету, то вроде выдаст исключение, или же просто не сможет получить данных.

    Так как краш программы (из-за исключения) нам не нужно, то весь нужный код вместе с getchatmember делаем вот так:
    try:
        #getchatmember и тд. код
    except Exception:
        bot.sendmessage #Тутя записать сообщение, об ошибке, т.е. прописать код, для случая ,если пользователь не подписан
    Ответ написан
    2 комментария
  • Как реализовать систему вопросов в телеграм боте?

    MinTnt
    @MinTnt
    1). Вообще, добавление к message.chat.id + 1, ничего бы не дало, кроме того, что сообщение бы отправилось вообще незнакомому лицу. message.chat.id, это то куда отправляется сообщение

    2). Предложу другую реализацию для комманд в коде.
    Код
    skill = 0 #Просто добавил счётчик "скилла" правильных и неправильных ответов
    
    @bot.message_handler(content_types=["text"])
    def type_game(message):
        if message.text == "Мои данные":
            bot.send_message(message.chat.id,"Баланс: " + "/n" +
                             "Игр сыграно: " + "/n" +
                             "Правильных ответов: ")
        if message.text == "Бесплатная игра":
            bot.send_message(message.chat.id, "Чтобы начать введите /free_game")
    
        if message.text == "Платная игра":
            bot.send_message(message.chat.id,"Баланс: "  "/n" 
                             "Игр сыграно: " + "/n" +
                             "Правильных ответов: ")
        if message.text == '/free_game': #Другой варянт создания комманд
        	bot.send_message(message.chat.id, SQLighter.answer)
        	bot.register_next_step_handler(message, free_game)#Перенаправил на функцию free_game
    
    def free_game(message):
        if message.text == SQLighter.answer:
            bot.send_message(message.chat.id, "Good")
            skill = skill + 1
            bot.send_message(message.chat.id, SQLighter.answer)
            bot.register_next_step_handler(message, free_game)#Создаёт некий цикл, после ответа, оно занова запускает эту функцию, а так же пишет вопрос из базы данных
        elif message.text == 'Прекратить игру':
        	bot.send_message(message.chat.id, 'Игра приостановлена.')#Так как тут нету register next step и тд., то оно автоматически переадресовывает на type_game
    
        else:
        	skill = skill - 1
            bot.send_message(message.chat.id, "Bad")
            bot.send_message(message.chat.id, SQLighter.answer)
            bot.register_next_step_handler(message, free_game)


    А вообще, мне вот интересно, это хорошо что в коде, DQLighter.answer используется как для вопроса, так и для ответа? Или это пока так.. лишь для проверки системы?
    Ответ написан