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);
 }
Example #2
0
        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
        }
Example #3
0
        /// <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);
        }
Example #5
0
        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);
            }
Example #7
0
        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);
            }
Example #9
0
            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));
 }