Можно ли навсегда изменить Bool Value с помощью Async Task? - PullRequest
0 голосов
/ 01 мая 2019

Я работаю над Discord Bot, который позволит модераторам отзывать юзабилити функции (бросок костей). Моя цель состояла в том, чтобы иметь это, где, если bool a = true; roll the dice. bool a = false; deny. Модераторы могут изменить bool с помощью отдельной функции, в которой они могут изменить логическое значение a и оставить его таким.

Я пытался присвоить логическое значение отдельному классу и использовать get и set, но значение либо не меняется, либо сразу возвращается обратно.

[Command("diceRoll")]
[Summary("Turns on/off the ability to use the Dice Roll function")]
public async Task DiceRoll(string toggle)
{
    switch (toggle)
    {
        case "on":
        case "On":
        case "ON":
            diceToggle.DiceBool = true;
            await Context.Channel.SendMessageAsync("Dice Roll Function: ON");
            break;

        case "off":
        case "Off":
        case "OFF":
            diceToggle.DiceBool = false;
            await Context.Channel.SendMessageAsync("Dice Roll Function: OFF");
            break;

        default:
            await Context.Channel.SendMessageAsync("Dice Roll Function: ERROR");
            break;
    }
}

[Command("roll")]
[Summary("Dice Roll")]
public async Task Dice(int number)
{
    if (diceToggle.DiceBool == true)
    {
        int randNumber = rand.Next(1, number);
        if (randNumber == 8 || randNumber == 11 || randNumber == 18)
        { await Context.Channel.SendMessageAsync("You rolled an " + randNumber + "."); }
        else 
        { await Context.Channel.SendMessageAsync("You rolled a " + randNumber + "."); }
    }
    else if (diceToggle.DiceBool == false)
    {
        await Context.Channel.SendMessageAsync("This feature has been disabled.");
    }
    else
    {
        await Context.Channel.SendMessageAsync("Something broke, please fix.");
        }
    }
}

public class Game
{
    private bool diceBool;
    public bool DiceBool
    {
        get { return diceBool; }
        set
        {
            if (diceBool != value)
            {
                diceBool = value;
            }
        }        
    }
}

Я ожидаю, что при вызове команды "diceRoll on / off" команда "roll" перестанет работать или снова заработает. В настоящее время команда вызывается, но логическое значение не изменяется или не изменяется.

1 Ответ

1 голос
/ 01 мая 2019

Причина, по которой вы не можете «сохранить» значение, заключается в том, как работают модули в Discord.Net. Подобно ASP.NET, модули являются временными, то есть они уничтожаются из памяти после выполнения. Пожалуйста, проверьте полную информацию здесь

...