当前位置: 首页 > 知识库问答 >
问题:

覆盖不和谐机器人在所有文本/语音通道中静音角色的权限

拓拔阎宝
2023-03-14

我想做一个不和谐机器人。我打字的时候?静音@角色,我希望我的机器人创建一个静音角色,并删除服务器中每个通道中该角色的SEND_MESSAGESSPEAK权限。我有它将添加角色的人,但到目前为止,我不能让它设置权限。我用的是discord.jsv12我的代码在下面。忍受我,因为我在javascript方面没有经验,我以前也没有在StackOverflow中发布问题。

if (!message.member.permissions.has('KICK_MEMBERS'))
 return message.channel.send(
  "*You don't have permission to use this command.*"
 );

const role = message.guild.roles.cache.find((role) => role.name === 'Muted');

const member3 = message.guild.member(user);

if (!role) {
 message.guild.roles
  .create({
   data: {
    name: 'Muted',
    color: 'GREY',
   },
   reason: 'Created role to mute member',
  })
  .then(console.log)
  .catch(console.error);
}

if (!user) {
 message.channel.send(`There's no person to mute tho`);
 return;
}

if (member3.permissions.has('ADMINISTRATOR')) {
 return message.channel.send(`I can't mute ${user} because he is staff`);
}

const roleMute = message.guild.roles.cache.find(
 (role) => role.name === 'Muted'
);

message.guild.channels.cache.forEach((channel) => {
 channel.updateOverwrite(channel.guild.roles.roleMute, {
  SEND_MESSAGES: false,
  SPEAK: false,
 });
});

member3.roles.add(roleMute);

共有2个答案

翟淇
2023-03-14

您的问题在以下范围内:

message.guild.channels.cache.forEach((channel) => {
 channel.updateOverwrite(channel.guild.roles.roleMute, {
  SEND_MESSAGES: false,
  SPEAK: false,
 });
});

您正试图访问角色静音变量,就好像它是GuildRoleManager对象的属性(它不是)。因为您刚刚将角色Mute定义为单数变量:

const roleMute = message.guild.roles.cache.find(
 (role) => role.name === 'Muted'
);

您所要做的就是将该变量作为参数提供。

message.guild.channels.cache.forEach((channel) => {
 channel.updateOverwrite(roleMute, {
  SEND_MESSAGES: false,
  SPEAK: false,
 });
});
严成礼
2023-03-14

你几乎说对了。尝试此操作以创建您的角色并覆盖权限。将这两种方法都放在中是一种很好的做法。。。捕获块,以便在出现错误时进行处理。

try {
 role = await message.guild.roles.create({
  data: {
   name: 'Muted',
   color: '#514f48',
   permissions: [],
  },
 });
 message.guild.channels.cache.forEach(async (channel, id) => {
  await channel.updateOverwrite(role, {
      SEND_MESSAGES: false,
      SPEAK: false,
      ADD_REACTIONS: false,
      SEND_TTS_MESSAGES: false,
      ATTACH_FILES: false 
  })
 });
} catch (e) {
 console.log(e.stack);
}

完成后,您可以在代码中省略这一部分

message.guild.channels.cache.forEach((channel) => {...}
 类似资料:
  • 我正在为我朋友组的游戏服务器开发一个discord机器人。我想添加一个命令,使语音频道中的每个人都静音。我想这是可以工作,但它返回时不是一个函数,导致机器人崩溃。这是的工作原理是,它将服务器静音发送消息的成员,但显然不是我想要的整个频道。我对不和谐是全新的。js和文档有点混乱。谢谢你的时间!

  • 我希望我的不和谐机器人加入语音频道。但是我遇到了一个问题,每当我想让它加入风投时,什么都不会发生——甚至没有错误。我尝试过SO/Git的其他解决方案,但没有一个适合我(下面有一个)。 编辑:解决了!问题是:没有不和。已安装py[语音]模块。解决方案:

  • 我正在努力让我的机器人进入语音频道,我已经阅读了这里的很多帖子,但没有一篇能够解决我的问题,我正在尝试让我的机器人复制yt视频的声音,但它甚至没有加入,我不知道该怎么办,下面是代码:

  • 我找不到解决办法,所以我来了。我制造了一个不和谐的机器人。py rewrite为我的discord服务器编写,我想实现一个功能,当用户加入语音频道时,我的机器人会说些什么。 我甚至不能让机器人加入语音聊天,因为它会给出所有可能的错误。提前谢谢。 这就是我所尝试的: 还有这个 他们都给出了这个错误

  • 我正在尝试让我的JDA discord bot删除文本频道中的所有消息,目前我使用的代码效率极低,偶尔有效,有时无效。代码: 我知道一个事实,我正在调用函数,我知道一个事实,正在传递的文本通道是正确的。请帮我同样的忙。

  • 当我在discord内部运行以下脚本(“cmd中的node musicbot.js”)和“!play ytlink”时,bot加入语音通道,并在控制台中记录命令和链接。然而,音乐并没有开始播放。我安装了ffmpeg、ytdl核心和discord。js。 有人能帮我吗?我不知道是哪一部分搞砸了。