使用Python根据用户ID发送不和消息



我制作了一个根据用户id发送消息的不和聊天机器人。
问题是我不能运行这个程序。代码是:

import discord
from discord.ext import commands
import json

bot = commands.Bot(command_prefix='?')

@bot.event
async def on_ready():
print(' [!] messaging..n')

with open("ids.json", "r") as file:
data = json.load(file)

indx = 0
for i in data:
indx += 1
member = await bot.fetch_user(i)
try:
await member.send("message to send")
print(f" [+] Sent message {indx} / {len(data)}")
except Exception as e:
print(f" [!] {e}")

print(" [+] Done")

bot.run("bot token", bot = False)

我得到的错误是:

Ignoring exception in on_ready
Traceback (most recent call last):
File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "main.py", line 17, in on_ready
member = await bot.fetch_user(i)
File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/client.py", line 1384, in fetch_user
data = await self.http.get_user(user_id)
File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/http.py", line 250, in request
raise NotFound(r, data)
discord.errors.NotFound: 404 Not Found (error code: 10013): Unknown User

404错误表示未找到。

所以在不和谐的错误404意味着用户没有找到。

检查你的用户id,然后再试一次

id必须为整型

with open("ids.json", "r") as file:
data = json.load(file)

indx = 0
for i in data:
indx += 1
member = await bot.fetch_user(i)
# and so on...

这里的问题是JSON键(假设数据是一个对象,如果它是一个数组,那么只是通过删除引号使项目int)不能是字符串以外的任何东西,但fetch_user期望一个int。另一件事是fetch_user做一个API调用来获取用户,您应该使用get_user来代替,以避免垃圾邮件API。另一件事是你应该使用enumerate而不是创建一个变量然后在每次迭代中增加该变量

所以重新格式化的代码是

with open("ids.json", "r") as file:
data = json.load(file)

for indx, i in enumerate(data, start=1):
indx += 1
member = bot.get_user(int((i))
# and so on...

最新更新