Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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
            });
        }