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

关于机器人Presence/Activity设置命令及专属命令配置的技术咨询

实现机器人状态设置命令并限制仅本人使用

嘿,我来帮你一步步搞定这个需求!作为编程新手,咱们从最基础的逻辑开始拆解,先实现状态设置的命令功能,再加上仅你自己能使用的权限限制~

一、编写状态设置命令(以Discord.js为例)

我用Discord.js来举例子,这是最适合新手的Discord机器人开发库之一。先确保你已经初始化好机器人项目,接下来直接写命令逻辑:

const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.MessageContent, GatewayIntentBits.GuildMessages] });

// 替换成你自己的Discord用户ID(后面会说怎么找)
const OWNER_ID = '你的用户ID数字';

client.on('messageCreate', async (message) => {
  // 忽略机器人自己发的消息,以及不以~~set开头的消息
  if (message.author.bot || !message.content.startsWith('~~set')) return;

  // 仅允许机器人所有者使用该命令——核心权限限制
  if (message.author.id !== OWNER_ID) {
    return message.reply('抱歉,你没有权限使用这个命令!');
  }

  // 拆分命令参数,比如~~set presence idle 会拆成 ['~~set', 'presence', 'idle']
  const args = message.content.split(/\s+/);
  args.shift(); // 移除第一个命令前缀元素

  // --- 处理Presence在线状态设置 ---
  if (args[0] === 'presence') {
    const status = args[1];
    // 验证合法状态值:online(在线)、idle(空闲)、dnd(请勿打扰)、invisible(隐身)
    const validStatuses = ['online', 'idle', 'dnd', 'invisible'];
    if (!validStatuses.includes(status)) {
      return message.reply('无效的状态值!可选值:online, idle, dnd, invisible');
    }
    client.user.setStatus(status);
    return message.reply(`已将机器人状态设置为:${status}`);
  }

  // --- 处理活动状态设置 ---
  if (args[0] === 'activity') {
    const type = args[1];
    // 取出带空格的活动描述(自动去掉前后引号)
    const activityName = args.slice(2).join(' ').replace(/["']/g, '');

    // 验证合法活动类型:playing(玩)、watching(看)、listening(听)、streaming(直播)、competing(竞赛)
    const validTypes = ['playing', 'watching', 'listening', 'streaming', 'competing'];
    if (!validTypes.includes(type.toLowerCase())) {
      return message.reply('无效的活动类型!可选值:playing, watching, listening, streaming, competing');
    }

    // 转换为Discord要求的大写类型
    const activityType = type.toUpperCase();
    client.user.setActivity(activityName, { type: activityType });
    return message.reply(`已将机器人活动设置为:${type} ${activityName}`);
  }

  // 命令格式错误时的提示
  message.reply('命令格式错误!示例:\n~~set presence idle\n~~set activity watching "people typing ~~help"');
});

// 登录机器人(替换成你的机器人Token)
client.login('你的机器人Token');

二、快速获取自己的Discord用户ID

要让权限限制生效,你需要先拿到自己的用户ID:

  1. 打开Discord设置,进入「高级」选项
  2. 开启「开发者模式」
  3. 右键点击自己的头像,选择「复制用户ID」,把这个ID粘贴到代码里的OWNER_ID位置就好啦

测试命令

现在你就可以在Discord里测试你想要的命令了:

  • 输入 ~~set presence idle:机器人会切换到“空闲”状态
  • 输入 ~~set activity watching "people typing ~~help":机器人会显示“正在观看 people typing ~~help”

如果其他人尝试发送这些命令,会直接收到权限不足的提示,完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:59:09