再一次,我的代码没有赶上,我不知道为什么…控制台显示没有错误。
下面是我的代码:@bot.event
async def on_member_join(member):
channel = bot.get_channel(792786709350973454)
author = ctx.message.author
ico = author.avatar_url
embed = discord.Embed(
color = discord.Color.red(),
)
embed.set_author(name=(f'• Hello {member} on my server!!'))
embed.add_field(name='Warning,', value='read the regulations!', inline=False)
embed.set_footer(text="dBot created by Diablo#4700", icon_url=ico)
await channel.send(embed=embed)
代码片段中有不止一个问题。我将在这里列出它们并进行修复。
- 首先是主要问题,您正在使用
ctx.author.name
声明author
变量这里的ctx
是什么?ctx
仅在命令中传递。这是一个事件。它使用member
作为参数,你不能在这里使用ctx
。 - 其次,下一个问题并不是真正在停止命令输出中起作用,而是你在嵌入作者消息中发送
member
的问题。再说一遍,member
是一个对象你不能直接使用它你必须在成员后面加上属性比如member.name
member.mention
member.avatar_url
固定代码:
@bot.event
async def on_member_join(member):
channel = bot.get_channel(792786709350973454)
# author = ctx.message.author # first problem, you don't really need this line
ico = member.avatar_url # since above line is useless you would change this line too
embed = discord.Embed(
color = discord.Color.red(),
)
embed.set_author(name=f'• Hello {member.name} on my server!!') # second problem was here.
embed.add_field(name='Warning,', value='read the regulations!', inline=False)
embed.set_footer(text="dBot created by Diablo#4700", icon_url=ico)
await channel.send(embed=embed)
我用注释标记了错误。
(重要)意图:
如果你不知道,你需要特权网关意图来跟踪成员事件。确保在应用程序的developer Portal of Discord中启用bot部分的两个意图,然后在顶部的代码中(您正在初始化bot的地方)…
import discord
from discord.ext import commands
client= commands.Bot(command_prefix="prefix", intents=discord.Intents.all())
...
# rest of the code
引用:
on_member_join
eventcontext
orctx
ents Discord.Py