2017-02-20 14 views
0

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

Вот код, который я пробовал.

public static string fileName1 = "banned_words.txt"; 
if (e.Message.RawText.Contains(File.ReadLines(fileName1).ToString())) 
    { 
    e.Message.Delete(); 
    Console.WriteLine(e.User.Name + " said " + e.Message.RawText.Clone()); 
    e.Channel.SendMessage(e.User.Mention + " Please do not use that language!"); 
    } 
+0

Как это сделать * не работает *? Вызывает ли это исключение или просто не печатает сообщение? –

+0

Как выравнивается содержимое файла? что одно выровненное пространство разделено? –

ответ

0

Вы спрашиваете, если сообщение приходит в содержит список целых banned_words как IEnumerable строк преобразуются в строку, которая, вероятно, является буквальным значением «IEnumerable``String» или аналогичное представление.

Вы должны вместо этого смотреть через каждую строку в файле banned_words.txt по одному за раз, и проверьте, содержит ли сообщение им по одному:

foreach (string badWord in File.ReadLines(fileName1)) { 
    if (e.Message.RawText.Contains(badWord)) { 
     //Do stuff 
    } 
} 
+0

Хорошо, я должен был это сделать, есть ли способ игнорировать регистр? –

+0

Да, вы можете указать другое сравнение строк: 'if (e.Message.RawText.Contains (badWord, StringComparison.InvariantCultureIgnoreCase)) {' – Tim

0

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

foreach (string badWord in File.ReadLines(fileName1)) { 
if (e.Message.RawText.ToUpper().Contains(badWord.ToUpper())) { 
    //Do stuff 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^