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; } }
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); }
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; }
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; } }
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); } }
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; } }
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..];
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."); } }
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());
public abstract void Invoke(Object sender, OnUserCommandReceivedArgs e);