예제 #1
0
        /// <summary>
        /// Process emote mode for a message.
        /// </summary>
        /// <param name="message">Message to process.</param>
        /// <returns>True if message was deleted.</returns>
        private static async Task <bool> ProcessMessageEmotesAsync(SocketUserMessage message)
        {
            (EmoteModeTracker.Mode mode, object args) = EmoteModeTracker.GetMode(message.Channel.Id);

            if (mode != EmoteModeTracker.Mode.Off)
            {
                if (message.Attachments.Count > 0)
                {
                    return(await DeleteMessageAsync());
                }

                List <EmoteOrEmoji> emotes = message.Content.ParseDiscordMessageEmotes();

                if (mode == EmoteModeTracker.Mode.TextOnly)
                {
                    if (emotes.Count > 0)
                    {
                        return(await DeleteMessageAsync());
                    }
                }
                else if (mode == EmoteModeTracker.Mode.EmoteOnly)
                {
                    string content = message.Content;

                    foreach (EmoteOrEmoji emote in emotes)
                    {
                        content = content.Replace(emote.ToString(), "");
                    }

                    if (!string.IsNullOrWhiteSpace(content))
                    {
                        return(await DeleteMessageAsync());
                    }
                }
                else if (mode == EmoteModeTracker.Mode.Exactly)
                {
                    if (args is string argString)
                    {
                        if (!string.Equals(message.Content, argString, StringComparison.InvariantCultureIgnoreCase))
                        {
                            return(await DeleteMessageAsync());
                        }
                    }
                }

                async Task <bool> DeleteMessageAsync()
                {
                    await message.DeleteAsync();

                    if (EmoteModeTracker.ShouldSendNotification(message.Channel.Id))
                    {
                        await message.Channel.SendMessageAsync($"The channel is currently in **{mode.Humanize().ToLower()}** mode.");
                    }

                    return(true);
                }
            }

            return(false);
        }
예제 #2
0
        private static async Task ReactionAdded(Cacheable <IUserMessage, ulong> message, ISocketMessageChannel channel, SocketReaction reaction)
        {
            // BongBot
            //try {
            //    if (reaction.User.IsSpecified && reaction.User.Value.Id == 735232851431260290 && message.HasValue) {
            //        _ = message.Value.AddReactionAsync(reaction.Emote);
            //        LoggingManager.Log.Debug($"Reacted to BongBot {reaction.Emote}");
            //    }
            //} catch (Exception ex) {
            //    LoggingManager.Log.Error(ex);
            //}

            // Bong trap
            try {
                if (BongTrapMessageId.HasValue && message.Id == BongTrapMessageId && reaction.User.IsSpecified && reaction.User.Value is SocketGuildUser socketUser)
                {
                    Random rand = new Random();
                    if (!string.IsNullOrEmpty(socketUser.Nickname))
                    {
                        string scrambledNick = new string(socketUser.Nickname.ToCharArray().OrderBy(s => (rand.Next(2) % 2) == 0).ToArray());
                        _ = socketUser.ModifyAsync(x => x.Nickname = scrambledNick);
                    }
                    else
                    {
                        string scrambledUsername = new string(socketUser.Username.ToCharArray().OrderBy(s => (rand.Next(2) % 2) == 0).ToArray());
                        _ = socketUser.ModifyAsync(x => x.Nickname = scrambledUsername);
                    }
                }
            } catch (Exception ex) {
                LoggingManager.Log.Error(ex);
            }

            // Emote mode
            (EmoteModeTracker.Mode mode, object _) = EmoteModeTracker.GetMode(channel.Id);

            if (mode == EmoteModeTracker.Mode.TextOnly)
            {
                if (message.HasValue & reaction.User.IsSpecified)
                {
                    if (WubbysFunHouse.IsDiscordOrTwitchStaff(reaction.User.Value))
                    {
                        return;
                    }

                    await message.Value.RemoveReactionAsync(reaction.Emote, reaction.User.Value);
                }
            }
        }
예제 #3
0
파일: Tools.cs 프로젝트: Xathz/Head-Non-Sub
        public async Task EmoteMode(string mode = "", [Remainder] string message = "")
        {
            if (mode == "off")
            {
                EmoteModeTracker.RemoveMode(Context.Channel.Id);

                EmbedBuilder builder = new EmbedBuilder()
                {
                    Color       = new Color(Constants.GeneralColor.R, Constants.GeneralColor.G, Constants.GeneralColor.B),
                    Title       = "Emote Mode ● None",
                    Description = "This channel has returned to normal."
                };

                await LogMessageEmbedAsync($"Emote mode executed `@{Context.Guild.CurrentUser} emotemode off`", "**Mode:** Off");
                await BetterReplyAsync(builder.Build(), parameters : mode);
            }
            else if (mode == "textonly")
            {
                EmoteModeTracker.SetMode(Context.Channel.Id, EmoteModeTracker.Mode.TextOnly);

                EmbedBuilder builder = new EmbedBuilder()
                {
                    Color       = new Color(Constants.GeneralColor.R, Constants.GeneralColor.G, Constants.GeneralColor.B),
                    Title       = "Emote Mode ● Text Only",
                    Description = "All messages with emotes/emoji will be deleted."
                };

                await LogMessageEmbedAsync($"Emote mode executed `@{Context.Guild.CurrentUser} emotemode textonly`", "**Mode:** Text Only");
                await BetterReplyAsync(builder.Build(), parameters : mode);
            }
            else if (mode == "emoteonly")
            {
                EmoteModeTracker.SetMode(Context.Channel.Id, EmoteModeTracker.Mode.EmoteOnly);

                EmbedBuilder builder = new EmbedBuilder()
                {
                    Color       = new Color(Constants.GeneralColor.R, Constants.GeneralColor.G, Constants.GeneralColor.B),
                    Title       = "Emote Mode ● Emote Only",
                    Description = "All messages with text will be deleted."
                };

                await LogMessageEmbedAsync($"Emote mode executed `@{Context.Guild.CurrentUser} emotemode emoteonly`", "**Mode:** Emote Only");
                await BetterReplyAsync(builder.Build(), parameters : mode);
            }
            else if (mode == "exactly")
            {
                if (string.IsNullOrWhiteSpace(message))
                {
                    await BetterReplyAsync($"{Context.User.Mention} The exact message can not be blank!", parameters : mode);

                    return;
                }

                EmoteModeTracker.SetMode(Context.Channel.Id, EmoteModeTracker.Mode.Exactly, message);

                EmbedBuilder builder = new EmbedBuilder()
                {
                    Color       = new Color(Constants.GeneralColor.R, Constants.GeneralColor.G, Constants.GeneralColor.B),
                    Title       = "Emote Mode ● Exactly",
                    Description = $"All messages that are not exactly `{message}` will be deleted."
                };

                await LogMessageEmbedAsync($"Emote mode executed `@{Context.Guild.CurrentUser} emotemode exactly`", $"**Mode:** Exactly{Environment.NewLine}**Message:** {message}");
                await BetterReplyAsync(builder.Build(), parameters : $"{mode} ({message})");
            }
            else
            {
                await BetterReplyAsync("**Valid modes are:** off, textonly, emoteonly, exactly", parameters : mode);
            }
        }