internal async Task ReactionAddedAsync(Cacheable <IUserMessage, ulong> cacheable, ISocketMessageChannel channel, SocketReaction reaction) { if (reaction.Emote.Name != "⭐") { return; } var guild = (reaction.Channel as SocketGuildChannel).Guild; var message = await cacheable.GetOrDownloadAsync(); var config = GuildHandler.GetGuild(guild.Id); var starboardChannel = guild.GetTextChannel(config.Starboard.TextChannel) as IMessageChannel; if (message == null || starboardChannel == null || reaction.Channel.Id == config.Starboard.TextChannel) { return; } var embed = GetEmbed(Paint.Yellow) .WithAuthor(message.Author.Username, message.Author.GetAvatarUrl()) .WithFooter(message.Timestamp.ToString("F")); var reactionCount = message.Reactions.Count(x => x.Key.Name == "⭐"); if (!string.IsNullOrWhiteSpace(message.Content)) { embed.WithDescription(message.Content); } if (message.Attachments.FirstOrDefault() != null) { embed.WithImageUrl(message.Attachments.FirstOrDefault().Url); } var exists = config.Starboard.StarboardMessages.FirstOrDefault(x => x.MessageId == message.Id); if (config.Starboard.StarboardMessages.Contains(exists)) { exists.Stars++; var sMsg = await starboardChannel.GetMessageAsync(exists.StarboardMessageId, CacheMode.AllowDownload) as IUserMessage; await sMsg.ModifyAsync(x => { x.Content = $"{StringHelper.Star(exists.Stars)}{exists.Stars} {(reaction.Channel as ITextChannel).Mention} ID: {exists.StarboardMessageId}"; x.Embed = embed.Build(); }); } else { var msg = await starboardChannel.SendMessageAsync($"{StringHelper.Star(reactionCount)}{reactionCount} {(reaction.Channel as ITextChannel).Mention} ID: {reaction.MessageId}", embed : embed.Build()); config.Starboard.StarboardMessages.Add(new StarboardMessage { Stars = 1, MessageId = message.Id, StarboardMessageId = msg.Id, AuthorId = message.Author.Id, ChannelId = message.Channel.Id }); } GuildHandler.Save(config); }
internal async Task UserLeftAsync(SocketGuildUser user) { var config = GuildHandler.GetGuild(user.Guild.Id); string message = !config.LeaveMessages.Any() ? $"**{user.Username}** left the server. {GetEmote(EmoteType.Sad)}" : StringHelper.Replace(config.LeaveMessages[Random.Next(config.LeaveMessages.Count)], user.Guild.Name, user.Username); var channel = user.Guild.GetTextChannel(config.LeaveChannel); if (channel != null) { await channel.SendMessageAsync(message).ConfigureAwait(false); } }
internal async Task UserLeftAsync(SocketGuildUser user) { var config = GuildHandler.GetGuild(user.Guild.Id); string message = !config.LeaveMessages.Any() ? Translator.GetMessage("default-leave", config.Locale, user.Username) : StringHelper.Replace(config.LeaveMessages[Random.Next(config.LeaveMessages.Count)], user.Guild.Name, user.Username); var channel = user.Guild.GetTextChannel(config.LeaveChannel); if (channel != null) { await channel.SendMessageAsync(message).ConfigureAwait(false); } // TODO: logging? }
internal async Task MessageDeletedAsync(Cacheable <IMessage, ulong> cacheable, ISocketMessageChannel channel) { var config = GuildHandler.GetGuild((channel as SocketGuildChannel).Guild.Id); var message = await cacheable.GetOrDownloadAsync(); if (message == null || config == null || !config.Mod.LogDeletedMessages || CommandExecuted) { return; } config.DeletedMessages.Add(new MessageWrapper { ChannelId = channel.Id, MessageId = message.Id, AuthorId = message.Author.Id, DateTime = message.Timestamp.DateTime, Content = message.Content ?? message.Attachments.FirstOrDefault()?.Url }); GuildHandler.Save(config); }
internal Task HandleMessage(SocketMessage message) { var guild = (message.Channel as SocketGuildChannel).Guild; var config = GuildHandler.GetGuild(guild.Id); if (!(message is SocketUserMessage userMessage) || !(message.Author is SocketGuildUser user)) { return(Task.CompletedTask); } if (userMessage.Source != MessageSource.User || userMessage.Author.IsBot || ConfigHandler.Config.UserBlacklist.Contains(user.Id) || ConfigHandler.Config.ServerBlacklist.Contains(guild.Id) || GuildHelper.GetProfile(guild.Id, userMessage.Author.Id).IsBlacklisted) { return(Task.CompletedTask); } _ = EventHelper.XPHandler(userMessage, config); _ = EventHelper.ModeratorAsync(userMessage, config); _ = EventHelper.ExecuteTag(userMessage, config); _ = EventHelper.AFKHandlerAsync(userMessage, config); return(Task.CompletedTask); }
internal async Task UserJoinedAsync(SocketGuildUser user) { var config = GuildHandler.GetGuild(user.Guild.Id); string message = !config.JoinMessages.Any() ? $"Welcome **{user.Mention}** to the server. {GetEmote(EmoteType.Happy)}" : StringHelper.Replace(config.JoinMessages[Random.Next(config.JoinMessages.Count)], user.Guild.Name, user.Mention); var channel = user.Guild.GetTextChannel(config.JoinChannel); if (channel != null) { await channel.SendMessageAsync(message).ConfigureAwait(false); } var role = user.Guild.GetRole(config.Mod.JoinRole); if (role != null) { await user.AddRoleAsync(role).ConfigureAwait(false); } if (config.Mod.MutedUsers.Contains(user.Id)) { var muteRole = user.Guild.GetRole(config.Mod.MuteRole); await user.AddRoleAsync(muteRole).ConfigureAwait(false); } }
internal async Task UserJoinedAsync(SocketGuildUser user) { var config = GuildHandler.GetGuild(user.Guild.Id); string message = !config.JoinMessages.Any() ? Translator.GetMessage("default-join", config.Locale, user.Mention) : StringHelper.Replace(config.JoinMessages[Random.Next(config.JoinMessages.Count)], user.Guild.Name, user.Mention); var channel = user.Guild.GetTextChannel(config.JoinChannel); if (channel != null) { await channel.SendMessageAsync(message).ConfigureAwait(false); } var joinRole = user.Guild.GetRole(config.Mod.JoinRole); if (joinRole != null) { await user.AddRoleAsync(joinRole).ConfigureAwait(false); } if (config.Mod.MutedUsers.Contains(user.Id)) { var muteRole = user.Guild.GetRole(config.Mod.MuteRole); await user.AddRoleAsync(muteRole).ConfigureAwait(false); } // TODO: logging? }