我最近开始使用discord.py(不是discord.ext命令,仅导入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了吗?请帮忙
答案 0 :(得分:2)
不一致的任何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')
答案 1 :(得分:0)
答案是,他们每10分钟向频道添加2个编辑限制。我收到通知,这个问题的浏览量超过2k
答案 2 :(得分:0)
我不完全确定,但您的 on_member_join 和 on_member_leave 不工作的原因可能是因为意图未通过。
import discord
intents = discord.Intents.all()
client = discord.Client(intents = intents)
然后您想在机器人应用程序中启用服务器意图。我在制作机器人时也遇到了这个问题
答案 3 :(得分:0)
您需要在不和谐开发者门户中设置意图 那么代码就会像这样
import discord
from discord.ext import commands
intents = discord.Intents.all()
bot = commands.Bot(command_prefix=".", intents=intents)
etc