Как решить проблему RuntimeWarning: coroutine 'button_YesorNo' was never awaited?
Столкнулся с проблемой "RuntimeWarning: coroutine 'button_YesorNo' was never awaited" в asyncio.
Мне нужно было, чтобы кнопки "да" и "нет" появлялись только у одного пользователя, порылся в интернете в поисках готового куска кода, но он выдаёт ошибку. В итоге попытался написать сам.
import random
import telebot
import webbrowser
import sqlite3
import time
from telebot import types
import asyncio
db = sqlite3.connect("D:\server.db", check_same_thread=False)
sql = db.cursor()
bot = telebot.TeleBot("...")
@bot.message_handler(commands=["start"])
def start_message(message):
mess = f"{message.from_user.first_name} {message.from_user.last_name}"
if "None" in mess:
mess = mess.replace("None", "")
mess = mess.replace(" ", "")
#chat_title = f"{message.chat.title()}"
#print(chat_title)
sql.execute("""CREATE TABLE IF NOT EXISTS users (
id BIGINT,
progress INT
)""")
db.commit()
Id = int(f"{message.from_user.id}")
check = 0
for ws in sql.execute(f"SELECT Id FROM users WHERE Id == {Id}"):
pe = str(ws)
pe = pe.replace("(", "")
pe = pe.replace(")", "")
pe = pe.replace(",", "")
check = int(pe)
if check == Id:
obj = time.localtime()
t = time.asctime(obj)
print(f"{t} Id: {Id} - регистрация")
if check == 0:
sql.execute(f"INSERT INTO users (Id, progress) VALUES ('{Id}', '0')")
db.commit()
bot.send_message(message.chat.id, "Вы можете ввести /help, чтобы узнать о возможностях бота.")
@bot.message_handler(commands=["сброс"])
async def button_YesorNo(message: types.Message):
Id = f"{message.from_user.id}"
mess = f"{message.from_user.first_name} {message.from_user.last_name}"
if "None" in mess:
mess = mess.replace("None", "")
mess = mess.replace(" ", "")
markup=types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=1, selective=True)
buttons = ['///да', '///нет']
markup.add(*buttons)
await message.reply(f"{mess}, ты точно уверен, что хочешь обнулить свой прогресс? Нажми на кнопку с ответом.", reply_markup=markup)
@bot.message_handler(content_types='text')
def message_reply(message):
Id = f"{message.from_user.id}"
mess = f"{message.from_user.first_name} {message.from_user.last_name}"
if "None" in mess:
mess = mess.replace("None", "")
mess = mess.replace(" ", "")
if message.text=="///да":
dell = telebot.types.ReplyKeyboardRemove()
bot.send_message(message.chat.id, f"{mess}, твой прогресс обнулён!", reply_markup=dell)
sql.execute(f"UPDATE users SET progress = 0 WHERE Id == {Id}")
db.commit()
if message.text=="///нет":
de = telebot.types.ReplyKeyboardRemove()
bot.polling(none_stop=True)
db.close()
С asyncio вообще не знаком, в интернете искал, слишком заумно написано, главную суть уловить так и не удалось, перевод документации в лучших традициях гугл корявый.
Если кто знает как решить данную проблему, распишите пожалуйста для меня чайника саму суть проблемы и как Вы дошли до решения.
Ответы (1 шт):
Проблема в этой строке
await message.reply(f"{mess}, ты точно уверен, что хочешь обнулить свой прогресс? Нажми на кнопку с ответом.", reply_markup=markup)
У телебота такого нет message.reply только через обьект бота.
Но что важнее он не асинхронный, так что и await ему не нужен
bot.reply_to(message, "text")