Telegram Bot,数据问题

Telegram Bot, problems with data

提问人:QWERTYZ PB 提问时间:11/15/2023 更新时间:11/15/2023 访问量:50

问:

我有一个电报频道。通过机器人,我用四个内联按钮(1、2、3、4)和按钮的一定解释文本发布帖子,当我点击不同帖子中的按钮时,我得到所有帖子的相同回调:

  • 1 柱 - (按 1 - Aaaa,按 2 - Bbb ...等)这里通过国家做了 1.啊,2。呸��

  • 2 柱 - (按 1 - Aaaa,按 2 - Bbb ...等)这里通过国家做了 1.哎呀,2。呜......

如何使callback.answer向每个帖子输出自己的文本?例如:

  • 1 个帖子(点击四个按钮之一 - 结果是“是的,没错,是果戈理”)
  • 2 个帖子(单击四个按钮之一 - 结果是“是的,干得好,是 Bunin”)

在机器人的帮助下,计划发布大量帖子。所以。。也许sqlite3..?但是如何? (蟒蛇,aiogram3) 我试图制作一个sqlite3数据库,但我从来没有弄清楚。

python aiogram

评论

0赞 ewokx 11/15/2023
欢迎来到 Stack Overflow。请附上您的代码。不幸的是,我不太明白你在做什么;但也许有人可能会。

答:

0赞 Motov Yurii 11/15/2023 #1

您可以在callback_data中对帖子 ID 和按钮 ID 进行编码:

定义类:

class PostButtonCallbackData(CallbackData, prefix="post_btn_"):
    post_id: int
    btn_id: int

若要创建按钮,请使用如下代码:

post_id = 112233 # Generate and store this unique post ID

kb_btns = []
for i in range(1, 5):
    cb_data = PostButtonCallbackData(post_id=post_id, btn_id=i).pack()
    kb_btns.append(
        [InlineKeyboardButton(text=str(i), callback_data=cb_data)]
    )

reply_markup=InlineKeyboardMarkup(inline_keyboard=kb_btns)

# use this reply_markup when you send post

要处理回调,请使用过滤器:

@router.callback_query(PostButtonCallbackData.filter())
async def cb_post_btn_clicked(callback: CallbackQuery, callback_data: PostButtonCallbackData):
    post_id = callback_data.post_id
    btn_id = callback_data.btn_id
    # Do whatever you need
    pass

我没有运行此代码,它可能包含错误,但我希望这能帮助您找到方向。

评论

0赞 QWERTYZ PB 11/16/2023
这解决了问题,但是如果程序中断(ctrl + c),则不会保存数据(但无论如何都要感谢
0赞 Motov Yurii 11/16/2023
当然,您应该使用 datbase 来存储有关帖子的信息。使用sqlite非常简单。您可以在此处找到文档:docs.python.org/3/library/sqlite3.html#sqlite3-tutorial
0赞 QWERTYZ PB 11/16/2023
谢谢,我会努力的