You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.py机器人升级提醒无法@成员问题求助

解决Discord.py Embed中无法@成员的问题

问题根源

Discord的Embed消息里,手动拼接的<@成员ID>纯文本不会被识别为有效提及,必须通过Discord.py提供的成员对象生成官方认可的提及格式,才能触发@提醒。

修复方案及代码优化

  1. 优先获取discord.Member对象,用member.mention生成有效提及
  2. 增加异常判断,避免服务器/成员/频道不存在时报错
  3. 用with语句管理数据库连接,自动释放资源

修改后的代码:

import math
import sqlite3
import discord

async def new_level_ping(bot, memberid, guildid, xpbefore, xpadded):
    oldlevel = math.floor((xpbefore ** 0.5) / 5)
    newlevel = math.floor(((xpbefore + xpadded) ** 0.5) / 5)
    
    if oldlevel != newlevel:
        # 获取服务器对象
        guild = bot.get_guild(guildid)
        if not guild:
            return
        
        # 获取成员对象,生成有效提及
        member = guild.get_member(memberid)
        member_mention = member.mention if member else f"<@{memberid}>"

        # 自动管理数据库连接
        filename = "./database/database.db"
        with sqlite3.connect(filename) as connection:
            cursor = connection.cursor()
            cursor.execute("SELECT levelingsystemstatus FROM guildsetup WHERE guildid = ?", (guildid,))
            levelingsystemstatus = next(cursor, [None])[0]
            
            if levelingsystemstatus == True:
                cursor.execute("SELECT levelingpingmessagechannel FROM guildsetup WHERE guildid = ?", (guildid,))
                channelid = next(cursor, [None])[0]
                if not channelid:
                    return
                
                # 尝试获取频道,优先用缓存再拉取API
                channel = bot.get_channel(channelid) or await bot.fetch_channel(channelid)
                embed = discord.Embed(title=f'Congratulations {member_mention}', description=f'You reached level {newlevel}', color=discord.Color.green())
                await channel.send(embed=embed)

关键说明

  • member.mention会生成Discord认可的提及格式,在Embed中能正常触发@提醒
  • 增加了服务器、成员、频道的存在性判断,避免运行时抛出异常
  • with语句包裹数据库连接,无需手动调用close(),防止资源泄漏

内容的提问来源于stack exchange,提问作者ekcum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 22:30:22