Discord Bot如何创建私人文本频道

时间:2019-08-03 14:10:43

标签: node.js discord discord.js

我正在使用node.js创建一个不和谐的bot,我希望它在服务器上创建一个私有文本通道,并向用户添加发送命令“!create”和bot本身的机器人。

我找到了一种使用以下答案制作文本频道的方法:How to create a text channel 但是我找不到将它设为私有并添加人员的方法。

3 个答案:

答案 0 :(得分:2)

我总是这样做:

const everyoneRole = client.guilds.get('SERVER ID').roles.find('name', '@everyone');

const name = message.author.username;
message.guild.createChannel(name, 'text')
    .then(r => {
        r.overwritePermissions(message.author.id, { VIEW_CHANNEL: true });
        r.overwritePermissions(client.id, { VIEW_CHANNEL: true });
        r.overwritePermissions(everyoneRole, { VIEW_CHANNEL: false });
    })
    .catch(console.error);

首先,我们定义“所有人角色”。然后,我们使用方法overwritePermissions()来覆盖新创建的行会文本通道的权限。在那里,我们向消息作者和漫游器授予了查看该频道的权限,而我们撤消了每个角色的查看该频道的权限。

答案 1 :(得分:0)

https://discord.js.org/#/docs/main/stable/class/ChannelManager

使用缓存集合

const channels = message.guild.channels.cache
const myChannel = channels.find(channel => channel.name === 'channel name')

答案 2 :(得分:0)

感谢@gilles-heinesch 的领导。 The APIdiscord.js 随着时间的推移发生了巨大的变化,所以这里有一个更新的版本:

const { Client, Permissions } = require('discord.js');

/** @param {string|number} serverId - a "snowflake" ID you can see in address bar */
async function createPrivateChannel(serverId, channelName) {
  const guild = await client.guilds.fetch(serverId);
  const everyoneRole = guild.roles.everyone;
  const channel = await guild.channels.create(channelName, 'text');
  await channel.overwritePermissions([
    {type: 'member', id: message.author.id, allow: [Permissions.FLAGS.VIEW_CHANNEL]},
    {type: 'member', id: client.user.id, allow: [Permissions.FLAGS.VIEW_CHANNEL]},
    {type: 'role', id: everyoneRole.id, deny: [Permissions.FLAGS.VIEW_CHANNEL]},
  ]);
}