Discord.py on_member_join 和 on_member_leave 不起作用

mus*_*ica 8 discord discord.py

我开始使用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')
Run Code Online (Sandbox Code Playgroud)

我还添加了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')
Run Code Online (Sandbox Code Playgroud)

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

Eri*_*Jin 5

discord 中任何类型的 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')
Run Code Online (Sandbox Code Playgroud)


小智 1

on_member_join我不完全确定,但你不工作背后的原因on_member_leave可能是因为意图没有被传递。

import discord
intents = discord.Intents.all()

client = discord.Client(intents=intents)
Run Code Online (Sandbox Code Playgroud)

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