python-3.x Aiogram CallbackData Too Many arguments和Where i try set callback query handler and set filter for callback i get error

jexiocij  于 2023-08-08  发布在  Python
关注(0)|答案(1)|浏览(102)

那里!
在办公文档中,我写的是CallbackData构建器,但这不起作用
当我传递到内联键盘按钮回调数据时,我得到错误:传递了太多的参数!当我尝试使用过滤器设置回调查询处理程序时,我得到errorValueError:无效的字段名称“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,
    )`

字符串
我尝试改变aigram版本我安装了最新的Python版本之前我使用3.8升级到3.9它没有解决我的问题我尝试改变参数的名称但这是不工作

biswetbf

biswetbf1#

inline_keyboard.row(
            types.InlineKeyboardButton(
                text="Відповісти",
                callback_data=cb_data.new(action='reply', sender_id=message.chat.id)
            )
        )

字符串
Try .pack()cb_data.new(action='reply', sender_id=message.chat.id).pack()

相关问题