Exemple #1
0
        //private async Task ProcessRaidLobbyReactionDM(DiscordUser user, DiscordChannel channel, DiscordMessage message, DiscordEmoji emoji)
        //{
        //    if (SupportersOnly)
        //    {
        //        var hasPrivilege = await _client.IsSupporterOrHigher(user.Id, _config);
        //        if (!hasPrivilege)
        //        {
        //            await message.RespondAsync($"{user.Mention} does not have the supporter role assigned.");
        //            return;
        //        }
        //    }

        //    var origMessageId = Convert.ToUInt64(Utils.GetBetween(message.Content, "#", "#"));
        //    var lobby = GetLobby(channel, ref origMessageId);

        //    var settings = await GetRaidLobbySettings(lobby, origMessageId, message, channel);
        //    if (settings == null)
        //    {
        //        _logger.Error($"Failed to find raid lobby settings for original raid message id {origMessageId}.");
        //        return;
        //    }

        //    await message.DeleteReactionAsync(emoji, user);

        //    var lobMessage = default(DiscordMessage);
        //    var embedMsg = settings.RaidMessage?.Embeds[0];

        //    switch (emoji.Name)
        //    {
        //        //case "1⃣":
        //        //    break;
        //        //case "2⃣":
        //        //    break;
        //        //case "3⃣":
        //        //    break;
        //        //case "4⃣":
        //        //    break;
        //        case "5⃣":
        //            lobby.UsersComing[user.Id].Eta = RaidLobbyEta.Five;
        //            lobby.UsersComing[user.Id].EtaStart = DateTime.Now;
        //            lobMessage = await UpdateRaidLobbyMessage(lobby, settings.RaidLobbyChannel, embedMsg);
        //            await message.DeleteAllReactionsAsync();
        //            break;
        //        case "🔟":
        //            lobby.UsersComing[user.Id].Eta = RaidLobbyEta.Ten;
        //            lobby.UsersComing[user.Id].EtaStart = DateTime.Now;
        //            lobMessage = await UpdateRaidLobbyMessage(lobby, settings.RaidLobbyChannel, embedMsg);
        //            await message.DeleteAllReactionsAsync();
        //            break;
        //        case "❌":
        //            if (!lobby.UsersComing.ContainsKey(user.Id))
        //            {
        //                lobby.UsersComing.Remove(user.Id);
        //                lobMessage = await UpdateRaidLobbyMessage(lobby, settings.RaidLobbyChannel, embedMsg);
        //            }
        //            break;
        //    }
        //    _config.RaidLobbies.ActiveLobbies[origMessageId] = lobby;
        //    _config.Save();
        //}

        private async Task ProcessRaidLobbyReaction(DiscordUser user, DiscordChannel channel, DiscordMessage message, DiscordEmoji emoji)
        {
            _logger.Trace($"RaidLobbyManager::ProcessRaidLobbyReaction [DiscordUser={user.Username}, DiscordChannel={channel.Name}, DiscordMessage={message.Content}, DiscordEmoji={emoji.Name}]");

            var isLobbyChannel = (await GetLobbyCategory()).Children.FirstOrDefault(x => x.Id == channel.Id) != null;

            if (!(_config.RaidChannelIdPool.Contains(channel.Id) || isLobbyChannel))
            {
                return;
            }

            var embed = await channel.GetEmbedMessage(message.Id);

            if (embed == null)
            {
                _logger.Warn($"Failed to get embed message.");
                return;
            }

            await _client.SetDefaultRaidReactions(message, false);

            var lobby = LobbyFromTitle(embed.Title);

            if (lobby.Gym?.RaidLevel == 0)
            {
                _logger.Warn($"Raid at gym '{embed.Title}' is over and doesn't exist.");
                return;
            }

            if (!_config.RaidLobbies.ContainsKey(lobby.ChannelName))
            {
                _config.RaidLobbies.Add(lobby.ChannelName, lobby);
            }

            lobby = _config.RaidLobbies[lobby.ChannelName];
            if (string.IsNullOrEmpty(lobby.StartedBy))
            {
                lobby.StartedBy = $"{user.Username}#{user.Discriminator}";
                lobby.CreatedAt = DateTime.Now;
            }

            var lobbyChannel = await CreateLobbyChannel(lobby);

            if (lobbyChannel == null)
            {
                _logger.Warn($"Failed to create or get existing lobby channel for gym {lobby.Gym.Name}.");
                return;
            }
            _logger.Debug($"LOBBY CHANNEL: {lobbyChannel.Name}");

            switch (emoji.Name)
            {
            case "➡":     //Otw
                await CreatePinnedLobbyMessage(lobby, lobbyChannel, user, true);

                break;

            case "✅":     //Here
                await CreatePinnedLobbyMessage(lobby, lobbyChannel, user, false);

                break;

            case "❌":     //Remove
                var raidLobby = _config.RaidLobbies[lobby.ChannelName];
                var result    = lobby.Users.RemoveAll(x => string.Compare(x.Username, $"{user.Username}#{user.Discriminator}", true) == 0);
                if (result > 0)
                {
                    await CreatePinnedLobbyMessage(lobby, lobbyChannel, null, false);
                }
                break;

            case "🔄":     //Refresh
                await CreatePinnedLobbyMessage(lobby, lobbyChannel, null, false);

                break;
            }

            _config.Save(Strings.ConfigFileName);
        }