python - 找不到不和谐服务器邀请的邀请人 ID
问题描述
我试图找到邀请某人到不和谐服务器的人的用户 ID .. 我收到错误
Ignoring exception in on_member_join 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 164, in on_member_join inviter = member.guild.get_member(inv_user.id) AttributeError: 'NoneType' object has no attribute 'id'
我的代码是
@bot.event
async def on_member_join(member):
global count_df
global inviters_df
global leavers_df
inv_user = await tracker.fetch_inviter(member)
inviter = member.guild.get_member(inv_user.id)
#Update invite counts
try: #Check to see if the user had an invite count saved already
count_df.loc[inviter.id]
except KeyError: #If not, make a new entry for the member
new_entry = pd.DataFrame([[1,0,0]], index=[inviter.id], columns=count_df.columns)
count_df = count_df.append(new_entry)
else: #If yes, then add to it
count_df.loc[inviter.id,"Real"] += 1
#Update inviter/leaver record
inviters_df = inviters_df.append(pd.DataFrame([[inviter.id]], index=[member.id], columns=inviters_df.columns))
inviters_df.to_csv('csv/member_invite_record.csv', index_label='Member')
try:
entries =leavers_df.loc[member.id]
except KeyError:
return #Member has not left the guild before, no need to update anything
else:
for entry in pd.DataFrame([entries]).itertuples():
if entry.Inviter == inviter.id:
count_df.loc[inviter.id,"Left"] -= 1
count_df.to_csv('csv/invite_count.csv', index_label='User_ID')
leavers_df.drop(labels=member.id, inplace=True)
leavers_df.to_csv('csv/member_leaver_record.csv', index_label='Leaver')
await give_roles(inviter)
channel = bot.get_channel(821556573386047518)
await channel.send(f'{inviter.mention} invited {member.mention} to the server!')
基本上我让用户 id 进入 csv 文件以跟踪邀请者以及他们有多少邀请。错误发生在inviter = member.guild.get_member(inv_user.id)
我该如何解决这个问题?
解决方案
您的代码似乎正确。但是,您需要Members Intent
这是因为get_member
需要一个 Member 对象,您只能通过 Members Intent 获得该对象。
您必须在此处启用它。选择您想要的应用程序 -> 选择Bot
-> SERVER MEMBERS INTENT,然后确保它旁边显示为蓝色。然后单击保存更改。您可能还希望启用Presence intent
,因为您将来可能需要它,它可以节省您返回并再次执行它的时间。
然后,您必须像这样编辑您的 bot 变量:
intents = discord.Intents()
intents.all()
bot = commands.Bot(command_prefix=".", intents=intents)
推荐阅读
- laravel - SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行(Laravel 6)
- python - Pyinstaller Matlab 弃用警告
- python - 想要从多个 for 循环创建数据框
- node.js - 如何在mongodb聚合项目阶段合并两个对象?
- javascript - WebCrypto 执行问题,由于数据类型错误而失败,并将所有处理结果编译在一个统一的字段中
- android - Zoom HERE 地图以显示所有标记 Android
- python - ValueError:长度不匹配:预期轴有 23 个元素,新值有 2 个元素。熊猫长度不匹配
- python - 如何将中间数量的数据传递给子进程?
- python - 使用python显示docx文件的内容
- vb.net - 计算文本框中所有行的总和