public bool Process(TypableMapCommandProcessor processor, PrivMsgMessage msg, Status status, string args) { processor.Session.SendServer(new NoticeMessage { Receiver = msg.Receiver, Content = String.Format( "http://twitter.com/{0}", status.User.ScreenName) }); return(true); }
public IrcTraceListener(Session session) { _session = session; #if FALSE if (_session.TcpClient.Connected) { PrivMsgMessage msg = new PrivMsgMessage("$ServerTraceLog", String.Format("(0x{0}) {1}", Thread.CurrentThread.ManagedThreadId.ToString("x"), "IrcTraceListener enabled.")); msg.SenderNick = "trace"; msg.SenderHost = "trace@" + Server.ServerName; msg.Receiver = _session.Nick; _session.Send(msg); } #endif }
/// <summary> /// IRCメッセージを受け取ってTIG本体に処理が渡る前の処理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void Session_PreMessageReceived(object sender, MessageReceivedEventArgs e) { PrivMsgMessage privMsg = e.Message as PrivMsgMessage; if (privMsg == null || String.Compare(privMsg.Receiver, ConsoleChannelName, true) != 0) { return; } ProcessMessage(privMsg); // 後続のAddIn,TIG本体には渡さない e.Cancel = true; }
public Boolean Process(PrivMsgMessage message) { if (_commands.Count == 0) { return(false); } Match m = _matchRE.Match(message.Content); if (m.Success) { try { Status status; if (TypableMap.TryGetValue(m.Groups["tid"].Value, out status)) { _commands[m.Groups["cmd"].Value].Process(this, message, status, m.Groups["args"].Value); } else { Session.SendServer(new NoticeMessage { Receiver = message.Receiver, Content = "エラー: 指定された TypableMap の ID は存在しません。" }); } } catch (Exception ex) { Session.SendServer(new NoticeMessage { Receiver = message.Receiver, Content = "エラー: TypableMap の処理中にエラーが発生しました。" }); foreach (var line in ex.ToString().Split('\n')) { Session.SendServer(new NoticeMessage { Receiver = message.Receiver, Content = line }); } } return(true); // 握りつぶす } return(false); }
void ProcessMessage(PrivMsgMessage privMsg) { String msgText = privMsg.Content;//.Trim(); try { if (!CurrentContext.OnPreProcessInput(msgText)) { ProcessInput(msgText, true); } } catch (Exception e) { NotifyMessage("エラー: " + e.Message); CurrentSession.Logger.Error(e.ToString()); } }
public Boolean Process(TypableMapCommandProcessor processor, PrivMsgMessage msg, Status status, String args) { Boolean isUnfav = (String.Compare(CommandName, "unfav", true) == 0); processor.Session.RunCheck(() => { Status favStatus = (isUnfav ? processor.Session.TwitterService.DestroyFavorite( status.Id) : processor.Session.TwitterService.CreateFavorite( status.Id)); processor.Session.SendChannelMessage(msg.Receiver, processor.Session.CurrentNick, String.Format( "ユーザ {0} のステータス \"{1}\"をFavorites{2}しました。", favStatus.User.ScreenName, favStatus.Text, (isUnfav ? "から削除" : "に追加")), true, false, false, true); }); return(true); }
public override Boolean Execute(FilterArgs args) { if (String.IsNullOrEmpty(_channelName)) { return(false); } if (!String.IsNullOrEmpty(_matchPattern)) { Boolean rerouteRequired = Regex.IsMatch(args.Content, _matchPattern, RegexOptions.IgnoreCase) && ((String.IsNullOrEmpty(_userMatchPattern)) ? true : Regex.IsMatch(args.User.ScreenName, _userMatchPattern)); if (!rerouteRequired) { return(false); } IRCMessage msg; switch (args.IRCMessageType.ToUpperInvariant()) { case "NOTICE": msg = new NoticeMessage(_channelName, args.Content); break; case "PRIVMSG": default: msg = new PrivMsgMessage(_channelName, args.Content); break; } msg.SenderNick = args.User.ScreenName; msg.SenderHost = "twitter@" + Server.ServerName; args.Session.Send(msg); if (!_duplicate) { args.Drop = true; } return(true); } return(false); }
public Boolean Process(TypableMapCommandProcessor processor, PrivMsgMessage msg, Status status, string args) { var session = processor.Session; if (args.Trim() == String.Empty) { session.SendChannelMessage(msg.Receiver, Server.ServerNick, "返信に空メッセージの送信はできません。", true, false, false, true); return(true); } String replyMsg = String.Format("@{0} {1}", status.User.ScreenName, args); // 入力が発言されたチャンネルには必ずエコーバックする。 // 先に出しておかないとundoがよくわからなくなる。 session.SendChannelMessage(msg.Receiver, session.CurrentNick, replyMsg, true, false, false, false); session.UpdateStatusWithReceiverDeferred(msg.Receiver, replyMsg, status.Id, (updatedStatus) => { }); return(true); }
public Boolean Process(TypableMapCommandProcessor processor, PrivMsgMessage msg, Status status, string args) { var session = processor.Session; if (args.Trim() == String.Empty) { // ここに公式RT機能を実装 Status retweetStatus = processor.Session.TwitterService.RetweetStatus(status.Id); session.SendChannelMessage(msg.Receiver, session.CurrentNick, String.Format( "ユーザ {0} のステータス \"{1}\"をRetweetしました。", retweetStatus.RetweetedStatus.User.ScreenName, retweetStatus.Text), true, false, false, true ); return(true); } else { session.SendChannelMessage(msg.Receiver, Server.ServerNick, "Retweetにメッセージ添付は有効ではありません。", true, false, false, true); } return(true); }
protected override void OnMessageReceivedFromClient(MessageReceivedEventArgs e) { if (_isFinished) { return; } PrivMsgMessage privMsg = e.Message as PrivMsgMessage; if (privMsg != null) { if (_identity == null) { // step 1 try { _identity = _twitterOAuth.RequestAccessToken(authToken, privMsg.Content.Trim()); } catch (WebException we) { SendMessage("アプリケーションのアクセスは許可されませんでした。再接続してやり直してください。"); return; } SendMessage(String.Format("ユーザー {0} (ID:{1})として認証されました。", _identity.ScreenName, _identity.UserId)); SendMessage("IRCクライアントに設定するためのパスワードを入力してください。"); } else { // step 2 String password = privMsg.Content.Trim(); try { #if HOSTING var config = Config.LoadConfig(_identity.UserId.ToString()); #else var config = Config.LoadConfig(_identity.ScreenName.ToString()); #endif config.OAuthAccessToken = _identity.Token; config.OAuthTokenSecret = _identity.TokenSecret; config.OAuthUserPasswordHash = Utility.GetMesssageDigest(password); #if HOSTING Config.SaveConfig(_identity.UserId.ToString(), config); SendMessage( String.Format( "OAuth用のパスワードを設定しました。IRCクライアントの接続設定のユーザID(ログイン名)に {0} を、パスワードに設定したパスワードを指定して再接続してください。", _identity.UserId)); #else Config.SaveConfig(_identity.ScreenName.ToString(), config); SendMessage("OAuth用のパスワードを設定しました。IRCクライアントの接続設定のパスワードに設定したパスワードを指定して再接続してください。"); #endif } catch (IOException ie) { SendMessage("設定ファイルにアクセスする際にエラーが発生しました。(" + ie.Message + ")"); return; } Session session = _server.GetSession(_identity.UserId.ToString()) as Session; if (session != null) { session.LoadConfig(); // すでにセッションがある場合には設定を再読込 } _isFinished = true; } } }
public StatusUpdateEventArgs(PrivMsgMessage receivedMessage, String text) { ReceivedMessage = receivedMessage; Text = text; }
public bool Process(TypableMapCommandProcessor processor, PrivMsgMessage msg, Status status, string args) { return(_processCommandDelegate(processor, msg, status, args)); }