【问题标题】:get_member() returns NoneType with discord.pyget_member() 使用 discord.py 返回 NoneType
【发布时间】: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


【解决方案1】:

get_member(id) 在 Bot 的缓存中返回成员 if found,如果返回 None 则未找到,因此我建议改用 await _server.fetch_member(user_id)

【讨论】:

    猜你喜欢
    • 2021-09-10
    • 2021-10-25
    • 2021-01-21
    • 2022-01-26
    • 2022-01-15
    • 1970-01-01
    • 2019-10-20
    • 2015-11-13
    • 1970-01-01
    相关资源
    最近更新 更多