【问题标题】:discord.py can't change the channel's namediscord.py 无法更改频道名称
【发布时间】:2021-08-30 05:13:02
【问题描述】:

所以最近我尝试创建一个机器人,它可以根据服务器上的成员数量来更改语音频道的名称,但我最终得到了这个错误:await memberchannel.edit(name = ">> ????ᴍᴇᴍʙᴇʀꜱ: " + guild.member_count) AttributeError: 'NoneType' object has no attribute 'edit'

这是我的代码,我不知道如何访问 .edit 属性:

async def on_member_join(member):
    guild = member.guild
    memberchannel : discord.VoiceChannel = get(guild.channels, id=MemberCounterChannel)
    await memberchannel.edit(name = ">> ????ᴍᴇᴍʙᴇʀꜱ: " + guild.member_count)

我在 on_member_remove 函数中做了同样的事情。

【问题讨论】:

  • MemberCounterChannel 不是频道 id,MemberCounterChannel 的值是多少?您可以按名称搜索:get(guild.channels, name='<your_channel_name>') 并使用其中的 id
  • MemberCounterChannel = '716598398001872918' 问题是我的频道是使用自定义字体“>> ????ᴍᴇᴍʙᴇʀꜱ: 3”命名的,我不确定它是否有效
  • 我试过这样做:memberchannel : discord.VoiceChannel = get(guild.channels, name=">> ????ᴍᴇᴍʙᴇʀꜱ: {guild.member_count}") await memberchannel.edit(name = ">> ????ᴍᴇᴍʙᴇʀꜱ: " + guild.member_count) 但我得到了同样的错误
  • 那行不通,只用当前名称对其进行测试,这样您就可以获得 id,然后在您的代码中使用该 id(如果这仅适用于一个公会)
  • 你也可以使用 f-string,format() 是老派

标签: python discord discord.py bots


【解决方案1】:

使用on_member_join 或其他与成员事件相关的事件必须要求启用成员意图。这样可以让这些事件在它们是私有的时运行,并且应该小心使用。

可以从 Discord 开发者门户启用意图,从那里您只需确保已在“机器人”类别中的意图中启用 Member。然后,您需要在定义机器人或客户端的部分中定义和使用机器人代码中的意图:

intents = discord.Intents.default()
intents.members = True

client = commands.Bot(command_prefix='your bot prefix', intents=intents)

启用 Intent 后,成员事件将起作用。使用您的代码,memberchannel 也没有定义,也不是 Discord 参数。

现在,这将通过其 ID 获取您要编辑的频道,并在用户加入到该用户加入的公会的当前成员数时进行编辑。

async def on_member_join(member):
    member_channel = client.get_channel(channel id)
    await member_channel.edit(name=f"Members: {member.guild.member_count}")

【讨论】:

    【解决方案2】:

    我不得不使用 discord 开发人员面板切换应用程序中的所有意图,并留下这样的代码(ConfigFile 是一个包含所有变量的 json 文件):

    memberchannel: discord.VoiceChannel = get(guild.channels, id=ConfigFile["MemberCounterChannelID"])
           membercount = guild.member_count - 1
           await memberchannel.edit(name="{0} {1}".format(ConfigFile["MemberCounterChannelName"], membercount))
    

    我还做了membercount = guild.member_count - 1 部分,因为我只在我的服务器上使用这个机器人,它不是用于商业用途,所以我真的不需要它来实际计算成员机器人

    【讨论】:

      猜你喜欢
      • 2019-01-13
      • 1970-01-01
      • 1970-01-01
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-22
      相关资源
      最近更新 更多