0
filter_  = (filters.me & ~filters.forwarded & ~filters.incoming & filters.via_bot & filters.command(".", ["ascii"]))

async def hello(client, message):
     await message.reply("HELLLO WORLD")

app.add_handler(hello, filter_  )
app.start()

idle()
app.stop()

它总是进入一个循环,仅此而已。它不起作用,客户没有回复。它有什么问题?还是我做错了什么?

4

1 回答 1

0

您需要添加一个MessageHandler().

from pyrogram.handlers import MessageHandler

...

app.add_handler(MessageHandler(hello, filter_))

请参阅文档中的更新处理程序以获取参考。


虽然这与您最初的问题无关,但我相信装饰器是一个更好的选择,因为它们不需要额外的导入或实例化:

from pyrogram import Client
app = Client()

@app.on_message(filter_)
def hello(client, message):
    await message.reply("hello")

app.run()  # This app.run() call also skips app.start(), idle() and app.stop()

编辑以回复下面的“答案”
对于您正在测试的内容,您使用的过滤器过于复杂。

filter_ = (
    filters.me  # Messages that you sent
    & ~filters.forwarded  # Not messages that were forwarded
    & filters.incoming  # Messages this session received
    & ~filters.via_bot  # No "via @samplebot" (ie no inline bots)
    & filters.command(".", ["dict", "define", "meaning"]  # The crux of your issue.
)

命令过滤器采用三个参数。commands, prefixes, 和case_sensitive. 由于您没有使用命名参数 ( arg=value),因此您需要保持它们的顺序。
只有第一个参数是必需的,并且需要是单个字符串或字符串列表(用于多个命令)。如果不指定,prefixes将默认为"/"和命令一样需要/this触发。由于您有其他顺序的参数,因此您弄乱了命令过滤器。

您需要切换命令过滤器的参数(请参阅文档),或者更好的是,从创建问题时要求的最小示例开始。

于 2021-05-18T14:55:49.233 回答