Discord Python机器人on_guild_join事件执行报错问题排查
解决Discord机器人on_guild_join事件中的TypeError问题
先来看你遇到的错误:
Ignoring exception in on_guild_join Traceback (most recent call last): File "/home/user/.local/lib/python3.7/site-packages/discord/client.py", line 343, in _run_event await coro(*args, **kwargs) File "/home/user/DiscordBots/DefaultRobloxTools/cogs/CommandEvents.py", line 58, in on_guild_join embed = discord.Embed(title=tit + " Was invited to " + name) TypeError: unsupported operand type(s) for +: 'function' and 'str'
这个错误的核心原因非常明确:你在尝试把一个函数对象和字符串做拼接操作,而Python不允许不同类型的对象直接做加法拼接。具体来说,代码里的tit并不是你预期的字符串(比如机器人名称),而是一个未被调用的函数。
修复方案
你需要先检查tit的定义,分两种情况处理:
- 如果
tit是一个用来返回字符串的函数(比如你写了def tit(): return "My Bot Name"),那你需要调用这个函数来获取它的返回值,把代码改成:embed = discord.Embed(title=tit() + " Was invited to " + name) - 如果
tit本来就应该是一个字符串变量,那你可能不小心把它定义成了函数,改成直接赋值字符串即可,比如:tit = "My Awesome Discord Bot"
额外的小优化
你的代码里还有一行逻辑不够严谨:
if guild.description == True:
guild.description的类型是字符串或者None,永远不会等于True。你应该直接判断它是否存在(非空、非None),改成:
if guild.description:
这样就能正确显示服务器的描述内容了。
最后附上修正后的核心代码片段参考:
@commands.Cog.listener() async def on_guild_join(self, guild): name = str(guild.name) description = str(guild.description) if guild.description else "No description provided" member_count = str(guild.member_count) channel_count = str(len(guild.channels)) id = str(guild.id) region = str(guild.region) # 假设tit是返回字符串的函数,这里调用它 embed = discord.Embed(title=tit() + " Was invited to " + name) if guild.description: embed.add_field(title="Description", value=description) embed.add_field(title="ID", value=id) embed.add_field(title="Member Count", value=f"Count: {member_count}") embed.add_field(title="Channel Count", value=channel_count) embed.add_field(title="Region", value=region) embed.set_thumbnail(url=guild.icon_url) await guild_channel.send(embed=embed)
内容的提问来源于stack exchange,提问作者byggmesterPRO
相关产品推荐
相关产品推荐

