【问题标题】:Aiogram -- set state for a exact userAiogram -- 为特定用户设置状态
【发布时间】:2022-03-14 22:43:12
【问题描述】:

我正在用 python 和 aiogram 编写一个机器人。关键是管理员接受(或拒绝)用户请求。因此,当管理员在他的聊天中单击按钮时,我需要更改用户的状态(他的 uid 是已知的)。我在任何地方都找不到怎么做。

我正在寻找类似的东西

dp.set_state(uid, User.accepted))

谢谢!

【问题讨论】:

  • 嗨。请删除 python-telegram-bot 标记,因为那是针对不同的库的;)

标签: python python-3.x telegram telegram-bot


【解决方案1】:

我遇到了同样的问题

在基类State中找到方法set():

class State:
    ...
    async def set(self):
        state = Dispatcher.get_current().current_state()
        await state.set_state(self.state)

所以我从 State 创建了新类并以这种方式覆盖了方法:

    async def set(self, user=None):
        """Option to set state for concrete user"""
        state = Dispatcher.get_current().current_state(user=user)
        await state.set_state(self.state)

用法:

@dp.message_handler(state='*')
async def example_handler(message: Message):
    await SomeStateGroup.SomeState.set(user=message.from_user.id)

如果您想要一些邮件,请收集用户 ID 并使用该提示。

【讨论】:

    【解决方案2】:
    from aiogram.dispatcher import FSMContext
    
    @dp.message_handler(state='*')
    async def example_handler(message: types.Message, state: FSMContext):
        new_state = FSMContext(storage, chat_id, user_id)
    

    然后set_state()set_data()new_state 上。

    storage 是 FSM 存储。

    【讨论】:

      猜你喜欢
      • 2019-01-13
      • 1970-01-01
      • 2020-04-21
      • 2018-12-09
      • 2020-11-23
      • 2021-07-06
      • 2020-09-01
      • 1970-01-01
      • 2021-10-01
      相关资源
      最近更新 更多