винда 11
aiogram 2x
python 3.12
Ниже приведу код тг бота, смысл в том, что под функцией есть еще одна, которая принимает любую строку, при попытке написать еще одну функцию из-за асинхронности аиограма выполнятся начинает та, что принимает любую строку, заранее спасибо за помощь
aiogram 2x
python 3.12
Ниже приведу код тг бота, смысл в том, что под функцией есть еще одна, которая принимает любую строку, при попытке написать еще одну функцию из-за асинхронности аиограма выполнятся начинает та, что принимает любую строку, заранее спасибо за помощь
Python:
import asyncio
import logging
import sqlite3
import telebot
from aiogram import Bot, Dispatcher, types
from aiogram.filters.command import Command
from random import randint
# Включаем логирование, чтобы не пропустить важные сообщения
logging.basicConfig(level=logging.INFO)
# Объект бота
bot = Bot(token="...")
# Диспетчер
dp = Dispatcher()
@dp.message(Command("start"))
async def start(message: types.Message):
await message.answer(f'Привет, {message.from_user.first_name}, это книжный бот KitBook и я помогу тебе подобрать книгу по вкусу!')
@dp.message(Command("help"))
async def help(message: types.Message):
await message.answer('Кoманда /start поможет тебе начать работу с ботом\nКоманда /book предложит тебе случайную книгу\nКоманда /genres покажет список доступных жанров\nКоманда /help вернет к списку команд')
with sqlite3.connect("C:/Users/14 Pro/Desktop/kitbook/BookDateBase.db") as con:
cur = con.cursor()
# Хэндлер на команду /genres
@dp.message(Command("genres"))
async def cmd_start(message: types.Message):
cur.execute("select distinct genre from book")
genres = [genre[0] for genre in cur.fetchall()]
kb = [
[types.KeyboardButton(text=genre)] for genre in genres
]
keyboard = types.ReplyKeyboardMarkup(
keyboard=kb,
input_field_placeholder="Выберите жанр:"
)
await message.answer("Выберите жанр:", reply_markup=keyboard)
@dp.message()
async def test(message:types.Message):
bot.answer_callback_query(callback_query_id=call.id)
cur.execute("select distinct genre from book")
genres = [genre[0] for genre in cur.fetchall()]
if message.text in genres:
cur.execute(f"select name from book where genre = '{message.text}'")
books = [book[0] for book in cur.fetchall()]
kb = [[types.KeyboardButton(text=f"Случайная книга: {message.text}")]]
kb += [
[types.KeyboardButton(text=book)] for book in books
]
keyboard = types.ReplyKeyboardMarkup(
keyboard=kb,
resize_keyboard=True,
input_field_placeholder="Выберите книгу:"
)
await message.answer_photo("Выберите книгу:", reply_markup=keyboard)
cur.execute(f"select name from book")
books = [book[0] for book in cur.fetchall()]
if message.text in books:
cur.execute(f"select * from book where name = '{message.text}'")
book = cur.fetchone()
await message.answer_photo(book[5])
await message.answer(f"Название: {book[0]}\n\nАвтор: {book[1]}\n\nЖанр: {book[2]}\n\nАннотация: {book[3]}")
if message.text.index("Случайная книга:") != -1:
genre = message.text
genre = genre[genre.index(": ")+2:]
cur.execute(f"select name from book where genre = '{genre}'")
books = [book[0] for book in cur.fetchall()]
cur.execute(f"select * from book where name = '{books[randint(0, len(books))]}'")
book = cur.fetchone()
await message.answer_photo(book[5])
await message.answer(f"Название: {book[0]}\n\nАвтор: {book[1]}\n\nЖанр: {book[2]}\n\nАннотация: {book[3]}")
# Запуск процесса поллинга новых апдейтов
async def main():
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())
Последнее редактирование: