【问题标题】:How can I make a user specific channel in Discord.Js?如何在 Discord.Js 中创建用户特定频道?
【发布时间】:2020-04-24 18:15:58
【问题描述】:

如何在 Discord.Js 中创建用户特定频道?

所以我正在制作一个 Discord 机器人,你点击一个反应,它就会把你带到一个私人频道,其他人看不到这个频道

这是我目前所拥有的:

const Discord = require('discord.js');
const client = new Discord.Client();
const { bot } = require('./config.json');
const request = require('request');

client.on('message', message => {
    var command = message.content.replace('t#', '');
    var command = command.replace('t# ', '')
    if(command.startsWith('post') === true){
        message.delete();
        var postEmbed = new Discord.RichEmbed();
        postEmbed.setTitle('Twotter Post')
        postEmbed.setAuthor(message.author.tag, message.author.avatarURL)
        postEmbed.setDescription(command.replace('post ', ''))
        postEmbed.setFooter('Created by Happy Fone on YouTube')
        this.message = message;
        message.channel.send(postEmbed).then(message => {
            message.react('????')
            message.react('????')
            message.react('????')
            this.messageId = message.id;
        });
    }
});

client.on('messageReactionAdd', (messageReaction, user) => {
    if(user.bot)return;
    const { message, emoji } = messageReaction;
    if(emoji.name == "????") {
        if(message.id == this.messageId) {
            makeChannel(this.message)
        }
    }
});

function makeChannel(message){
    var server = message.guild;
    var name = message.author.username;

    server.createChannel(name, "text");
}

client.login(bot.token)

我试图尽可能具体地表达我想要的东西。如果您需要更多信息,请说。

【问题讨论】:

    标签: javascript discord discord.js


    【解决方案1】:
    function makeChannel(message){ 
      var server = message.guild; 
      var username = message.author.username; 
    
      server.createChannel(name, `${username}`); 
      var channel = server.find("name", `${username}`)
      channel.overwritePermissions(message.author.id,{'VIEW_CHANNEL':true,'VIEW_CHANNEL':true}))
    } 
    
    client.on('messageReactionAdd', (messageReaction, user) => { 
      if(user.bot)return; 
      const { message, emoji } = messageReaction; 
      if(emoji.name == "?") { 
        if(message.id == this.messageId) { makeChannel(this.message) }
      }
    });
    
    client.login(bot.token)
    

    这段代码还没有测试,我稍后再做。

    【讨论】:

      【解决方案2】:

      由于您需要对makeChannel() 中的消息做出反应的用户,因此您必须为其添加一个参数。您实际上并不需要函数中的相关消息,因此您可以将该参数替换为 Guild(您确实需要)。

      function makeChannel(guild, user) {
        const name = user.username;
        ...
      }
      
      // within messageReactionAdd listener
      
      makeChannel(message.guild, user);
      

      创建通道时,您可以传入一个包含权限 (PermissionResolvables) 的 ChannelData 对象。通过这样做,您可以拒绝所有人(具有管理员权限的成员除外)访问频道除了用户。

      // within makeChannel()
      
      guild.createChannel(name, {
        type: 'text',
        permissionOverwrites: [
          {
            id: guild.id, // shortcut for @everyone role ID
            deny: 'VIEW_CHANNEL'
          },
          {
            id: user.id,
            allow: 'VIEW_CHANNEL'
          }
        ]
      })
        .then(channel => console.log(`${name} now has their own channel (ID: ${channel.id})`))
        .catch(console.error);
      

      请参阅 Discord.js 文档中的示例以获取 Guild#createChannel()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-21
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 2019-09-05
        • 1970-01-01
        • 2021-04-04
        • 1970-01-01
        相关资源
        最近更新 更多