private static void Silence(String strUserName, String strChannel) { TimeTrackerAuthentication auth; if (dctAccounts.ContainsKey(strUserName)) { auth = dctAccounts[strUserName]; } else { auth = new TimeTrackerAuthentication(); dctAccounts.Add(strUserName, auth); } auth.Silence = !auth.Silence; dctAccounts[strUserName] = auth; TimeTracker_SaveAccounts(); Slack.Chat.PostMessageArguments args = new Slack.Chat.PostMessageArguments(); args.channel = strChannel; if (auth.Silence) { args.text = "I won't bother you until you unsilence me."; } else { args.text = "I will now prompt you regarding time tracking."; } client.Chat.PostMessage(args); }
private static void client_PresenceChanged(Slack.PresenceChangeEventArgs e) { Console.Write(System.DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "\tPresence Changed.\t["); if (e.UserInfo == null) { Console.Write("Not Found (" + e.user + ")"); } else { Console.Write(e.UserInfo.name); } Console.WriteLine("] [" + e.presence + "]"); String strChannel = client.IM.Open(e.user).ChannelID; if (strChannel.Length == 0) { return; } String strMessage = ""; switch (e.presence) { case "active": if (!dctAccounts.ContainsKey(e.UserInfo.name)) { strMessage = "Welcome " + e.UserInfo.real_name + "\nWould you like to associate your account with a Time Tracker account?\nFor help type tt /?)"; } else { strMessage = TimeTracker_UserActive(e.UserInfo.name, e.UserInfo.real_name); } break; case "away": if (dctAccounts.ContainsKey(e.UserInfo.name)) { strMessage = TimeTracker_UserInactive(e.UserInfo.name, e.UserInfo.real_name); } break; default: // do nothing break; } if (strMessage.Length == 0) { return; } Slack.Chat.PostMessageArguments args = new Slack.Chat.PostMessageArguments(); args.channel = strChannel; args.text = strMessage; client.Chat.PostMessage(args); }
private static void Send_Help(String strChannel, String strAdditional) { Slack.Chat.PostMessageArguments args = new Slack.Chat.PostMessageArguments(); args.channel = strChannel; args.text = strAdditional + "\r\n" + "tt /associate /email:[your email] /token:[your token]\tAssociate your slack account with your time tracker account.\r\n" + "tt /current\tDisplays your current punch status.\r\n" + "tt /myTime\tDisplays your current cumulative time.\r\n" + "tt /project:[project name]\tDisplays current cumulative time for a project.\r\n" + "tt /today\tDisplays your time entries for the current day.\r\n" + "tt /[project name]\tClocks you in / out of a given project."; client.Chat.PostMessage(args); }
private static TimeTrackerAuthentication Associate(String strUserName, String strChannel, String[] arrParams) { TimeTrackerAuthentication auth = new TimeTrackerAuthentication(); if (arrParams.Length < 5) { Send_Help(strChannel, "Invalid syntax: "); return(null); } if (arrParams[1] == "email") { auth.EmailAddress = arrParams[2]; } else { auth.Token = arrParams[2]; } if (arrParams[3] == "email") { auth.EmailAddress = arrParams[4]; } else { auth.Token = arrParams[4]; } if (!dctAccounts.ContainsKey(strUserName)) { dctAccounts.Add(strUserName, auth); } else { dctAccounts[strUserName] = auth; } TimeTracker_SaveAccounts(); Slack.Chat.PostMessageArguments args3 = new Slack.Chat.PostMessageArguments(); args3.channel = strChannel; args3.text = "Your time tracker account has been associated with your slack account."; client.Chat.PostMessage(args3); return(auth); }
private static bool TimeTracker(String strUserName, String strChannel, String strCommand) { if (!strCommand.StartsWith("tt")) { return(false); } strCommand = strCommand.ToLower(); strCommand = strCommand.Substring(2).Trim(new char[] { ' ', '/' }); String[] arrParams = strCommand.Split(new char[] { '/', ':' }); TimeTrackerAuthentication auth = new TimeTrackerAuthentication(); if (!dctAccounts.ContainsKey(strUserName)) { if (arrParams[0].Trim() == "associate") { auth = Associate(strUserName, strChannel, arrParams); } else if (arrParams[0].Trim() == "?") { Send_Help(strChannel, "Available commands:"); } else { Slack.Chat.PostMessageArguments args2 = new Slack.Chat.PostMessageArguments(); args2.channel = strChannel; args2.text = "Your slack account is not associated with a time tracker account"; client.Chat.PostMessage(args2); } return(true); } auth = dctAccounts[strUserName]; Slack.Chat.PostMessageArguments args = new Slack.Chat.PostMessageArguments(); args.channel = strChannel; switch (arrParams[0].Trim()) { case "?": Send_Help(strChannel, "Available commands:"); return(true); case "associate": auth = Associate(strUserName, strChannel, arrParams); return(true); case "current": args.text = TimeTracker_Current(auth); break; case "mytime": args.text = TimeTracker_MyTime(auth); break; case "project": if (arrParams.Length == 1) { Send_Help(strChannel, "Invalid syntax:"); return(false); } args.text = TimeTracker_Project(auth, arrParams[1].Trim()); break; case "today": args.text = TimeTracker_Today(auth); break; default: args.text = TimeTracker_InOUT(auth, strCommand); break; } client.Chat.PostMessage(args); return(true); }
//This example method processes commands from users and optionally sends a message back to the user private static void Process_Message(String userName, String channel, String text) { const Int32 MAX_NEWS_ITEMS = 10; Slack.Chat.PostMessageArguments args = new Slack.Chat.PostMessageArguments(); args.channel = channel; text = text.Trim().ToLower(); switch (text) { case "time": args.text = "Server time is: " + System.DateTime.Now.ToString(); client.Chat.PostMessage(args); break; case "local news": args.text = ""; System.Net.WebClient wcLocalNews = new System.Net.WebClient(); String strLocalNewsXML = wcLocalNews.DownloadString("http://www.inkfreenews.com/feed/"); System.Xml.XmlDocument xmlLocalNews = new System.Xml.XmlDocument(); xmlLocalNews.LoadXml(strLocalNewsXML); Int32 intLocalNewsRemaining = MAX_NEWS_ITEMS; foreach (System.Xml.XmlNode xmlNode in xmlLocalNews.SelectNodes("rss/channel/item")) { intLocalNewsRemaining--; if (intLocalNewsRemaining == 0) { break; } args.text += xmlNode.SelectSingleNode("title").InnerText + "\r\n\t" + xmlNode.SelectSingleNode("link").InnerText + "\r\n"; } client.Chat.PostMessage(args); break; case "news": args.text = ""; System.Net.WebClient wcReutersTechNews = new System.Net.WebClient(); String strReutersTechNewsXML = wcReutersTechNews.DownloadString("http://feeds.reuters.com/reuters/technologyNews"); System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); xmlDoc.LoadXml(strReutersTechNewsXML); Int32 intReutersTechNewsRemaining = MAX_NEWS_ITEMS; foreach (System.Xml.XmlNode xmlNode in xmlDoc.SelectNodes("rss/channel/item")) { intReutersTechNewsRemaining--; if (intReutersTechNewsRemaining == 0) { break; } args.text += xmlNode.SelectSingleNode("title").InnerText + "\r\n\t" + xmlNode.SelectSingleNode("link").InnerText + "\r\n"; } client.Chat.PostMessage(args); break; default: TimeTracker(userName, channel, text); break; } }