Discordpy 欢迎机器人
Posted
技术标签:
【中文标题】Discordpy 欢迎机器人【英文标题】:Discordpy welcome bot 【发布时间】:2021-06-01 06:37:05 【问题描述】:所以,我尝试制作一个机器人,每次用户加入我的服务器时都会将嵌入发送到特定频道。 代码是这样的
import discord
import asyncio
import datetime
from discord.ext import commands
intents = discord.Intents()
intents.members = True
intents.messages = True
intents.presences = True
bot = commands.Bot(command_prefix="a!", intents=intents)
@bot.event
async def on_ready():
print('Bot is ready.')
@bot.event
async def on_member_join(ctx, member):
embed = discord.Embed(colour=0x1abc9c, description=f"Welcome member.name to member.guild.name!")
embed.set_thumbnail(url=f"member.avatar_url")
embed.set_author(name=member.name, icon_url=member.avatar_url)
embed.timestamp = datetime.datetime.utcnow()
channel = guild.get_channel(816353040482566164)
await channel.send(embed=embed)
我遇到了一个错误
Ignoring exception in on_member_join
Traceback (most recent call last):
File "C:\Users\Piero\AppData\Roaming\Python\Python39\site-packages\discord\client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "C:\Users\Piero\Documents\Discord\a-chan\achan_bot\main.py", line 24, in on_member_join
channel = guild.get_channel(816353040482566164)
NameError: name 'guild' is not defined
有人知道我的代码有什么问题吗?
【问题讨论】:
您没有在代码中的任何地方定义guild
,那么 Python 应该如何知道那是什么?
我不认为ctx
是传递给on_member_join
的参数。看documentation,好像只有member
通过了。
【参考方案1】:
首先看discord.py
documention,ctx
是没有传递给on_member_join
事件引用的。但是,您可以使用 传递的attributes of member
来获取您需要的值。
@bot.event
async def on_member_join(member):
embed = discord.Embed(
colour=0x1abc9c,
description=f"Welcome member.name to member.guild.name!"
)
embed.set_thumbnail(url=f"member.avatar_url")
embed.set_author(name=member.name, icon_url=member.avatar_url)
embed.timestamp = datetime.datetime.utcnow()
channel = member.guild.get_channel(816353040482566164)
await channel.send(embed=embed)
有趣的是,您这样做非常适合获取公会名称,但您在检索 channel
时似乎忘记了这样做。
【讨论】:
【参考方案2】:您没有定义guild
。
要定义您的公会,您可以执行以下操作:
guild = bot.get_guild(GuildID)
这与您定义channel
时使用的方法相同,现在仅用于您的guild
。
有关更多信息,您可以查看文档: https://discordpy.readthedocs.io/en/latest/api.html#discord.Client.get_guild
还要考虑到我们在on_member_join
事件中没有像ctx
这样的参数。
在您的情况下,该事件只有参数member
:
@bot.event
async def on_member_join(member): #Removed ctx
【讨论】:
以上是关于Discordpy 欢迎机器人的主要内容,如果未能解决你的问题,请参考以下文章
我如何为 client = discord.Client() 使用 discordpy 冷却命令 [关闭]