Как добавить следующую функцию в aiogram?

whatismean

Новичок
Пользователь
Фев 20, 2024
3
0
1
винда 11
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())
 
Последнее редактирование:

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
374
108
43
Расположи функцию, что принимает любую строку, в конце
 
  • Мне нравится
Реакции: PYDEV

Форум IT Специалистов