【问题标题】:Discord.py on_member_join and on_member_leave not workingDiscord.py on_member_join 和 on_member_leave 不起作用
【发布时间】:2020-09-19 05:05:32
【问题描述】:

我开始使用discord.py(不是discord.ext 命令,只有import discord)。最近,我做了一个频道,名字显示了公会的成员数,每次有人加入或离开时都会更新。这是我的代码:

import discord

client = discord.Client()

@client.event
async def on_ready():
    print("Bot is ready")

@client.event
async def on_member_join(member):
    channel = client.get_channel('channel id here')
    await channel.edit(name = 'Member count: {}'.format(channel.guild.member_count()))
    
@client.event
async def on_member_leave(member):
    channel = client.get_channel('channel id here')
    await channel.edit(name = 'Member count: {}'.format(channel.guild.member_count()))

client.run('my token here')

我还添加了client.on_message 命令,以便机器人将该名称编辑为我输入的任何内容。

@client.event
async def on_message(message)
     if message.content == 'rename channel':
            channel = client.get_channel('channel id here')
            await channel.edit(name = 'TEST')

现在,在添加了一些用于调试的打印后,我发现 on_member_join()on_member_leave() 永远不会被调用,但是当我键入命令时,机器人会编辑频道的名称。那是一个语音频道,显示会员数量。没有任何错误。我读错 API 了吗?请帮忙

【问题讨论】:

    标签: discord discord.py


    【解决方案1】:

    任何不和谐的 ID 都应该作为整数而不是字符串传递。此外,discord.Guild.member_count 是一个属性,而不是一个方法,所以使用它时不要带括号。您还应该使用on_member_remove() 而不是on_member_leave()

    import discord
    
    client = discord.Client()
    
    @client.event
    async def on_ready():
        print("Bot is ready")
    
    @client.event
    async def on_member_join(member):
        channel = client.get_channel(ID)
        await channel.edit(name = 'Member count: {}'.format(channel.guild.member_count))
    
    @client.event
    async def on_member_remove(member):
        channel = client.get_channel(ID)
        await channel.edit(name = 'Member count: {}'.format(channel.guild.member_count))
    
    client.run('my token here')
    

    【讨论】:

    • 谢谢,但现在 on_member_remove() 被调用但没有编辑频道名称,并且没有完成(它没有到达我最后添加的打印行)
    • await channel.edit() 不打印任何内容,还要确保您选择的频道 ID 确实存在
    【解决方案2】:

    我不完全确定,但您的 on_member_joinon_member_leave 无法正常工作的原因可能是因为未通过意图。

    import discord
    intents = discord.Intents.all()
    
    client = discord.Client(intents=intents)
    

    然后您想在机器人应用程序中启用服务器意图。我在制作机器人时也遇到了这个问题。

    【讨论】:

      【解决方案3】:

      你需要在discord开发者门户中设置intents,然后代码是这样的:

      import discord
      from discord.ext import commands
      intents = discord.Intents.all()
      
      bot = commands.Bot(command_prefix=".", intents=intents)
      
      # etc.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-25
        • 2022-07-23
        • 2021-01-16
        • 2023-03-12
        • 2021-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多