如果我使用类似的东西过滤命令filters.command(["my_command"]
,当我执行命令时,机器人会在组中得到通知/my_command
,但如果我将其发送给机器人(例如/my_command@MyBot
),它将不会得到通知。
如何修改过滤器以在两种情况下都得到通知(独立于机器人名称)?
谢谢
您需要将每个选项传递给filter.commands
,包括带有机器人名称的变体。
如果您正在寻找更动态的解决方案,您可以使用类似
commands = [ 'hello', 'world' ]
myBot = 'myBotName'
for i in range(len(commands)):
commands.append(commands[i] + "@" + myBot)
print(commands)
// ['hello', 'world', 'hello@myBotName', 'world@myBotName']
这将遍历命令列表,以及附加了机器人名称的相同命令。
对于更多的复制/粘贴逻辑,您可以从pyrogram
自身检索机器人名称。
如果我们看一下 Pyrogram 的User
类;我们将看到以下数据:
- username (str, optional) -- 用户或机器人的用户名。
在上面的示例中,这似乎非常适合自动化myBot
变量。
使用正则表达式
with app:
bot_username = app.get_me().username
@app.on_message( filters.regex(f'^/my_command($|@{bot_username}$)') )
def handler( client, message ):
pass