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

如何实现Discord机器人$steal指令偷取并添加Nitro表情到服务器?

解决Discord机器人$steal指令添加表情到服务器的问题

要实现将Nitro表情添加到当前服务器的功能,核心是使用Discord.py提供的Guild.create_custom_emoji()方法,同时需要处理权限、服务器表情上限、图片获取等问题。以下是修改后的完整代码及说明:

修改后的代码

import aiohttp
import discord
from discord.ext import commands

@bot.command(brief='偷取表情到当前服务器', description='将任意服务器的Nitro表情添加到指令执行的服务器', usage='[表情](支持普通/动画表情)')
async def steal(ctx, emoji: discord.PartialEmoji):
    # 检查机器人权限
    if not ctx.guild.me.guild_permissions.manage_emojis:
        await ctx.send('我没有管理表情的权限,无法添加表情')
        return
    
    # 检查服务器表情数量是否超限
    current_emojis = len(ctx.guild.emojis)
    max_emojis = ctx.guild.emoji_limit
    if current_emojis >= max_emojis:
        await ctx.send(f'服务器表情已达上限({current_emojis}/{max_emojis}),无法添加新表情')
        return
    
    # 异步获取表情图片二进制数据
    async with aiohttp.ClientSession() as session:
        async with session.get(emoji.url) as resp:
            if resp.status != 200:
                await ctx.send('获取表情图片失败')
                return
            emoji_bytes = await resp.read()
    
    # 创建自定义表情
    try:
        new_emoji = await ctx.guild.create_custom_emoji(
            name=emoji.name,
            image=emoji_bytes,
            reason=f'用户{ctx.author.name}使用$steal指令添加'
        )
        await ctx.send(f'表情偷取完成!{new_emoji}')
    except discord.HTTPException as e:
        await ctx.send(f'添加表情出错:{str(e)}')

关键说明

  • 权限要求:机器人必须拥有服务器的「管理表情」权限,否则无法创建表情。
  • 表情上限处理:每个Discord服务器的表情数量上限由服务器等级决定,添加前需检查是否已达上限。
  • 图片获取:使用aiohttp异步请求表情的URL,获取二进制数据后传给create_custom_emoji方法(该方法仅接受bytes类型的图片数据)。
  • 异常处理:捕获HTTPException,处理诸如表情名称不合法、图片过大、网络错误等情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:50:22