Сценарий
Это для диска-бота, использующего библиотеку DSharp. Теперь в этом случае, когда я сообщаю команду на Discord как !status testmenu
, содержимое контекста будет !status testmenu
. Поэтому, чтобы изолировать command
и prefix
от тела сообщения, я создаю новую строку message
, которая содержит только тело сообщения (testmenu
), как показано в этой строке.
string message = context.Message.Content.Replace(context.Message.Content.Substring(0, (context.Command.Name.Length + 1)), string.Empty);
Однако одновременно параметр content
также возвращает только одно тело сообщения. Так что прямо перед условием if
оба значения content
и message
равны, включая чувствительность к регистру.
Так что оба значения message
и content
имеют строковое значение testmenu
.
Причина дубликатов : контролируемое тестирование.
Проблема
Когда я запрашиваю базу данных с первой строкой, message
Я получаю нулевое возвращение. Однако, когда я запрашиваю базу данных со второй строкой content
(из параметра), я получаю соответствующую запись. Однако имейте в виду, опять же, что и message
, и content
- идентичные строки, включая чувствительность к регистру.
Я пытался поменять операторы запроса между собой, просто чтобы убедиться, что это не было последовательной ошибкой и не было. Это один и тот же результат каждый раз. Запрос со строкой параметра всегда возвращает значение, в то время как запрос со строкой message
возвращает ноль. И да, я действительно поставил точку останова прямо перед оператором if, чтобы убедиться, что строка message
не равна нулю и не была. Он имел то же значение, что и контекст.
[Command("status")]
public async Task Status(CommandContext context, string content)
{
string message = context.Message.Content.Replace(context.Message.Content.Substring(0, (context.Command.Name.Length + 1)), string.Empty);
Models.Menu SelectedMenu;
if (!String.IsNullOrEmpty(message))
{
//returns null
SelectedMenu = await _context.Menus.FirstOrDefaultAsync(m => m.Menu_Name.ToLower().Contains(message)).ConfigureAwait(false);
}
//returns appropriate record
var menu = await _context.Menus.FirstOrDefaultAsync(m => m.Menu_Name.ToLower().Contains(context.Message.Content)).ConfigureAwait(false);
await context.Channel.SendMessageAsync(menu.Status.ToString()).ConfigureAwait(false);
}