Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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?
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
            }
        }
Exemplo n.º 7
0
        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?
        }