Как избавиться от «неопределенного» в Discord embeds - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь сделать так, чтобы вывод этой вставки Discord не был "неопределенным" для Bot, Mute, and Deafen части вставки.

Я попытался изменить некоторую переменную на "let"или" const "Я вмешался в часть aboutuser, чтобы изменить ее на что-то другое.Я испортил часть кода if.

Вот код.

async run(message, args){
    if (message.channel instanceof discord.DMChannel) return message.channel.send('This command cannot be executed here.')
    else
    var serv = message.guild

    if (serv.explicitContentFilter == 0) {
        var eFC = "Don't Scan Any messages";
    }
    if (serv.explicitContentFilter == 1) {
        var eFC = "Scan for users without a role.";
    }
    if (serv.explicitContentFilter == 2) {
        var eFC = "Scan every message";
    }
///////////////////////////////////////////////////////////////////////////////////////////////////
    if (serv.verificationLevel == 4) {
        var verL = "Intense (Verified Account & Verified Phone linked)";
    } 

    if (serv.verificationLevel == 3) {
        var verL = "Secure (Verified Account & Guild member for 10+ minutes)";
    } 
    if (serv.verificationLevel == 2) {
        var verL = "Medium (Verified Account for 5 minutes+)";
    }    
    if (serv.verificationLevel == 1) {
        var verL = "Low (Verified Account)";
    } 
    if (serv.verificationLevel == 0) {
        var verL = "None (No Restriction)";
    }  
//////////////

if (serv.region == `brazil`) {
    var regio = "Brazil";
}  

if (serv.region == `eu-central`) {
    var regio = "Central Europe";
}  

if (serv.region == `hongkong`) {
    var regio = "Hong Kong";
}  

if (serv.region == `japan`) {
    var regio = "Japan";
}  

if (serv.region == `russia`) {
    var regio = "Russia";
}  

if (serv.region == `singapore`) {
    var regio = "Singapore";
}  

if (serv.region == `southafrica`) {
    var regio = "South Africa";
}  

if (serv.region == `sydney`) {
    var regio = "Sydney";
} 

if (serv.region == `us-central`) {
    var regio = "Central US";
}  

if (serv.region == `us-east`) {
    var regio = "East US";
}  

if (serv.region == `us-south`) {
    var regio = "South US";
}  

if (serv.region == `us-west`) {
    var regio = "West US";
}  

if (serv.region == `eu-west`) {
    var regio = "West Europe";
}  
//
if (serv.defaultMessageNotifications == `ALL`) {
    var defn = "Send all Messages";
}  

if (serv.defaultMessageNotifications == `MENTIONS`) {
    var defn = "Only @everyone";
} 

    var myInfo = new discord.RichEmbed()
        .setAuthor(`${serv.name}'s guild info`,`${message.guild.iconURL}`)
        .addField(`AFK Channel`,`${serv.afkChannel}`,true)
        .addField(`AFK Timeout`,`${serv.afkTimeout}s`,true)
        .addField(`Channels`,`${serv.channels.size}`,true)
        .addField(`Creation of Guild`,`${serv.createdAt}`,true)
        .addField(`Default Notification`, defn,true)
        .addField(`Explicit Content Filter Level`, eFC,true)
        .addField(`Guild ID`,`${serv.id}`,true)
        .addField(`How much members`,`${serv.memberCount}`,true)
        .addField(`Owner`,`${serv.owner}`,true)
        .addField(`Region`, regio,true)
        .addField('Roles', `Please do s!roles to find server roles!`, true)
        /* serv.roles.map(r => `${r}`).join(' | ') */
        .addField(`Verification Level`, verL,true)
        .setColor(0x511fdd)
        .setFooter('Aboutserver command')
        .setThumbnail(`${message.guild.iconURL}`)
        message.channel.sendEmbed(myInfo);

}

}

ожидаемый результат: бот скажет «да» или «нет» вместо неопределенного или «истина» или «ложь».Фактический результат: вывод бота просто не определен.

1 Ответ

1 голос
/ 08 июня 2019

Здесь происходит пара вещей, но давайте сосредоточимся на основной проблеме;как вы объявили свои переменные.

Проще говоря, к переменным можно обращаться только в той области, в которой они объявлены (область действия - это весь код между {}).

Я объясню это коротким примером на основе вашего кода.В ваших if заявлениях вы объявляете свои переменные, то есть они могут использоваться в пределах этих if операторов.Позже вы захотите использовать те же переменные вне оператора if и в вашем коде.Поскольку эти переменные не существуют в этой области, они не определены.

...
// At this point there is no variable 'eFC' available.

if (serv.explicitContentFilter == 0) {
    // Here you create the variable 'eFC' but it can only be used inside this scope, meaning it cannot be accessed outside the 'if' statement.
    var eFC = "Don't Scan Any messages";
}
if (serv.explicitContentFilter == 1) {
    // Here you create another variable with the same name, but it would end up being a different variable.
    var eFC = "Scan for users without a role.";
}

// Here there is still no variable 'eFC' available to us.
...

Простое решение: объявите переменные в другой области и присвойте значения позже.Ниже вы можете увидеть пример:

...
// Here we create a new variable called 'eFC' which can be used within this scope
var eFC;

if (serv.explicitContentFilter == 0) {
    // Here we assign a value to the previously defined variable
    eFC = "Don't Scan Any messages";
}
if (serv.explicitContentFilter == 1) {
    // Here we assign a value to the previously defined variable
    eFC = "Scan for users without a role.";
}

// Here we can use the variable 'eFC' which will have a value
console.log(eFC);
...

Если вы сделаете это для всех переменных, которые вы используете, код должен работать нормально.

Наконец, я хочу оставить вас с некоторой дополнительной помощью,Я вижу, что вы создали много-много-много if операторов для проверки, например, региона сервера или уровня проверки сервера.В Javascript (среди многих других языков программирования) есть идея под названием switch case, которая в основном делает то же самое, что и вы со всеми этими if утверждениями, но более аккуратным способом.Проверьте ссылку, я думаю, она поможет вам сделать ваш код более читабельным

...