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(); }); }
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); }); } }); }