当前位置: 首页 > 知识库问答 >
问题:

不一致py on_成员加入和on_成员离开不工作

江向阳
2023-03-14

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

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')

我还添加了客户端。在_message命令上,以便bot将该名称编辑为我键入的任何名称。

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

现在,在添加了一些用于调试的打印后,我发现,\u member\u join()上的和\u member\u leave()上的从未被调用,但是当我键入命令时,bot会编辑频道的名称。这是一个语音频道,显示会员人数。没有任何错误。我看错API了吗?请帮忙


共有3个答案

阎烨
2023-03-14

您需要在discord开发者门户中设置意图,然后代码如下:

import discord
from discord.ext import commands
intents = discord.Intents.all()

bot = commands.Bot(command_prefix=".", intents=intents)

# etc.
钱志
2023-03-14

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

import discord
intents = discord.Intents.all()

client = discord.Client(intents=intents)

然后要在bot应用程序中启用服务器意图。当我制作机器人时,我也面临着这个问题。

洪飞龙
2023-03-14

不一致的任何类型的ID都应该作为整数传递,而不是字符串。另外,不和谐。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')
 类似资料:
  • My Discord bot在启动后至少切换到1个其他语音频道之前,无法识别语音频道中的成员(加入频道后,用户必须手动切换到其他频道,然后返回,以便bot识别成员并将其移动到所需频道)。这有点违反直觉,违背了我机器人的目的。

  • 再一次,我的代码没有跟上,我不知道为什么。。。控制台显示没有错误。 这是我的密码:

  • 我已经添加了所有必需的东西,如意图和网关,但我的机器人没有反应,我放了一个调试打印命令,以便当有人离开它时打印“机器人检测到“member.mention已经离开服务器”但是不管我做什么,它真的什么也做不了。 我省略了很多内容,因为这是不必要的(主要是与帮助和你好世界填充命令相关的东西),但手头的主要问题是我有intents.members,我已经在不和谐的应用程序面板中激活了它,但是即使这样做之

  • 我试图通过visual Studio中的android绑定库将clover.aar文件绑定到xamarin。我把它归结为两个错误: “Decimal”不实现接口成员“icomparable.comapreto(对象)”

  • 我正在通过discord开发discord机器人。js和我需要在这一刻获得语音频道中的所有成员。我该怎么做?我试过了 但是它说find不是一个函数。还有,我试过了 但是它说get不是一个函数。

  • 我正在创建一个用户信息命令,DiscordJS一直在说 我使用的函数是:让target=message。公会成员。getMember(toFind) 我需要更新DiscordJS的新版本吗?我还没有找到任何东西。 谢谢,裘德·威尔逊