Команда Discord останавливается после попытки прочитать текстовый файл - PullRequest
0 голосов
/ 22 июня 2019

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

Я попытался поместить потоковое считывающее устройство в отдельную функцию. Я пытался выполнить функцию перед выполнением команды и получить данные через строку

public class Commands : ModuleBase<SocketCommandContext>
{
    [Command("create")]
    [Summary("Creates a new group")]
    public async Task Create(IRole role)
    {
        //check for duplicates
        StreamReader reader = new StreamReader(Path.Combine(Directory.GetCurrentDirectory(), "Data.txt"));
        //Code will not go pass this line
        Console.WriteLine(reader.ReadToEnd());
        await ReplyAsync("Making " + role + " into a group");
    }
}

Я хочу иметь возможность читатьфайл (который я буду использовать для проверки дубликатов роли) и продолжения работы с командой, когда бот скажет «превращение роли в группу», но когда я выполню команду, бот ничего не скажет и код остановитсяпосле попытки создания потокового ридера.Однако бот продолжает работать без ошибок, так как он просто останавливает выполнение команды.

1 Ответ

0 голосов
/ 22 июня 2019

Во-первых, в пространстве имен System.IO вы можете использовать вспомогательные методы, чтобы легко прочитать весь файл и создать строку с его содержимым, все в одном программном выражении.Это избавляет вас от необходимости записывать весь процесс потоковой передачи, что, я думаю, будет полезно для вашей цели.

string rawTextFromFile = File.ReadAllText(pathToFileAsString);

Если вы хотите, чтобы каждая строка представляла собой отдельный индекс в массиве строк,это тоже функция для этого:

string[] rawLinesFromFile = File.ReadAllLines(pathToFileAsString);

Если мои решения вам не помогут или у вас возникли дополнительные проблемы с вашим ботом, вы можете использовать блок try-catch и вы можете увидеть, как проблема появляетсяв журнале вашей консоли.Кроме того, это предотвратит сбой бота, поскольку он обработает ошибку и продолжит работу с тем, что будет дальше в его стеке вызовов.

try
{
    (your code here)
}
catch(e)
{
    Console.WriteLine(e.message);
}
...