protected virtual void HandleQueryNotice(object sender, IPrivateMessageEventArgs args, MessageFlags flags) { if (flags.HasFlag(MessageFlags.UserBanned)) { return; } if (!string.Equals(args.SenderNickname, Config.GameMasterNickname, StringComparison.OrdinalIgnoreCase)) { return; } Match decksInShoeMatch = DecksInShoeRegex.Match(args.Message); if (decksInShoeMatch.Success) { int decksInShoe; if (int.TryParse( decksInShoeMatch.Groups["deckCount"].Value, NumberStyles.None, CultureInfo.InvariantCulture, out decksInShoe )) { CardCounter.TotalDecks = decksInShoe; } } if (args.Message.Contains("Dealer stands on soft 17.")) { State.BasicStrat = BasicStrategy.StandOnSoft17; } else if (args.Message.Contains("Dealer hits on soft 17.")) { State.BasicStrat = BasicStrategy.HitOnSoft17; } }
private void HandleQueryAka([NotNull] CommandMatch cmd, [NotNull] IPrivateMessageEventArgs e) { ActuallyHandleChannelOrQueryAka( cmd, e, txt => ConnectionManager.SendQueryMessage(e.SenderNickname, txt) ); }
protected virtual void HandleQueryMessage(object sender, IPrivateMessageEventArgs args, MessageFlags flags) { if (flags.HasFlag(MessageFlags.UserBanned)) { return; } if (!string.Equals(args.SenderNickname, Config.GameMasterNickname, StringComparison.OrdinalIgnoreCase)) { return; } JObject eventObject; try { eventObject = JObject.Parse(args.Message); } catch (JsonReaderException) { return; } Dispatcher.DispatchEvent(this, eventObject); }
private void HandleWDYTICommandInQuery(CommandMatch cmd, IPrivateMessageEventArgs msg) { HandleMessage( (string)cmd.Arguments[0], body => ConnectionManager.SendQueryMessage(msg.SenderNickname, body) ); }
private void HandlePrivateMessage(object sender, IPrivateMessageEventArgs args, MessageFlags flags) { ActuallyHandleMessage( message => ConnectionManager.SendQueryMessage(args.SenderNickname, message), args, flags ); }
protected virtual void HandleReloadCommand(CommandMatch cmd, IPrivateMessageEventArgs msg) { string username = VerifyIdentity(msg); if (username == null) { return; } ConnectionManager.ReloadConfiguration(); ConnectionManager.SendQueryMessage(msg.SenderNickname, "OK"); }
protected virtual void HandleQueryEntry( Dictionary <Command, List <PrivateMessageCommandHandler> > commandsHandlers, object sender, IPrivateMessageEventArgs msg, MessageFlags flags) { string line = msg.Message; if (Config.AllowWhitespaceBeforeCommandPrefix) { line = line.TrimStart(); } if (!line.StartsWith(Config.CommandPrefix)) { // not a command return; } string commandAndArgs = line.Substring(Config.CommandPrefix.Length); foreach (KeyValuePair <Command, List <PrivateMessageCommandHandler> > commandHandler in commandsHandlers) { // attempt to parse this command CommandMatch match = commandHandler.Key.Match(Config, commandAndArgs, flags); if (match == null) { continue; } // check result of global callbacks if (!ApplyGlobalCallbacks(match, msg)) { continue; } // distribute foreach (PrivateMessageCommandHandler handler in commandHandler.Value) { try { handler.Invoke(match, msg); } catch (Exception exc) { Logger.LogError( "error when {Handler} was handling command {Command}: {Exception}", handler, match.CommandName, exc ); } } } }
protected virtual void HandleQueryMessage(object sender, IPrivateMessageEventArgs args, MessageFlags flags) { if (flags.HasFlag(MessageFlags.UserBanned)) { return; } if (!string.Equals(args.SenderNickname, Config.GameMasterNickname, StringComparison.OrdinalIgnoreCase)) { return; } var messageBody = args.Message; if (LinesLeftInMessage > 0) { // add this CurrentMessageJson.Append(messageBody); --LinesLeftInMessage; } else { var match = UnoBotFirstMessage.Match(messageBody); if (!match.Success) { // nope return; } LinesLeftInMessage = int.Parse(match.Groups[1].Value); CurrentMessageJson.Append(match.Groups[2].Value); --LinesLeftInMessage; } if (LinesLeftInMessage > 0) { // wait for more return; } // ready to parse var parseMe = CurrentMessageJson.ToString(); CurrentMessageJson.Clear(); var evt = JObject.Parse(parseMe); ProcessJsonEvent(evt); }
protected virtual void HandleInviteCommand(CommandMatch cmd, IPrivateMessageEventArgs e) { if (!Config.RejoinOnPrivateMessage) { return; } var channel = ((Match)cmd.Arguments[0]).Value; if (Config.AutoJoinedChannelsOnly && !ConnectionManager.AutoJoinChannels.Contains(channel)) { return; } ConnectionManager.JoinChannel(channel); }
protected void HandleCasinoAssistCommand(CommandMatch cmd, IPrivateMessageEventArgs msg) { string registeredNick = ConnectionManager.RegisteredNameForNick(msg.SenderNickname) ?? msg.SenderNickname; lock (AssistPlayers) { if (cmd.CommandName == "nocasinoassist") { AssistPlayers.Remove(registeredNick); } else { AssistPlayers.Add(registeredNick); } } }
protected void HandleStratDebugCommand(CommandMatch cmd, IPrivateMessageEventArgs msg) { string registeredNick = ConnectionManager.RegisteredNameForNick(msg.SenderNickname) ?? msg.SenderNickname; lock (StrategyDebuggers) { if (cmd.CommandName == "nostratdebug") { StrategyDebuggers.Remove(registeredNick); } else { StrategyDebuggers.Add(registeredNick); } } }
protected virtual void HandleIKnowThatQueryCommand(CommandMatch cmd, IPrivateMessageEventArgs args) { string senderLower = (ConnectionManager.RegisteredNameForNick(args.SenderNickname) ?? args.SenderNickname) .ToLowerInvariant(); string keywordLower = ((string)cmd.Arguments[0]).ToLowerInvariant(); string message = ((string)cmd.Arguments[1]).Trim(); using (var ctx = GetNewContext()) { IKnewThatEntry entry = ctx.Entries .FirstOrDefault(e => e.AuthorLowercase == senderLower && e.KeywordLowercase == keywordLower); if (entry == null) { entry = new IKnewThatEntry { AuthorLowercase = senderLower, KeywordLowercase = keywordLower, Timestamp = DateTimeOffset.Now, Message = message }; ctx.Entries.Add(entry); ctx.SaveChanges(); ConnectionManager.SendQueryMessage( args.SenderNickname, $"Okay, remembering that on {entry.Timestamp:yyyy-MM-dd} at {entry.Timestamp:HH:mm:ss}, you knew the following: {entry.Message}" ); } else { DateTimeOffset oldTimestamp = entry.Timestamp.ToLocalTime(); string oldMessage = entry.Message; entry.Timestamp = DateTimeOffset.Now; entry.Message = message; ctx.SaveChanges(); ConnectionManager.SendQueryMessage( args.SenderNickname, $"Okay, forgetting that on {oldTimestamp:yyyy-MM-dd} at {oldTimestamp:HH:mm:ss}, you knew the following: {oldMessage}; and remembering that on {entry.Timestamp:yyyy-MM-dd} at {entry.Timestamp:HH:mm:ss}, you knew the following: {entry.Message}" ); } } }
protected virtual void HandleSockpuppetCommand(CommandMatch cmd, IPrivateMessageEventArgs msg) { string username = VerifyIdentity(msg); if (username == null) { return; } var command = (string)cmd.Arguments[0]; if (command.StartsWith(" ")) { command = command.Substring(1); } PerformSockpuppet(username, msg.SenderNickname, command); }
protected virtual void HandleAlloStatsCommand(CommandMatch cmd, IPrivateMessageEventArgs msg) { string nick = msg.SenderNickname; string registeredNick = ConnectionManager.RegisteredNameForNick(nick); if (registeredNick == null || !Config.Stewards.Contains(registeredNick)) { // nope return; } string channel = ((Match)cmd.Arguments[0]).Value; if (!CooldownsPerChannel.ContainsKey(channel)) { ConnectionManager.SendQueryMessageFormat(nick, "No cooldowns for {0}.", channel); return; } string testMessage = ((string)cmd.Arguments[1]).Trim(); if (testMessage.Length == 0) { testMessage = null; } ConnectionManager.SendQueryMessageFormat(nick, "Allograph stats for {0}:", channel); var cooldowns = CooldownsPerChannel[channel]; for (int i = 0; i < Config.Replacements.Count; ++i) { var replacement = Config.Replacements[i]; var cooldown = cooldowns[i]; if (testMessage != null && !replacement.Regex.IsMatch(testMessage)) { // skip continue; } ConnectionManager.SendQueryMessageFormat(nick, "{0} :::: {1}", replacement.RegexString, cooldown); } ConnectionManager.SendQueryMessage(nick, "End."); }
protected virtual void OnQueryAction(IPrivateMessageEventArgs e) { HandleSharpIrcBotEvent(QueryActionSubscribers, e, "query action"); }
protected virtual void HandleQueryNotice(object sender, IPrivateMessageEventArgs msg, MessageFlags flags) { HandleQueryEntry(QueryNoticeHandlers, sender, msg, flags); }
protected virtual void OnQueryNotice(IPrivateMessageEventArgs e) { HandleSharpIrcBotEvent(QueryNoticeSubscribers, e, "query notice"); }