private RaidLobby GetLobby(DiscordChannel channel, ref ulong originalMessageId) { RaidLobby lobby = null; if (channel.Id == _config.RaidLobbies.RaidLobbiesChannelId) { foreach (var item in _config.RaidLobbies.ActiveLobbies) { if (item.Value.LobbyMessageId == originalMessageId) { originalMessageId = item.Value.OriginalRaidMessageId; lobby = item.Value; break; } } } else { if (_config.RaidLobbies.ActiveLobbies.ContainsKey(originalMessageId)) { lobby = _config.RaidLobbies.ActiveLobbies[originalMessageId]; } else { lobby = new RaidLobby { OriginalRaidMessageId = originalMessageId, OriginalRaidMessageChannelId = channel.Id, Started = DateTime.Now }; _config.RaidLobbies.ActiveLobbies.Add(originalMessageId, lobby); } } return(lobby); }
private async Task <DiscordMessage> UpdateRaidLobbyMessage(RaidLobby lobby, DiscordChannel raidLobbyChannel, DiscordEmbed raidMessage) { _logger.Trace($"FilterBot::UpdateRaidLobbyMessage [RaidLobby={lobby.LobbyMessageId}, DiscordChannel={raidLobbyChannel.Name}, DiscordMessage={raidMessage.Title}]"); var coming = await GetUsernames(lobby.UsersComing); var ready = await GetUsernames(lobby.UsersReady); var msg = $"**Trainers on the way:**{Environment.NewLine}```{string.Join(Environment.NewLine, coming)} ```{Environment.NewLine}**Trainers at the raid:**{Environment.NewLine}```{string.Join(Environment.NewLine, ready)} ```"; var lobbyMessage = await raidLobbyChannel.GetMessage(lobby.LobbyMessageId); if (lobbyMessage != null) { var coordinates = Utils.GetLastLine(raidMessage.Description); var latitude = double.Parse(coordinates.Split(',')[0]); var longitude = double.Parse(coordinates.Split(',')[1]); var city = "Unknown"; var loc = _geofenceSvc.GetGeofence(new Location(latitude, longitude)); if (loc == null) { _logger.Error($"Failed to lookup city for coordinates {latitude},{longitude}..."); } city = loc.Name; msg = $"**City:** {city}\r\n{msg}"; await lobbyMessage.DeleteAsync(); lobbyMessage = null; } if (lobbyMessage == null) { lobbyMessage = await raidLobbyChannel.SendMessageAsync(msg, false, raidMessage); lobby.LobbyMessageId = lobbyMessage.Id; } _config.Save(); if (lobbyMessage == null) { _logger.Error($"Failed to set default raid reactions to message {lobby.LobbyMessageId}, couldn't find message..."); return(null); } lobby.LobbyMessageId = lobbyMessage.Id; return(lobbyMessage); }
private async Task <RaidLobbySettings> GetRaidLobbySettings(RaidLobby lobby, ulong originalMessageId, DiscordMessage message, DiscordChannel channel) { _logger.Trace($"FilterBot::GetRaidLobbySettings [OriginalMessageId={originalMessageId}, DiscordMessage={message.Content}, DiscordChannel={channel.Name}]"); var raidLobbyChannel = await _client.GetChannel(_config.RaidLobbies.RaidLobbiesChannelId); if (raidLobbyChannel == null) { _logger.Error($"Failed to retrieve the raid lobbies channel with id {_config.RaidLobbies.RaidLobbiesChannelId}."); return(null); } if (lobby == null) { _logger.Error($"Failed to find raid lobby, it may have already expired, deleting message with id {message.Id}..."); await message.DeleteAsync("Raid lobby does not exist anymore."); return(null); } var origChannel = await _client.GetChannel(lobby.OriginalRaidMessageChannelId); if (origChannel == null) { _logger.Error($"Failed to find original raid message channel with id {lobby.OriginalRaidMessageChannelId}."); return(null); } var raidMessage = await origChannel.GetMessage(originalMessageId); if (raidMessage == null) { _logger.Warn($"Failed to find original raid message with {originalMessageId}, searching server..."); raidMessage = await GetRaidMessage(_config.SponsoredRaids, originalMessageId); } _config.Save(); return(new RaidLobbySettings { OriginalRaidMessageChannel = origChannel, RaidMessage = raidMessage, RaidLobbyChannel = raidLobbyChannel }); }