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

如何用Discord.py实现Bot随指定服务器图标自动更换头像?

实现Discord Bot同步指定服务器图标为自身头像的代码

以下是基于Discord.js v14的实现代码,适合新手理解和使用:

前置准备

  • 确保你已经安装Node.js(v16.9.0及以上版本)
  • 安装Discord.js依赖:npm install discord.js
  • 在Discord开发者门户中,给你的Bot开启Server Members Intent和Guilds Intent
  • Bot需要加入目标服务器,默认已拥有「查看服务器图标」权限
const { Client, GatewayIntentBits } = require('discord.js');

// 替换成你的Bot令牌
const BOT_TOKEN = '你的Bot令牌';
// 替换成你要监听的目标服务器ID
const TARGET_GUILD_ID = '目标服务器ID';

const client = new Client({
  intents: [
    GatewayIntentBits.Guilds, // 必须开启,才能监听服务器更新事件
    GatewayIntentBits.GuildMembers // 可选,若需其他成员相关操作
  ]
});

// Bot上线提示
client.on('ready', () => {
  console.log(`已登录为 ${client.user.tag}`);
});

// 监听服务器更新事件(图标变化会触发此事件)
client.on('guildUpdate', async (oldGuild, newGuild) => {
  // 只处理目标服务器
  if (newGuild.id !== TARGET_GUILD_ID) return;

  // 判断图标是否发生变化
  if (oldGuild.iconURL() !== newGuild.iconURL()) {
    try {
      // 获取新图标Buffer数据(setAvatar需要Buffer格式)
      const iconBuffer = await newGuild.icon.fetch();
      // 设置Bot头像
      await client.user.setAvatar(iconBuffer);
      console.log('已同步服务器图标为Bot头像');
    } catch (error) {
      console.error('同步头像失败:', error);
    }
  }
});

// 登录Bot
client.login(BOT_TOKEN);

关键代码说明

  • guildUpdate事件:服务器信息(图标、名称等)变更时触发,通过对比新旧服务器的图标URL判断是否为图标更新
  • icon.fetch():获取服务器图标的Buffer数据,用Buffer设置头像比直接用URL更稳定
  • 错误捕获:用try/catch处理网络异常、权限不足等可能的问题

注意事项

  1. 确保Bot令牌和目标服务器ID填写正确,服务器ID需开启Discord开发者模式才能复制
  2. 若Bot无法修改头像,检查是否为团队Bot,团队Bot需要管理员授权修改头像权限
  3. Discord支持PNG、JPG、GIF(仅限 nitro服务器)格式图标,代码会自动兼容这些格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:46:03