首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Discord.py AttributeError:'NoneType‘对象没有属性'send’

Discord.py AttributeError:'NoneType‘对象没有属性'send’
EN

Stack Overflow用户
提问于 2022-07-06 20:12:13
回答 3查看 260关注 0票数 0

每当有人离开或加入服务器时,我都试图让我的机器人在我的日志通道中发送一条消息,但是我在我的控制台中得到了错误AttributeError: 'NoneType' object has no attribute 'send'。我已经尝试过在StackOverflow和其他网站上找到的许多解决方案,但在我的情况下似乎没有什么有效的解决方案。

这是我的代码:

代码语言:javascript
运行
复制
@bot.event
async def on_member_remove(member):
   logChannel = bot.get_channel(id=myLogChannelIdHere)
   embed = discord.Embed(
      title= "** Un membre est parti**",
      description = f"${member} a quitté le serveur",
      color=0xda291c,
      set_thumbnail = member.avatar_url,
      )
   embed.timestamp = datetime.datetime.utcnow()
   await logChannel.send(embed=embed)

我不明白的是,在其他事件中,就像我的on_ready事件(当我的bot在线时,它在我的日志通道中发送一条消息),它工作得很好。

代码语言:javascript
运行
复制
@bot.event
async def on_ready():
   logChannel = bot.get_channel(id=myLogChannelIdHere)
   await bot.change_presence(status=discord.Status.online, activity=discord.Activity(type=discord.ActivityType.watching, name=""))
   await logChannel.send("Le bot est en ligne")
   print(bot.user.name + " est en ligne")

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2022-07-06 20:59:45

尝试首先打印出get_channel返回的内容,因为如果get_channel找不到通道,它将不返回。

通过在bot.get_channel()中硬编码int来尝试它

看看它会有什么回报

还可以检查,这样Bot实际上可以看到该频道并将其写入其中。

我在我自己的机器人上试过了,它对我来说很好。

代码

复制文本通道ID

结果

票数 0
EN

Stack Overflow用户

发布于 2022-07-07 08:15:22

似乎你的logChannel = bot.get_channel(id=myLogChannelIdHere)并没有真正捕捉到频道,这可能有几个原因。

存储在myLogChannelIdHere中的值要么不是bot可以看到的有效通道id,要么不是整数。如果它是一个字符串,将int()封装在它周围将解决这个问题。

另一点可能相关,也可能不相关,当我使用get_channel时,我不指定id=参数,我只是直接弹出通道id。

票数 0
EN

Stack Overflow用户

发布于 2022-07-07 21:05:53

代码语言:javascript
运行
复制
import discord
from discord import Member
from discord.utils import get
代码语言:javascript
运行
复制
@client.event
async def on_member_join(member:Member):
    if member.bot:
        guild:discord.Guild = member.guild
        role = guild.get_role(config.botRoleID)
        channel:discord.TextChannel = guild.get_channel(YOUR_CHANNEL_ID)
        await member.add_roles(role)
        await channel.send(f'Set Bot role to "{member.display_name}" ')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72889348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档