discord - 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 了吗?请帮忙
解决方案
任何不和谐的 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')
推荐阅读
- html - 在 Netlify.toml 文件中设置多个重定向
- r - 仅对缺失日期使用滞后函数递增日期
- date - 在SAS中的多个主题的日期条目之间创建唯一日期列表?
- reactjs - Draft.js - createWithContent 或 convertFromRaw 抛出错误
- java - Artifactory REST API 拒绝有效的 JSON
- haskell - 如何解释 Haskell 中的关联性/优先级
- reactjs - 如何在 axios.get 中添加正文?
- linux - Bash - 多行 Whiptail 反标题
- python - 避免使用双引号将 pandas.to_sql 写入表(PostgreSQL 数据库)
- c++ - 如何在 C++ 中使用双链表实现迭代器前后方法?