Aiogram CallbackData 参数太多,我在哪里尝试设置回调查询处理程序并为回调设置过滤器我得到错误

问题描述 投票:0回答:0

那里!

在官方文档 aiogram 中写下关于 CallbackData builder 的内容 但这不起作用

当我传递给内联键盘按钮回调数据时,我得到错误 通过了太多论点! 当我尝试使用过滤器设置回调查询处理程序时,我得到 errorValueError: Invalid field name 'action'

`


`from aiogram import Bot, Dispatcher, executor, types
from aiogram.utils.callback_data import CallbackData
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import State, StatesGroup
import config

bot = Bot(token=config.TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot=bot, storage=storage)


class Form(StatesGroup):
    recipient_id = State()
    message = State()


cb_data = CallbackData('action', 'sender_id')


@dp.message_handler(commands=['start'])
async def start_cmd(message: types.Message, state: FSMContext):
    if message.get_args():
        if message.chat.id == int(message.get_args()):
            return await message.reply(
                text=f"Упс... не думаю, що писати самому собі гарна ідея. \nРозмісти це посилання у себе в Instagram або Telegram нехай тобі пишуть інші. \n\nОсь твоє посилання: \nhttps://t.me/incognito_valentinka_bot/?start={message.chat.id}")
        else:
            await Form.message.set()
            async with state.proxy() as data:
                data['recipient_id'] = message.get_args()

            return await message.answer(
                text="Напиши повідомлення для людини яка розмістила це посилання. \nНапиши все, що думаєшь. \n\n 👀 Ти можешь відправити текст, фото, відео або голосове повідомлення.")

    await message.answer(
        text=f"Привіт! Щоб почати отримувати валентинки розмісти посилання у себе в профілі інстаграм \n\n Ось твоє посилання: 👇 \nhttps://t.me/incognito_valentinka_bot/?start={message.chat.id}")


@dp.callback_query_handler(cb_data.filter(action='reply'))
async def message_reply(query: types.CallbackQuery, callback_data: dict, state: FSMContext):
    print("hello")
    await Form.message.set()
    async with state.proxy() as data:
        data['recipient_id'] = callback_data['sender_id']

    await query.answer(text="Напиши відповідь")


@dp.message_handler(state=Form.message)
async def get_message(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        data['message'] = message.text

        await bot.send_message(
            chat_id=data['recipient_id'],
            text="<b>Нове повідомлення</b>",
            parse_mode=types.ParseMode.HTML
        )
        # cb = MyCallback(action="reply", sender_id=message.chat.id)
        # cb =callback_msg.new(action="reply", sender_id=message.chat.id)
        inline_keyboard = types.InlineKeyboardMarkup()
        inline_keyboard.row(
            types.InlineKeyboardButton(
                text="Відповісти",
                callback_data=cb_data.new(action='reply', sender_id=message.chat.id)
            )
        )
        await bot.send_message(
            chat_id=data['recipient_id'],
            text=data['message'],
            reply_markup=inline_keyboard
        )

    await message.answer(
        text='<b>Повідомлення доставлено.</b>',
        parse_mode=types.ParseMode.HTML
    )


async def set_my_commands():
    commands = [
        types.BotCommand(command='/start', description='Отримай своє посилання!')
    ]
    await bot.set_my_commands(commands=commands)


async def on_startup(dp):
    print('Starting...')
    await set_my_commands()
    print('Running...')


async def on_shutdown(dp):
    print('Shutting down...')
    print('Stopped!')


if __name__ == '__main__':
    executor.start_polling(
        dispatcher=dp,
        skip_updates=True,
        on_startup=on_startup,
        on_shutdown=on_shutdown,
    )`

我尝试更改 aiogram 版本 我在使用 3.8 升级到 3.9 之前安装了最新的 python 版本,它没有解决我的问题 我尝试更改参数名称,但这不起作用

python-3.x bots telegram aiogram
© www.soinside.com 2019 - 2024. All rights reserved.