我试图让我的bot在我的日志通道中发送消息,每当有人离开或加入服务器时,但我在控制台上得到错误AttributeError: 'NoneType' object has no attribute 'send'
。我已经尝试了许多解决方案,我发现在StackOverflow和其他网站,但似乎没有工作在我的情况下。
@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.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")
谢谢!
尝试先打印出get_channel返回的内容,因为如果get_channel找不到通道,它将返回None。
通过在bot.get_channel()
中硬编码一个int来尝试一下,看看它返回什么
同时检查Bot是否可以看到该通道并写入。
我试过在自己的机器人,它对我来说很不错。
代码复制文本通道ID
结果
看起来您的logChannel = bot.get_channel(id=myLogChannelIdHere)
实际上没有捕获通道,这可能有几个原因。
存储在myLogChannelIdHere
中的值要么不是bot可以看到的有效通道id,要么不是整数。如果它是一个字符串,将int()
包裹起来将解决它。
另一点可能相关,也可能不相关,当我使用get_channel
时,我不指定id=
参数,我只是直接弹出通道id。
import discord
from discord import Member
from discord.utils import get
@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}" 😌')