Пример #1
0
        public async Task HandleAsync(ReactionRemovedEventArgs args)
        {
            if (!(args.Channel is CachedTextChannel channel))
            {
                return;
            }

            var user = args.User.HasValue
                ? args.User.Value
                : await args.User.Downloadable.GetOrDownloadAsync() as IUser;

            if (user is null) // TODO: Remove after fix
            {
                await _logging.LogErrorAsync($"User with ID {args.User.Id} was null on reaction remove.", "ReactionRoles");

                return;
            }

            if (user.IsBot)
            {
                return;
            }

            using var ctx = new AdminDatabaseContext(_provider);
            if (await ctx.GetReactionRoleAsync(channel.Guild.Id, args.Message.Id, args.Emoji) is { } role)
            {
                await channel.Guild.RevokeRoleAsync(args.User.Id, role.Id);
            }
        }
Пример #2
0
 public async ValueTask HandleReactionRemoved(object sender, ReactionRemovedEventArgs e)
 {
     foreach (var service in ReactionRemovedServices)
     {
         await ExecuteAsync((service, e) => service.OnReactionRemoved(e), service, e).ConfigureAwait(false);
     }
 }
Пример #3
0
 internal ButtonEventArgs(ReactionRemovedEventArgs e) : base(e.Client)
 {
     Message  = e.Message;
     User     = e.User;
     Reaction = e.Reaction;
     Emoji    = e.Emoji;
     WasAdded = false;
 }
Пример #4
0
        private async Task Bot_ReactionRemoved(ReactionRemovedEventArgs e)
        {
            if (e.User.HasValue && e.User.Value.IsBot)
            {
                return;
            }

            await HandleReactionAsync(e.User.Id, e.Message.Id, e.Channel.Id, e.Emoji, false);
        }
Пример #5
0
 internal ButtonEventArgs(ReactionRemovedEventArgs e)
 {
     UserId  = e.UserId;
     Message = e.Message;
     GuildId = e.GuildId;
     // Member isn't provided.
     Emoji    = e.Emoji;
     WasAdded = false;
 }
Пример #6
0
        private async void OnReactRemoved(object sender, ReactionRemovedEventArgs e)
        {
            if (!IsDailyBotMessage(e.Channel, await e.Message.GetOrDownloadAsync()))
            {
                return;
            }

            await _dbService.RemoveRingFitReact(e.React.UserId, e.React.Emote.ToString(), e.React.MessageId);
        }
Пример #7
0
        private async Task HandleRaidResignAsync(ReactionRemovedEventArgs e)
        {
            if (!GetClassNames().Contains(e.Emoji.Name))
            {
                return;
            }
#if DEBUG
            if (e.User.Id != 89613772372574208)
            {
                return;
            }
#else
            if (e.Channel.Id == 793661221861064715)
            {
                return;
            }
#endif
            var dbContext = this.GetRequiredService <AbfDbContext>();

            await using (dbContext)
            {
                var(check, raid, user, character) = await CheckForRaidAsync(e.Message.Id.RawValue, e.User.Id.RawValue, e.Emoji.Name, dbContext);

                if (!check)
                {
                    return;
                }

                var charToRemove = raid.Participants.FirstOrDefault(p => p.CharacterId == character.Id);

                if (charToRemove is null)
                {
                    return;
                }

                raid.Participants.Remove(charToRemove);
                dbContext.Update(raid);

                await dbContext.SaveChangesAsync();

                var msg = await e.Message.FetchAsync() as RestUserMessage;

                await WowRaidModule.CreateRaidEmbedAsync(msg, raid);
            }
        }
Пример #8
0
        private async Task HandleRaidAbsentRemovedAsync(ReactionRemovedEventArgs e)
        {
            if (e.Emoji.ToString() != "👋")
            {
                return;
            }
#if DEBUG
            if (e.User.Id != 89613772372574208)
            {
                return;
            }
#else
            if (e.Channel.Id == 793661221861064715)
            {
                return;
            }
#endif
            var dbContext = this.GetRequiredService <AbfDbContext>();

            await using (dbContext)
            {
                var(_, raid, user, _) = await CheckForRaidAsync(e.Message.Id.RawValue, e.User.Id.RawValue, e.Emoji.Name, dbContext);

                if (raid is null || user is null)
                {
                    return;
                }

                var userParticipants = raid.Participants.Where(rp => rp.Character.Owner.Id == e.User.Id.RawValue);

                foreach (var participant in userParticipants)
                {
                    participant.IsAbsent = false;
                    dbContext.Update(participant);
                }
                await dbContext.SaveChangesAsync();

                var msg = await e.Message.FetchAsync() as RestUserMessage;

                await WowRaidModule.CreateRaidEmbedAsync(msg, raid);
            }
        }
 protected internal virtual ValueTask OnReactionRemoved(ReactionRemovedEventArgs e)
 => default;
Пример #10
0
        public async Task HandleAsync(ReactionRemovedEventArgs args)
        {
            if (!(args.Channel is CachedTextChannel channel))
            {
                return;
            }

            if (args.User.HasValue && args.User.Value.IsBot)
            {
                return;
            }

            using var ctx = new AdminDatabaseContext(_provider);
            var star = await ctx.GetSpecialEmojiAsync(channel.Guild.Id, EmojiType.Star);

            if (!args.Emoji.Equals(star))
            {
                return;
            }

            if (!(await ctx.GetLoggingChannelAsync(channel.Guild.Id, LogType.Starboard) is { } starboardChannel))
            {
                return;
            }

            var guild = await ctx.GetOrCreateGuildAsync(channel.Guild.Id);

            if (guild.BlacklistedStarboardIds.ContainsAny(channel.Id.RawValue, args.User.Id.RawValue))
            {
                return;
            }

            var message = args.Message.HasValue
                ? args.Message.Value as IUserMessage
                : await args.Message.Downloadable.DownloadAsync() as IUserMessage;

            if (message is null)
            {
                return;
            }

            if (!(await ctx.Starboard.FirstOrDefaultAsync(x => x.MessageId == args.Message.Id ||
                                                          x.EntryMessageId == args.Message.Id) is { } entry))
            {
                return;
            }

            if (!entry.Stars.Remove(args.User.Id))
            {
                return;
            }

            if (entry.Stars.Count == 0)
            {
                ctx.Starboard.Remove(entry);
                await ctx.SaveChangesAsync();

                await args.Client.DeleteMessageAsync(entry.EntryChannelId, entry.EntryMessageId);

                return;
            }

            ctx.Starboard.Update(entry);
            await ctx.SaveChangesAsync();

            await starboardChannel.ModifyMessageAsync(entry.EntryMessageId,
                                                      x => x.Content = $"{star} {entry.Stars.Count} `#{channel.Name}` {_localization.Localize(guild.Language, "info_id")}: `{message.Id}`");
        }
Пример #11
0
 private Task OnReactionRemoved(object sender, ReactionRemovedEventArgs e)
 => ReactService.HandleReactRemovedAsync(this, e);