首页 > 解决方案 > Discord.py on_member_join 和 on_member_leave 不起作用

问题描述

我开始使用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 了吗?请帮忙

标签: discorddiscord.py

解决方案


任何不和谐的 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')

推荐阅读