Телеграмм бот не отправляет сообщения
Недавно начал изучать ботов в телеграмм и возникли кое-какие трудности
Вот мой код:
import telebot
myBot = telebot.TeleBot(key)
@myBot.message_handler(commands=["start","stopgame"])
def get_command(mes):
global d
if mes.text == "/start":
myBot.send_message(mes.chat.id, "Стартуем")
list_1 = [" + ", " - ", " / ", " * "]
list_2 = [randint(1, 30) for i in range(randint(1, 20))]
a = (str(choice(list_2))) ; b = choice(list_1) ; c = (str(choice(list_2)))
d = eval(a + b + c)
myBot.send_message(mes.chat.id, (a+b+c+" = ?"))
elif mes.text == "/stopgame":
myBot.send_message(mes.chat.id, "Stope")
@myBot.message_handler(content_types=("text"))
def mes_handl (mes):
if mes == int(d):
myBot.send_message(mes.chat.id,"Верно")
myBot.polling()
этот бот должен выводить "Верно " при правильном вводе от пользователя, но такого не происходит.
Бот генерирует случайный легкий пример и пользователь должен ввести ответ.
Ответы (2 шт):
ответ пользователя содержится в mes.text, а не в mes.
и mes.text является строкой поэтому приводите ответ пользователя к int:
@myBot.message_handler(content_types=("text"))
def mes_handl (mes):
if int(mes.text) == int(d):
и нужно исправить подобные вопросы:
- 1 / 1 = ? (1.0 <class 'float'>)
- 5 / 29 = ? (0.1724137931034483 <class 'float'>)
пользователь явно не сможет ответить)
Ответ на комментарий к ответу:
появился след вопрос, как реализовать нормальный старт т.е когда пользователь нажимает старт он запускает игру , она будет подсчитывать кол-во правильных и неправильных голосов , и когда пользователь нажмет на /stop игра закончится и выведет результаты?
CREATE TABLE "score" ("id_tlgrm" INTEGER, "answer" TEXT)
import sqlite3
db = 'score.db'
@bot.message_handler(commands=['start'])
def start(message):
list_1 = [' + ', ' - ', ' / ', ' * ']
list_2 = [randint(1, 30) for i in range(randint(1, 20))]
a = (str(choice(list_2)))
b = choice(list_1)
c = (str(choice(list_2)))
d = eval(a + b + c)
print('d', d, type(d))
msg = bot.send_message(message.chat.id, '{}'.format(a + b + c + ' = ?'))
bot.register_next_step_handler(msg, start_2, d)
def start_2(message, d):
if message.text.isdigit():
if int(message.text) == int(d):
bot.send_message(message.chat.id, 'Верно')
save_score(message.chat.id, 'Правильно')
start(message)
else:
bot.send_message(message.chat.id, 'А вот и нет')
save_score(message.chat.id, 'Неправильно')
start(message)
elif message.text == '/stop':
all_answer, right, wrong = read_score(message.chat.id)
bot.send_message(message.chat.id,
'Всего ответов - {}\nПравильных - {}\nНеправильных - {}'.format(all_answer, right, wrong))
else:
bot.send_message(message.chat.id, 'а?')
def save_score(id_tlgrm, answer):
conn = sqlite3.connect(db)
cursor = conn.cursor()
data = [(id_tlgrm, answer)]
cursor.executemany('INSERT INTO score VALUES (?, ?)', data)
conn.commit()
def read_score(id_tlgrm):
conn = sqlite3.connect(db)
all_answer = conn.execute('SELECT COUNT(*) FROM score WHERE id_tlgrm = ?', (id_tlgrm,)).fetchone()
right = conn.execute('SELECT COUNT(answer) FROM score WHERE id_tlgrm = ? AND answer = ?',
(id_tlgrm, 'Правильно')).fetchone()
wrong = conn.execute('SELECT COUNT(answer) FROM score WHERE id_tlgrm = ? AND answer = ?',
(id_tlgrm, 'Неправильно')).fetchone()
if all_answer is None:
conn.close()
return None
else:
conn.close()
return all_answer[0], right[0], wrong[0]
не заморачивался с оптимизацией