Как исправить сложную команду Discord в JS на основе веб-хуков и ролей - PullRequest
0 голосов
/ 20 апреля 2019

Я работаю над командой, в которой при выполнении команды d! Woa происходит следующее:

Создается webhook с определенным именем, затем создается роль с именем канала.после этого бот наблюдает, есть ли веб-крючок с этим определенным названием для канала, и просто видит, отправляет ли кто-нибудь сообщение в этом канале.Если это произойдет, то бот добавит эту роль с определенным именем.Проблема в том, что есть эта ошибка: TypeError: Cannot read property 'guild' of undefined Ошибка, скорее всего, появится в конце предоставленного кода.

Я попытался переставить код, определить гильдию и определить сообщение.Кажется, он не работает даже после того, как все это попробует.Я хочу, чтобы она была точной для идентификатора вместо имени, чтобы быть точной для этой команды.

const Discord = require('discord.js');
const commando = require('discord.js-commando');

class woa extends commando.Command 
{
    constructor(client) {
        super(client, {
            name: 'watchoveradd',
            group: 'help',
            memberName: 'watchoveradd',
            description: 'placeholder',
            aliases: ['woa'],
        })
    }
async run(message, args){

if (message.channel instanceof Discord.DMChannel) return message.channel.send('This command cannot be executed here.')
else

if(!message.member.guild.me.hasPermission(['MANAGE_WEBHOOKS'])) return message.channel.send('I don\'t have the permissions to make webhooks, please contact an admin or change my permissions!')
if(!message.member.guild.me.hasPermission(['MANAGE_ROLES'])) return message.channel.send('I don\'t have the permissions to make roles, please contact an admin or change my permissions!')
if (!message.member.hasPermission(['MANAGE_WEBHOOKS'])) return message.channel.send('You need to be an admin or webhook manager to use this command.')
if (!message.member.hasPermission(['MANAGE_ROLES'])) return message.channel.send('You need to be an admin or role manager to use this command.')

const avatar = `https://cdn.discordapp.com/attachments/515307677656678420/557050444954992673/Generic5.png`;
const name2 = "SYNTHIBUTWORSE-1.0WOCMD";

let woaID = message.mentions.channels.first(); 
if(!woaID) return message.channel.send("Channel is nonexistant or command was not formatted properly. Please do s!woa #(channelname)"); 
let specifiedchannel = message.guild.channels.find(t => t.id == woaID.id);; 
specifiedchannel.send('test');

const hook = await woaID.createWebhook(name2, avatar).catch(error => console.log(error))
await hook.edit(name2, avatar).catch(error => console.log(error))
message.channel.send("Please do not tamper with the webhook or else the command implied before will no longer function with this channel.")

setTimeout(function(){
    message.channel.send('Please wait...');
  }, 10);
setTimeout(function(){
var role = message.guild.createRole({
    name: `Synthibutworse marker ${woaID.name} v1.0`,
    color: 0xcc3b3b,}).catch(console.error);

if(role.name == "Synthibutworse marker") {
  role.setMentionable(false, 'SBW Ping Set.')
  role.setPosition(10)
  role.setPermissions(['CREATE_INSTANT_INVITE', 'SEND_MESSAGES'])
    .then(role => console.log(`Edited role`))
    .catch(console.error)};
}, 20);

var sbwrID = member.guild.roles.find(`Synthibutworse marker ${woaID} v1.0`);
let specifiedrole = message.guild.roles.find(r => r.id == sbwrID.id)

setTimeout(function(){
      message.channel.send('Created Role... Please wait.');
}, 100);

message.guild.specifiedchannel.replacePermissionOverwrites({
  overwrites: [
    {
       id: specifiedrole,
       denied: ['SEND_MESSAGES'],
       allowed: ['VIEW_CHANNEL'],
    },
  ],
    reason: 'Needed to change permissions'
  });

var member = client.user

var bot = message.client
bot.on('message', function(message) { {
    if(message.channel.id == sbwrID.id) {
let bannedRole = message.guild.roles.find(role => role.id === specifiedrole);
message.member.addRole(bannedRole);
  }
}})

}};
module.exports = woa;

Я ожидаю команду без TypeError и команду, способную создать роль и webhook (длямаркер), и роль устанавливается автоматически, так что пользователь, имеющий эту роль, не сможет выступать на канале, а тот, кто говорит на канале, получит роль.Фактический результат - TypeError: Cannot read property 'guild' of undefined, но роль и веб-крючок созданы.

1 Ответ

0 голосов
/ 20 апреля 2019

У вас есть var sbwrID = member.guild... Вы не определили участника. Используйте message.member.guild...

Вы можете настроить линтер (https://discordjs.guide/preparations/setting-up-a-linter.html) для автоматического поиска этих проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...