【问题标题】:Discordpy welcome botDiscordpy 欢迎机器人
【发布时间】: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通过了。

标签: python-3.x discord.py


【解决方案1】:

首先看discord.py documentionctx是没有传递给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
    

    【讨论】:

      猜你喜欢
      • 2020-05-18
      • 2021-02-27
      • 2023-03-03
      • 2018-02-07
      • 2022-01-01
      • 2021-11-13
      • 2021-02-22
      • 1970-01-01
      • 2018-04-21
      相关资源
      最近更新 更多