我想自动回复我之前没有交谈过的新私有消息.但是我的代码给出了一个错误,我想不出解决方案是什么.

这是我try 过的:

from telethon import TelegramClient, events
from telethon import functions, types
from time import sleep

api_id = 123456
api_hash = 'enterownapihash'


msg = 'Sorry, I am unavailable right now.'

client = TelegramClient('automessage', api_id, api_hash, sequential_updates=True)
@client.on(events.NewMessage(incoming=True, blacklist_chats=True))

async def setup():
    users = set()
    async for dialog in client.iter_dialogs():
        if dialog.is_user:
            users.add(dialog.id)

async def handler(event):
    if event.is_private and event.sender_id not in users:
        await event.respond(msg)

以下是我收到的错误:

Unhandled exception on setup
Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Programs\Python\Python310\lib\site-packages\telethon\client\updates.py", line 520, in _dispatch_update
    await callback(event)
TypeError: setup() takes 0 positional arguments but 1 was given

现在try 一下:

from telethon import TelegramClient, events
from telethon import functions, types
from time import sleep

api_id = 123456
api_hash = 'enterownapihash'


msg = 'Sorry, I am unavailable right now.'

client = TelegramClient('automessage', api_id, api_hash, sequential_updates=True)

async def setup():
    global users
    users = set()
    async for dialog in client.iter_dialogs():
        if dialog.is_user and not dialog.entity.bot:
            users.add(dialog.id)

@client.on(events.NewMessage(incoming=True))
async def handler(event):
    if event.is_private and event.sender_id not in users:
        await event.respond(msg)

client.start()
client.run_until_disconnected()

每当我的帐户收到一条消息时,我都会收到以下错误:

Unhandled exception on handler
Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Programs\Python\Python310\lib\site-packages\telethon\client\updates.py", line 520, in _dispatch_update
    await callback(event)
  File "C:\Users\user\Desktop\Scripts\CODING\telethon\AutoRespond.py", line 27, in handler
    if event.is_private and event.sender_id not in users:
NameError: name 'users' is not defined

解决这一问题的办法是什么?提前谢谢!

推荐答案

编辑:

您不是在调用setUp(),您必须在锁定客户端之前在文件的页脚处相应地运行它,直到断开连接以侦听事件,如下所示:

client.start()
client.loop.run_until_complete(setup())
client.run_until_disconnected()

用户似乎不在全局范围内,至于错误,修饰器位于错误的函数之上.

async def setup():
    global users
    users = set()
    async for dialog in client.iter_dialogs():
        if dialog.is_user and not dialog.entity.bot:
            users.add(dialog.id)

@client.on(events.NewMessage(incoming=True))
async def handler(event):
    if event.is_private and event.sender_id not in users:
        await event.respond(msg)

如果没有提供"chat",那么"Blacklist_Chats"也是没有意义的.

Python相关问答推荐

在两极中实施频率编码

sys.modulesgo 哪儿了?

模型序列化器中未调用现场验证器

Python无法在已导入的目录中看到新模块

Python中是否有方法从公共域检索搜索结果

Python中使用时区感知日期时间对象进行时间算术的Incredit

Pythind 11无法弄清楚如何访问tuple元素

有症状地 destruct 了Python中的regex?

通过Selenium从页面获取所有H2元素

用合并列替换现有列并重命名

OR—Tools中CP—SAT求解器的IntVar设置值

在pandas中使用group_by,但有条件

Python导入某些库时非法指令(核心转储)(beautifulsoup4."" yfinance)

SQLAlchemy bindparam在mssql上失败(但在mysql上工作)

Python Pandas—时间序列—时间戳缺失时间精确在00:00

搜索按钮不工作,Python tkinter

OpenGL仅渲染第二个三角形,第一个三角形不可见

在numpy数组中寻找楼梯状 struct

从一个df列提取单词,分配给另一个列

numpy数组和数组标量之间的不同行为