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); } }
public async ValueTask HandleReactionRemoved(object sender, ReactionRemovedEventArgs e) { foreach (var service in ReactionRemovedServices) { await ExecuteAsync((service, e) => service.OnReactionRemoved(e), service, e).ConfigureAwait(false); } }
internal ButtonEventArgs(ReactionRemovedEventArgs e) : base(e.Client) { Message = e.Message; User = e.User; Reaction = e.Reaction; Emoji = e.Emoji; WasAdded = false; }
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); }
internal ButtonEventArgs(ReactionRemovedEventArgs e) { UserId = e.UserId; Message = e.Message; GuildId = e.GuildId; // Member isn't provided. Emoji = e.Emoji; WasAdded = false; }
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); }
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); } }
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;
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}`"); }
private Task OnReactionRemoved(object sender, ReactionRemovedEventArgs e) => ReactService.HandleReactRemovedAsync(this, e);