private void Receieved(NewMessage message) { Console.WriteLine("Got message " + message.channel + " : " + message.text); var request = new Request { message = message.text, from = _client.UserLookup[message.user].name, channel = message.channel }; foreach ( var responder in Responders ) { if (responder.Matched(request)) { var runner = responder.Create(request, RunnerOutput); if ( !runner.IsFinished()) runners.Add(runner); return; } } _client.SendMessage(SendMessage, message.channel, "You said : " + message.text); }
private void OnMessageReceived(NewMessage message) { if (message.type == "message") { this.Logger.Debug($"Received => Type: {message.type} - SubType: {message.subtype} - Channel: {this.GetReadableName(message.channel)} - Raw: {this.GetRawMessage(message)}"); if (this.IsRegularMessage(message) && this.ShouldMonitor(message.channel)) { this.channelsInfo[message.channel].UnreadMessage++; if (this.Client.ChannelLookup.ContainsKey(message.channel) || this.Client.GroupLookup.ContainsKey(message.channel)) { this.channelsInfo[message.channel].UnreadMention += Convert.ToInt32(this.HasMention(this.GetRawMessage(message))); } else { this.channelsInfo[message.channel].UnreadMention++; } this.UpdateStatus(); } else { this.Logger.Debug("Message dropped"); } } }
private bool IsRegularMessage(NewMessage message) { return this.IsRegularMessage(message.user, message.subtype); }
private void OnMessageReceived(SlackAPI.WebSocketMessages.NewMessage message) { if (!string.IsNullOrEmpty(message.user) && message.user != client.MySelf.id) { string messageText = SanitizeText(message.text); //Admin control if (message.user == adminId && message.channel == adminDM) { if (message.text[0] == '{') { pendingQuestionId = RecordQuestion(message.text); PostMessage(adminId, "Here's what you sent me:"); PostQuestion(pendingQuestionId, adminId); PostMessage(adminId, "Want me to post this? Say 'yes post' or 'no post'."); } else if (messageText == "yes post") { if (pendingQuestionId != Guid.Empty) { PostQuestion(pendingQuestionId, triviaChannelId); pendingQuestionId = Guid.Empty; } else { PostMessage(adminId, "Something went wrong! Red alert!"); PostMessage(adminId, "Error in admin control"); } } else if (messageText == "no post") { pendingQuestionId = Guid.Empty; PostMessage(adminId, "Okay, I won't post it."); } else if (messageText == "score") { PostMessage(adminId, CheckAllScores()); } else if (messageText.Contains("delete previous")) { Console.WriteLine("You haven't set up functionality for this yet."); } else if (messageText == "end") { PostMessage(adminDM, "Here's what I'll say to end the round: "); PostMessage(adminDM, EndRound()); PostMessage(adminDM, "Want me to end round? Say 'yes end' or 'no end'."); } else if (messageText == "yes end") { PostMessage(triviaChannelId, EndRound()); } else if (messageText == "no end") { PostMessage(adminDM, "Trivia bot no end."); } else if (messageText.Contains("history")) { GetMessageHistory(); } else if (messageText == "test") { PostMessage(message.channel, "Test passed!"); } else if (messageText == "delete history 8675309") { DeleteHistory(); } else if (message.text.Contains("delete player attempt")) { // Needs to follow pattern: 'delete player attempt @slackmention' PostMessage(adminDM, message.text); DeleteMostRecentPlayerAttempt(message.text); } else if (messageText == "delete last question 8675309") { DeleteMostRecentQuestion(); } else if (messageText.Split(" ")[0] == "tell") { Ventriloquist(message.text); } else if (messageText.Contains("add attempt for")) { PostMessage(adminDM, ManuallyAddAttempts(message.text)); } else if (messageText == "help") { var helpMessage = "Hey Connor, here's what you can tell me:\n" + "Send me a question using json format.\n" + "Delete all attempts by saying 'delete attempts 8675309'.\n" + "Delete a player's last attempt by saying 'delete history attempt @[slackmention]'.\n" + "Delete the most recent question by saying 'delete last question 8675309'.\n" + "Make me send a DM to a user by saying 'tell user @[slackmention] [Here's the sentence I want to send]'.\n" + "Add attempts for a player by saying 'add attempt for @[slackmention] [letter]'.\n" + "Get current score in trivia channel by saying 'current score'.\n" + "Get current score in this channel by saying 'score'.\n"; PostMessage(adminDM, helpMessage); } else { PostMessage(adminDM, Converse(message.user, messageText)); } } //For all other users else if (message.channel == triviaChannelId && message.user == adminId) { if (messageText == "current score") { PostMessage(triviaChannelId, CheckAllScores()); } } else if (message.channel != triviaChannelId) { if (LookUpPlayer(message.user) == null) { if (CreatePlayer(message.user, message.channel) == null) { PostMessage(message.user, "Something went wrong! I tried to add you but it looks like you're a demon."); PostMessage(adminId, "Something went wrong! Red alert!"); PostMessage(adminId, "Error in createplayer"); } } var responseToCheck = CheckForAndAddDM(message.user, message.channel); if (responseToCheck != "DM exists") { PostMessage(adminId, responseToCheck); } if (messageText.Contains("help")) { PostMessage(message.user, "Need help?\n" + "When I post a question, send me a direct message with the letter of the answer that you think is correct.\n" + "If you'd like to check your current score, send me a direct message and say 'score'." ); } else if (messageText == "score") { PostMessage(message.channel, "Getting your score..."); PostMessage(message.channel, "Your current score is " + CheckPlayerScores(message.user) + "!"); } else if (messageText == "a" || messageText == "b" || messageText == "c" || messageText == "d") { PostMessage(message.channel, RecordAnswer(message, messageText)); } else { PostMessage(message.channel, Converse(message.user, messageText)); } } if (message.user != adminId) { if (message.channel != "C6ZPBU15W") { var speakingPlayer = LookUpPlayer(message.user); PostMessage(adminId, "*Message received from " + speakingPlayer.PlayerName + ":* " + messageText); } } } }
void Client_OnMessageReceived(NewMessage obj) { if (obj.channel.Equals(Id)) BeginInvoke(new Action(() => { AddMessage(new SlackAPI.Message() { text = obj.text, user = obj.user, ts = obj.ts }); //if (((chatContent.VerticalScroll.Value + 1) * 1f / chatContent.VerticalScroll.Maximum * 1f) > .9f) // chatContent.VerticalScroll.Value = chatContent.VerticalScroll.Maximum; })); }
/// <summary> /// Processes the message sent to the bot and runs the command if it's valid. /// </summary> /// <param name="msg"></param> private void ParseBotMessage(NewMessage msg) { string text = msg.text.ToLower().Trim(); var words = text.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries); string command = ""; if (words.Any()) { command = words[0]; string userId = "<@" + _loginResponse.self.id.ToLower() + ">"; command = command.Replace(userId + ":", ""); command = command.Replace(userId, ""); if (command.Length == 0) words = words.Skip(1).ToArray(); if (words.Any()) command = words[0]; } command = command.Trim(); string[] args = null; if (words.Count() > 1) args = words.Skip(1).ToArray(); string targetUser = "******" + msg.user + ">"; string answer = targetUser + ": "; if (_restaurantManager.ContainsRestaurant(command)) { answer += _restaurantManager.GetMenu(command); } else if (IsCommandKnown(command)) { answer += RunCommand(command, args); } else { StatisticsCollector.GetInstance().IncrementUnknownCommandCount(); answer = GetRandomUnknownCommandAnswer(targetUser); } if (answer.Length > 0) _slackClient.SendMessage(received => { }, msg.channel, answer); }
private void OnSlackMessageReceived(NewMessage obj) { if (!IsMessageForMe(obj)) return; StatisticsCollector.GetInstance().IncrementIncomingMessageCount(); // Find sender user name string senderName = "<unknown>"; foreach (User user in _loginResponse.users) { if (user.id == obj.user) { senderName = user.name; break; } } _log.Info("Incoming message from " + senderName + " for me: " + obj.text); ParseBotMessage(obj); }
/// <summary> /// Checks if the message is addressed to the bot. /// </summary> /// <param name="msg"></param> /// <returns></returns> private bool IsMessageForMe(NewMessage msg) { // Check if the message is directly for me if (msg.channel.StartsWith("D") && msg.user != _loginResponse.self.id) return true; // Check if the message begins with my user ID var re = new Regex(@"^\<@(.*)\>(.*)$"); Match m = re.Match(msg.text); return (m.Success && m.Groups[1].Value == _loginResponse.self.id); }