private Task MessageReceived(SocketMessage msg) { if (msg.Content.StartsWith(_MSG_PREFIX)) { lock (_lock) { String content = msg.Content; int plen = _MSG_PREFIX.Length; content = content.Substring(plen, content.Length - plen); _msgQueue.Enqueue(new DiscordMessage(msg.Author.Id, content)); } string user = msg.Author.Username; string discrim = msg.Author.Discriminator; Console.WriteLine($"--> SERVER: Queued Discord message (from {user}#{discrim})"); } else if (msg.Content.StartsWith(_ADMIN_PREFIX)) { string friendlyName = DiscordUtil.GetUniqueName(msg.Author); if (!_adminList.IsAdmin(msg.Author)) { Console.WriteLine($"--> SERVER: Requested admin command but was rejected ({friendlyName})"); return(Task.CompletedTask); } String content = msg.Content; int plen = _ADMIN_PREFIX.Length; content = content.Substring(plen, content.Length - plen); string[] tokens = content.Split(" "); if (tokens.Length > 1) { if (tokens[0] == "list" && tokens[1] == "admins") { string adminStr = String.Join(", ", _adminList.GetAdmins()); Console.WriteLine($"--> SERVER: Requested admins ({friendlyName})"); Console.WriteLine($"--> SERVER: {adminStr}"); msg.Channel.SendMessageAsync($"Current users with admin permissions are: {adminStr}"); } else if (tokens[0] == "add" && tokens[1] == "admin") { var user = msg.MentionedUsers.FirstOrDefault(); if (user == null) { Console.WriteLine("--> SERVER: Unknown user."); return(Task.CompletedTask); } bool success = _adminList.AddAdmin(user); Console.WriteLine($"--> SERVER: Giving admin to {friendlyName}"); Console.WriteLine($"--> SERVER: {_adminList.Message}"); if (success) { msg.Channel.SendMessageAsync($"I've added {friendlyName} as an admin."); } else { msg.Channel.SendMessageAsync($"I couldn't add that user as an admin: {_adminList.Message}"); } } else if (tokens[0] == "remove" && tokens[1] == "admin") { var user = msg.MentionedUsers.FirstOrDefault(); if (user == null) { Console.WriteLine("--> SERVER: Unknown user."); return(Task.CompletedTask); } bool success = _adminList.RemoveAdmin(user); Console.WriteLine($"--> SERVER: Revoking admin from {friendlyName}"); Console.WriteLine($"--> SERVER: {_adminList.Message}"); if (success) { msg.Channel.SendMessageAsync($"I've removed {friendlyName} as an admin."); } else { msg.Channel.SendMessageAsync($"I couldn't remove that user as an admin: {_adminList.Message}"); } } } else { Console.WriteLine("--> SERVER: Unknown admin command received."); } } return(Task.CompletedTask); }