Example #1
0
        public async override void Invoke(Object sender, OnUserCommandReceivedArgs e)
        {
            if (!e.Words.Any() || !e.Words.First().Equals(e.ChatMessage.Username, StringComparison.OrdinalIgnoreCase))
            {
                TwitchClientManager.SpoolMessageAsMe(e.ChatMessage.Channel, $"{e.ChatMessage.DisplayName} I cannot leave other users' channels for you.");
                return;
            }

            var context = ContextFactory.GetContext();

            // Users can only leave their own channel.
            var channelFound = context.StartupChannels.FirstOrDefault(x => x.UserID == e.ChatMessage.UserId);

            Task <Int32> task = null;

            if (channelFound is not null)
            {
                context.StartupChannels.Remove(channelFound);
                task = context.SaveChangesAsync();
            }

            TwitchClientManager.Client.LeaveChannel(e.ChatMessage.Username);

            TwitchClientManager.SpoolMessageAsMe(e.ChatMessage.Channel, $"{e.ChatMessage.DisplayName} I have left your channel");

            if (task is not null)
            {
                await task;
            }
        }
Example #2
0
        public WhenUserCommandReceived()
        {
            Sut
            .AddCommand(MockedUserCommand1.Object)
            .AddCommand(MockedUserCommand2.Object);

            ChatMessage = ChatMessageBuilder
                          .Create()
                          .Build();

            Sut.Enable(MockedUserCommand1.Object.Name);

            var userCommandName = MockedUserCommand1.Object.Name;

            UserCommandArgs = new OnUserCommandReceivedArgs(ChatMessage, Array.Empty <String>());

            var userCommandArgs = UserCommandArgs;

            MockedUserCommandValidator
            .Setup(x => x.TryValidateCommand(ChatMessage, out userCommandName, out userCommandArgs))
            .Returns(true);

            MessageArgs = new OnMessageReceivedArgs()
            {
                ChatMessage = ChatMessage
            };

            MockedTwitchClient.Raise(x => x.OnMessageReceived += null, MessageArgs);
        }
Example #3
0
        public async override void Invoke(Object sender, OnUserCommandReceivedArgs e)
        {
            if (!e.Words.Any() || !e.Words.First().Equals(e.ChatMessage.Username, StringComparison.OrdinalIgnoreCase))
            {
                TwitchClientManager.SpoolMessageAsMe(e.ChatMessage.Channel, $"{e.ChatMessage.DisplayName} I cannot join other users' channels for you.");
                return;
            }

            using var context = ContextFactory.GetContext();

            // Users can only add their own channel
            var channelFound = context.StartupChannels.FirstOrDefault(x => x.UserID == e.ChatMessage.UserId);

            String outputMessage;

            if (channelFound == null)
            {
                if (context.StartupChannels.Count() >= MaximumChannelsToJoin)
                {
                    outputMessage = $"{e.ChatMessage.DisplayName} I have reached the maximum number of channels to join and could not join your channel.";
                }
                else
                {
                    // Add new channel.
                    context.StartupChannels.Add(new StartupChannel()
                    {
                        UserID      = e.ChatMessage.UserId,
                        DisplayName = e.ChatMessage.DisplayName
                    });

                    outputMessage = $"{e.ChatMessage.DisplayName} I have now joined your channel.";
                }
            }
            else
            {
                // Update the display name
                channelFound.DisplayName = e.ChatMessage.DisplayName;

                if (channelFound.DisplayName == e.ChatMessage.DisplayName)
                {
                    outputMessage = $"{e.ChatMessage.DisplayName} I have already joined your channel.";
                }
                else
                {
                    outputMessage = $"{e.ChatMessage.DisplayName} I have already joined your channel. Updated user name.";
                }

                // Update the display name
                channelFound.DisplayName = e.ChatMessage.DisplayName;
            }


            var task = context.SaveChangesAsync();

            TwitchClientManager.Client.JoinChannel(e.ChatMessage.Username);

            TwitchClientManager.SpoolMessageAsMe(e.ChatMessage.Channel, outputMessage);

            await task;
        }
Example #4
0
        public override void Invoke(Object sender, OnUserCommandReceivedArgs e)
        {
            switch (e.Words.Length)
            {
            case 0:
                TwitchClientManager.SpoolMessage(e.ChatMessage.Channel, $"{e.ChatMessage.DisplayName} {GetRandom(0, 100)}");
                break;

            case 1:
                TwitchClientManager.SpoolMessage(
                    e.ChatMessage.Channel,
                    $"{e.ChatMessage.DisplayName} You must include a minimum and maximum integer",
                    Priority.Low);
                break;

            default:
                if (!Int32.TryParse(e.Words[0], out Int32 min) || !Int32.TryParse(e.Words[1], out Int32 max))
                {
                    TwitchClientManager.SpoolMessage(
                        e.ChatMessage.Channel,
                        $"The minimum and maximum values must be integers",
                        Priority.Low);
                    break;
                }
                TwitchClientManager.SpoolMessage(e.ChatMessage.Channel, $"{e.ChatMessage.DisplayName} {GetRandom(min, max)}");
                break;
            }
        }
Example #5
0
        public override void Invoke(Object sender, OnUserCommandReceivedArgs e)
        {
            String translatedText = NodeService.InvokeFromStringAsync <String>(moduleString: JavaScript.Translate, args: e.Words).Result;

            if (translatedText is not null)
            {
                TwitchClientManager.SpoolMessage(translatedText);
            }
        }
Example #6
0
        public override void Invoke(Object sender, OnUserCommandReceivedArgs e)
        {
            if (!e.Words.Any())
            {
                PointManager.AddPoints(e.ChatMessage);
                return;
            }

            var cheeseCommand = e.Words.First().ToLower();

            switch (cheeseCommand)
            {
            case "s":
            case "shop":
                Shop.ListInventory(e.ChatMessage);
                break;

            case "b":
            case "buy":
                Shop.BuyItem(e.ChatMessage);
                break;

            case "h":
            case "help":
                Help.GetHelp(e.ChatMessage);
                break;

            case "r":
            case "rank":
                RankManager.ShowRank(e.ChatMessage);
                break;

            case "rankup":
                RankManager.RankUp(e.ChatMessage);
                break;

            case "q":
            case "quest":
            case "quests":
                QuestManager.TryStartQuest(e.ChatMessage);
                break;

            case "heist":
                HeistManager.Heist(e.ChatMessage);
                break;

            default:
                PointManager.AddPoints(e.ChatMessage);
                break;
            }
        }
Example #7
0
    public override void Invoke(Object sender, OnUserCommandReceivedArgs e)
    {
        if (e.Words.Length < 2)
        {
            TwitchClientManager.SpoolMessage(e.ChatMessage.DisplayName + " Usage: !pyramid <size> <text>", Priority.Low);
            return;
        }

        if (!Int32.TryParse(e.Words[0], out Int32 height) || height < 1)
        {
            TwitchClientManager.SpoolMessage($"{e.ChatMessage.DisplayName} Pyramid height of \"{e.Words[0]}\" must be a positive integer");
        }

        IEnumerable <String> pyramidBlockArguments = e.Words[1..];
Example #8
0
        public override void Invoke(Object sender, OnUserCommandReceivedArgs e)
        {
            var request = String.Join(' ', e.Words);

            var result = WolframAlpha.Query(request);

            if (result.Success)
            {
                var pod = result.Pods.FirstOrDefault(pod => pod.Title == "Result" || pod.Title == "Wikipedia summary");

                if (pod != null && pod.SubPods != null)
                {
                    StringBuilder messageBuilder = new();

                    messageBuilder.Append(e.ChatMessage.DisplayName);
                    messageBuilder.Append(' ');

                    if (pod.Title == "Result")
                    {
                        foreach (var subpod in pod.SubPods)
                        {
                            messageBuilder.Append(subpod.Plaintext);
                        }
                    }
                    else
                    {
                        StringBuilder wikipediaEntryBuilder = new();
                        foreach (var subpod in pod.SubPods)
                        {
                            wikipediaEntryBuilder.Append(subpod.Plaintext);
                            wikipediaEntryBuilder.Append(' ');
                        }

                        var match = FirstSentenceRegex.Match(wikipediaEntryBuilder.ToString());

                        if (match.Success)
                        {
                            messageBuilder.Append(match.Value);
                        }
                    }

                    TwitchClientManager.SpoolMessage(messageBuilder.ToString());
                }
            }
            else
            {
                TwitchClientManager.SpoolMessage(e.ChatMessage.DisplayName + " Could not query WolframAlpha successfully.");
            }
        }
Example #9
0
        public override void Invoke(Object sender, OnUserCommandReceivedArgs e)
        {
            if (!e.Words.TryGetFirst(out var keyword, out var next))
            {
                return;
            }

            // TODO add channel admins
            if (!e.ChatMessage.Username.Equals("chubbehmouse", StringComparison.OrdinalIgnoreCase) &&
                !e.ChatMessage.Username.Equals(e.ChatMessage.Channel, StringComparison.OrdinalIgnoreCase))
            {
                return;
            }

            switch (keyword.ToLower())
            {
            case "a":
            case "add":
            {
                if (next.TryGetFirst(out var categoryString, out var next2) &&
                    categoryString.TryParseEnum(out EmoteCategory category))
                {
                    // Filter out single character words, such as chatterino message duplicate characters.
                    var emotes  = next2.Where(x => x.Length >= 2);
                    var results = EmoteManager.AddAll(emotes, category, e.ChatMessage.Channel);

                    StringBuilder builder = new StringBuilder()
                                            .Append(e.ChatMessage.DisplayName)
                                            .Append(',');

                    if (results.Succeeded.Any())
                    {
                        builder
                        .Append(" Added ")
                        .Append(category)
                        .Append(" emotes: ")
                        .Append(String.Join(' ', results.Succeeded));
                    }

                    if (results.Failed.Any())
                    {
                        builder
                        .Append(" Failed to add ")
                        .Append(category)
                        .Append(" emotes: ")
                        .Append(String.Join(' ', results.Failed));
                    }

                    TwitchClientManager.SpoolMessage(e.ChatMessage.Channel, builder.ToString());
                }
            }
            break;

            case "d":
            case "delete":
            case "remove":
            {
                if (next.TryGetFirst(out var categoryString, out var next2) &&
                    categoryString.TryParseEnum(out EmoteCategory category))
                {
                    var emotes = next2.Where(x => x.Length > 1);

                    var results = EmoteManager.RemoveAll(emotes, category, e.ChatMessage.Channel);

                    StringBuilder builder = new StringBuilder()
                                            .Append(e.ChatMessage.DisplayName)
                                            .Append(',');

                    if (results.Succeeded.Any())
                    {
                        builder
                        .Append(" Removed ")
                        .Append(category)
                        .Append(" emotes: ")
                        .Append(String.Join(' ', results.Succeeded));
                    }

                    if (results.Failed.Any())
                    {
                        builder
                        .Append(" Failed to remove ")
                        .Append(category)
                        .Append(" emotes: ")
                        .Append(String.Join(' ', results.Failed));
                    }

                    TwitchClientManager.SpoolMessage(e.ChatMessage.Channel, builder.ToString());
                }
            }
            break;

            default:
            {
                if (keyword.TryParseEnum(out EmoteCategory category) && category != EmoteCategory.Invalid)
                {
                    var emotes = EmoteManager.Get(e.ChatMessage.Channel, category);

                    StringBuilder builder = new StringBuilder()
                                            .Append(e.ChatMessage.DisplayName)
                                            .Append(", ")
                                            .Append(category)
                                            .Append(" emotes: ")
                                            .Append(String.Join(' ', emotes));

                    TwitchClientManager.SpoolMessage(e.ChatMessage.Channel, builder.ToString());
                }
            }
            break;
            }
        }
        public Boolean TryValidateCommand(ChatMessage message, out Name userCommandName, out OnUserCommandReceivedArgs args)
        {
            userCommandName = default;
            args            = default;

            if (ShouldIgnoreUser(message))
            {
                return(false);
            }

            var allWords  = message.Message.Split(' ');
            var firstWord = allWords[0];

            if (!IsCommand(firstWord))
            {
                return(false);
            }

            userCommandName = Name.From(firstWord[1..].ToLower());
Example #11
0
 public abstract void Invoke(Object sender, OnUserCommandReceivedArgs e);