【发布时间】:2021-11-10 22:17:54
【问题描述】:
我是编码新手,我被严重卡住了。几天来一直在查看 API 并试图解决这个问题,现在我必须寻求帮助。
我正在尝试为我的朋友的小型服务器制作一个不和谐机器人,它会在出现提示时随机选择一个活跃用户并为他们分配一个角色,从之前拥有该角色的用户中删除该角色,并保留ID 存储在 2 个文件中,因此如果机器人出现故障,它可以从文件中读取 ID,并知道谁拥有此角色 x 次,并知道活跃用户是谁等。
很多代码都有效,但问题出在这部分:
def assign_jester():
# Randomly selects user to be new jester from the list of users
jester_role_id = 885183611215683614
with open(user_log, 'r') as file:
_users = file.read().split(',')
new_jester_id = random.choice(_users)
new_jester, new_jester_username = get_user_details(new_jester_id)
print('User "{}" selected as new Jester'.format(new_jester_username))
# Checks who currently has the jester role ready to be removed
with open(jester_log, 'r') as file:
_users = file.read().split(',')
if not is_file_empty(jester_log):
old_jester_id = _users[-1]
old_jester, old_jester_username = get_user_details(old_jester_id)
#old_jester.remove_roles(*jester_role_id, reason='No more laughter', atomic=False)
print('Jester role deleted from user "{}"'.format(old_jester_username))
# Writing selected users ID to jester log, after the role has been removed from previous
# This is to make sure that it doesn't delete the newly assigned role
with open(jester_log, 'a') as file:
if not is_file_empty(user_log):
file.write(",")
file.write(str(new_jester_id))
print('User "{}" logged to the file as first Jester'.format(new_jester_username))
else:
file.write(str(new_jester_id))
print('User "{}" logged to the file as newest Jester'.format(new_jester_username))
#new_jester.add_roles(*jester_role_id, reason='Who laughing now, idiot', atomic=False)
print('Jester role assigned to user "{}"'.format(new_jester_username))
return
def get_user_details(user_id):
_server = client.get_guild(829439043753607228)
print(_server)
_user = _server.get_member(user_id)
print(_user)
_username = _user.name + '#' + _user.discriminator
return _user, _username
“get_user_details”方法中的“_user”变量返回 NoneType 并且我所看到的任何地方都告诉我这段代码很好,它应该像函数一样返回成员对象,_server 变量保存正确的数据。
如果这是一个非常愚蠢的问题并且我错过了一些明显的东西,我深表歉意,但是我的大脑因为我一直在努力学习所有这些而感到焦躁,所以任何帮助都将不胜感激
【问题讨论】:
-
您是否启用了 Intents?
-
@Dominik 是的,我的代码顶部有这个:“intents = discord.Intents.default() intents.members = True intents.voice_states = True”
-
也许尝试启用所有意图
-
使用
await client.fetch_user(id) -
在您调用时机器人准备好了吗?这是否在 on_ready 中/之后?
标签: python discord discord.py