Exemplo n.º 1
0
        private async Task ReactiveRegistration(Cacheable <IUserMessage, ulong> messageCache, ISocketMessageChannel channel, SocketReaction reaction)
        {
            if (reaction.Emote.Name != registrationConfirmEmoji.Name)
            {
                return;
            }
            if (!reaction.User.IsSpecified)
            {
                return;
            }
            if (!(channel is SocketTextChannel guildChannel))
            {
                return;
            }
            var user = reaction.User.Value;

            if (user.IsBot || user.IsWebhook)
            {
                return;
            }
            var config = Database.Load <ReactiveRegistrationMessage>(ReactiveRegistrationMessage.DocumentName(guildChannel.Guild.Id));

            if (config == null)
            {
                return;
            }
            if (messageCache.Id != config.MessageId)
            {
                return;
            }

            var competition = GetOrCreateCompetition(guildChannel.Guild.Id);

            if (user.IsRegistered(this, out var player))
            {
                return;
            }

            var limit = Premium.GetRegistrationLimit(Client, guildChannel.Guild);

            if (limit < competition.RegistrationCount)
            {
                var maxErrorMsg = await channel.SendMessageAsync($"{user.Mention} - This server has exceeded the maximum registration count of {limit}, it must be upgraded to premium to allow additional registrations");

                var errTask = Task.Run(async() =>
                {
                    await Task.Delay(5000);
                    await maxErrorMsg.DeleteAsync();
                });
                return;
            }
            player = CreatePlayer(guildChannel.Guild.Id, user.Id, user.Username);
            competition.RegistrationCount++;
            SaveCompetition(competition);

            var responses = await UpdateUserAsync(competition, player, user as SocketGuildUser);

            var responseMsg = await guildChannel.SendMessageAsync($"{user.Mention} - " + competition.FormatRegisterMessage(player) + $"\n{string.Join("\n", responses)}");

            var resTask = Task.Run(async() =>
            {
                await Task.Delay(5000);
                await responseMsg.DeleteAsync();
            });
        }
Exemplo n.º 2
0
        public virtual async Task RegisterAsync(SocketGuildUser regUser, [Remainder] string name = null)
        {
            if (regUser == null)
            {
                return;
            }

            if (name == null)
            {
                name = regUser.Username;
            }

            using (var db = new Database())
            {
                var comp = db.GetOrCreateCompetition(Context.Guild.Id);

                if (!(regUser as SocketGuildUser).IsRegistered(out var user))
                {
                    var registered = ((IQueryable <Player>)db.Players).Count(x => x.GuildId == Context.Guild.Id);
                    var limit      = Premium.GetRegistrationLimit(Context.Guild.Id);
                    if (limit < registered)
                    {
                        await SimpleEmbedAsync($"This server has exceeded the maximum registration count of {limit}, it must be upgraded to premium to allow additional registrations, you can get premium by subscribing at {Premium.PremiumConfig.AltLink} for support and to claim premium, a patron must join the ELO server: {Premium.PremiumConfig.ServerInvite}", Color.DarkBlue);

                        return;
                    }

                    user        = new Player(regUser.Id, Context.Guild.Id, name);
                    user.Points = comp.DefaultRegisterScore;
                    db.Players.Add(user);
                    db.SaveChanges();
                }
                else
                {
                    if (!comp.AllowReRegister)
                    {
                        await SimpleEmbedAndDeleteAsync("You are not allowed to re-register.", Color.Red);

                        return;
                    }

                    user.DisplayName = name;
                    db.Players.Update(user);
                    db.SaveChanges();
                }
                if (ELO.Extensions.Extensions.RegistrationCache.TryGetValue(Context.Guild.Id, out var gCache))
                {
                    if (gCache.ContainsKey(regUser.Id))
                    {
                        gCache[regUser.Id] = true;
                    }
                }
                var ranks     = db.Ranks.Where(x => x.GuildId == Context.Guild.Id).ToArray();
                var responses = await UserService.UpdateUserAsync(comp, user, ranks, regUser);

                await SimpleEmbedAsync(comp.FormatRegisterMessage(user), Color.Blue);

                if (responses.Count > 0)
                {
                    await SimpleEmbedAsync(string.Join("\n", responses), Color.Red);
                }
            }
        }
        private async Task Client_ReactionAdded(Cacheable <IUserMessage, ulong> messageCache, ISocketMessageChannel channel, SocketReaction reaction)
        {
            if (reaction.Emote.Name != registrationConfirmEmoji.Name)
            {
                return;
            }
            if (!reaction.User.IsSpecified)
            {
                return;
            }
            if (!(channel is SocketTextChannel guildChannel))
            {
                return;
            }
            var user = reaction.User.Value;

            if (user.IsBot || user.IsWebhook)
            {
                return;
            }

            var _ = Task.Run(async() =>
            {
                using (var db = new Database())
                {
                    var config = db.GetOrCreateCompetition(guildChannel.Guild.Id);
                    if (config == null)
                    {
                        return;
                    }
                    if (messageCache.Id != config.ReactiveMessage)
                    {
                        return;
                    }

                    if ((user as SocketGuildUser).IsRegistered(out var player))
                    {
                        return;
                    }

                    var limit      = Premium.GetRegistrationLimit(guildChannel.Guild.Id);
                    var registered = ((IQueryable <Player>)db.Players).Count(x => x.GuildId == guildChannel.Guild.Id);
                    if (limit < registered)
                    {
                        var maxErrorMsg = await channel.SendMessageAsync($"{user.Mention} - This server has exceeded the maximum registration count of {limit}, it must be upgraded to premium to allow additional registrations").ConfigureAwait(false);
                        var errTask     = Task.Run(async() =>
                        {
                            await Task.Delay(5000);
                            await maxErrorMsg.DeleteAsync();
                        });
                        return;
                    }
                    player = new Player(guildChannel.Guild.Id, user.Id, user.Username);
                    db.Add(player);
                    db.SaveChanges();

                    var responses = await UserService.UpdateUserAsync(config, player, db.Ranks.Where(x => x.GuildId == guildChannel.Guild.Id).ToArray(), user as SocketGuildUser).ConfigureAwait(false);

                    var responseMsg = await guildChannel.SendMessageAsync($"{user.Mention} - " + config.FormatRegisterMessage(player) + $"\n{string.Join("\n", responses)}");
                    var resTask     = Task.Run(async() =>
                    {
                        await Task.Delay(5000);
                        await responseMsg.DeleteAsync().ConfigureAwait(false);
                    });
                }
            });
        }