Sunday, April 17, 2011, 12:30 PM -
MiscPosted by Administrator
TwitterIrcGatewayの挙動に関するめも
推測、実際にソースコードを読んだわけではない
・最初に
#Consoleに入ってhelpと打て
・Timelineのチャンネル(#Twitter)を変更する
ChannelNameで設定可能
・Replyする
単純な"@you hello"ではどのTweetに対してのReplyか判別できない
EnableTypableMap=1とした上で各Tweetの末尾に付加される英字を使って"re aaa hello"とする
・自分に対するReplyを取得する、自分に対するReplyのみ表示するチャンネルを作る
単純な@meの抽出はFollowしている(Timelineに見えている)必要がある
そうではなく全ての@meを取得するには EnableRepliesCheck=1とする
その上で#Replies(など)へ入り、トピックを@meとする
・自分の Tweetのみ表示するチャンネルを作る
BroadcastUpdate=1とし、#Self(など)へ入り、mode +iとする
それ以外のチャンネル全てでmode +pとする
この挙動に関する検証は下記
[log]01:43 <Racoon> joinした時の自分の発言って
01:43 <Racoon> 全chにみえね?
01:43 <Racoon> 単純に。
01:43 <purintai> そういうことなのかな
01:44 <purintai> まあ
01:44 <Racoon> それを抑制したいっていう話?
...
02:59 <Racoon> broadcastupdate trueにすると自分のtwittがechoしてくるっぽいんだけど
02:59 <purintai> pにすればストーカーモードで
02:59 <purintai> 自分の発言が見えませんと
03:00 <Racoon> これbroadcastupdateってfalseでもいけるんじゃねーかな
03:00 <Racoon> 結局のところreloginした時にbroadcastが一時的にonになるのか?
03:00 <purintai> まあ
03:00 <purintai> そうでないと直近のTL取得できないしね
03:01 <Racoon> a-soudesune
03:01 <Racoon> broadcastupdateの有無は関係ない
03:01 <purintai> ただ
03:01 <Racoon> pつけてreloginすると恐らく望んでる動作になる
03:01 <purintai> 疑問はなんでreplyの取得なのに
03:01 <purintai> 自分の発言拾ってたかだよね
03:01 <purintai> まあpつければ解決するのはまさにそうなんだけど
03:01 <Racoon> いやだから
03:01 <purintai> 根本的な疑問解決とはちょっと違う
03:01 <Racoon> loginする時にTLもってきて
03:01 <purintai> 問題は解決してる
03:01 <purintai> うん
03:02 <Racoon> この瞬間だけbroadcastupdateが強制的にtrueになる
03:01 <purintai> つまり直近TLに自分の発言あると
03:01 <Racoon> これがtrueだと自分のtwitを全chにばらまく
03:01 <purintai> それ強制的拾いますよってことか
03:02 <purintai> なるほど
03:02 <Racoon> 拾うとか拾わないとかっつー話じゃなくて
03:02 <Racoon> 拾ってるんだけど表示してないだけ
03:02 <Racoon> この表示するかしないかの機能がbroadcastupdateのtrue/false
03:02 <Racoon> reloginの時だけ設定を無視してtrueになる
03:04 <Racoon> まあ全chにばらまくっつーか
03:04 <Racoon> 全chに自分は常にinしてるから
03:04 <Racoon> そういう動作に結果的になるだけだけど
03:05 <Racoon> で、pは自分のtwitは表示させない
03:05 <Racoon> っていうoptionのようだ[/log]
・対象ユーザのみのTweetのみ表示するチャンネルを作る
#Group(など)へ入り、対象となるユーザを招待する
チャンネルの人数が2人以上ならばそのユーザの発言のみ表示されるようになる
・処理の流れ
1. Timeline取得
2. EnableRepliesCheck=1なら@me取得
3. フィルタの評価(これの優先度は調べてない)
Drop/Rewriteは特筆点なし、Redirect処理を行い、Duplicate=0なら対象となるTweetを今後の処理の対象としない
4. BroadcastUpdate=0ならgrep -v @me、但しログイン直後のバックログ表示の際はBroadcastUpdateが常に真
5. #Twitterへ出力、ここで出力されないTweetは以降も処理の対象とならない
(3でDropされた、Duplicate=0で Redirectされた)
6. 各チャンネルの処理、チャンネルの人数が2人以上なら対象のユーザでgrep
またトピックが設定されていれば対象の文字列でgrep
・自分で使用している設定例
BroadcastUpdate=1
EnableRepliesCheck=1
#Timeline ()
#Self (+i)
> 自分のTweetのみ表示
#Replies : @elin_twi (+p)
> 自分に対するReplyのみ表示
#Navi : ^@elin_twi (+p)
> なびこからの自分に対するReplyのみ表示、このチャンネルに表示されるTweetは#Repliesに表示されない(フィルタの3番)
#Group (+p)
>
0: Redirect:[DISABLED] MatchPattern=\@elin_twi ChannelName=#Replies
> 使ってない
1: Redirect: UserMatchPattern=^mikomoe_navi$ MatchPattern=^\@elin_twi ChannelName=#Navi
> なびこからの正規(先頭@)Replyを#Naviへ流す、他チャンネルへは表示させない
2: Drop: MatchPattern=^.{,3}$
> 3文字以下の価値のないTweetを表示しない
3: Drop: MatchPattern=#(4ji)$
> 末尾"#4ji"の価値のないTweetを表示しない
4: Drop: MatchPattern=http:\/\/shindanmaker\.com\/[0-9]+
> 価値のないURLを含むTweetを表示しない
5: Drop: MatchPattern=((.)(?!\2)(.)\2\3$|(ぺろ|ほむ){2,})
> 末尾"あうあう"などの別2文字繰り返しで終わる、もしくは"ほむほむ"、"ほむぺろ"、"ぺろぺろ"などの価値のないTweetを表示しない
6: Drop: MatchPattern=^(.+?) RT \@[0-9a-zA-Z_]+: \1
> "ほげ RT @you: ほげ"などの同じ内容でRetweetされている価値のないTweetを表示しない
[HR]
同日15時 追記
より厳密なパターンへの更新及び追加
0: Redirect:[DISABLED] MatchPattern=\@elin_twi ChannelName=#Replies
1: Redirect: UserMatchPattern=^mikomoe_navi$ MatchPattern=^\@elin_twi ChannelName=#Navi
2: Drop: MatchPattern=^.{,3}$
3: Drop: MatchPattern=#(4ji|nico[a-z_]+|sm[0-9]+)(?![^ ])
> 完全な"#4ji"や糞動画のハッシュタグを含む価値のないTweetを表示しない
4: Drop: MatchPattern=http:\/\/shindanmaker\.com\/[0-9]+
5: Drop: MatchPattern=^The (.+?) Daily is out!
> paper.li、ResolveTinyUrl=1で"http:\/\/paper\.li\/[0-9a-zA-Z_]+"でも殺せるかもしれない
6: Drop: MatchPattern=(^(.)(?!\2)(.)(\2\3)+$|(ぺろ|ほむ){2,})
> "あうあうあう"などの別2文字繰り返しのみ、もしくは"ほむほむ"、"ほむぺろ"、"ぺろぺろ"などの価値のないTweetを表示しない
7: Drop: MatchPattern=^(.+?) RT \@[0-9a-zA-Z_]+: \1
[HR]
18日2時 追記
クソ動画対応
0: Redirect:[DISABLED] MatchPattern=\@elin_twi ChannelName=#Replies
1: Redirect: UserMatchPattern=^mikomoe_navi$ MatchPattern=^\@elin_twi ChannelName=#Navi
2: Drop: MatchPattern=^.{,3}$
3: Drop: MatchPattern=(^(.)(\2)+$|^(.)(?!\4)(.)(\4\5)+$|(ぺろ|ほむ){2,})
> 前6番に加えて"あああ"などの同1文字のみの価値のないTweetを表示しない
4: Drop: MatchPattern=^(.+?) RT \@[0-9a-zA-Z_]+: \1
5: Drop: MatchPattern=#(4ji)(?![^ ])
> 完全な"#4ji"を含む価値のないTweetを表示しない
6: Drop: MatchPattern=http:\/\/shindanmaker\.com\/[0-9]+
7: Drop: MatchPattern=(#nico[a-z_]+|http:\/\/nico\.ms\/[a-z]{2}?[0-9]+.*?#(sm|im|so)[0-9]+)
> 糞動画に関わる価値のないTweetを表示しない、糞生は除く
8: Drop: MatchPattern=^The (.+?) Daily is out!
9: Redirect: MatchPattern=(\( #[0-9a-zA-Z_]+ live at http:\/\/ustre\.am\/[0-9a-zA-Z_]+\)|#stickamjp|http:\/\/nico\.ms\/lv[0-9]+#-[0-9]+:[0-9]+:[0-9]+) ChannelName=#Grep(FF)
> Ustream、Stickam、糞生などの連投になりがちなTweetは専用のチャンネルへ流す、他チャンネルへは表示させない
[HR]
20 日18時 追記
完全なnoob対応
0: Redirect:[DISABLED] MatchPattern=\@elin_twi ChannelName=#Replies
1: Redirect: UserMatchPattern=^mikomoe_navi$ MatchPattern=^\@elin_twi ChannelName=#Navi
2: Drop:[DISABLED] MatchPattern=^.{,3}$
> 正しく動かない?別の方法を検討中
3: Drop: MatchPattern=(^(.)(\2)+$|^(.)(?!\4)(.)(\4\5)+$|(ぺろ|ほむ){2,})
4: Drop: MatchPattern=^(.+?) RT \@[0-9a-zA-Z_]+: \1
5: Drop: MatchPattern=(#(4ji)(?![^ ])|^まいんちゃんと$)
> 指定ハッシュを含む、もしくは定時系の価値のないTweetを表示しない
6: Drop: MatchPattern=http:\/\/shindanmaker\.com\/[0-9]+
7: Drop: MatchPattern=(#nico[a-z_]+|http:\/\/nico\.ms\/[a-z]{2}?[0-9]+.*?#(sm|im|so)[0-9]+)
8: Drop: MatchPattern=^The (.+?) Daily is out!
9: Redirect: MatchPattern=(\( #[0-9a-zA-Z_]+ live at http:\/\/ustre\.am\/[0-9a-zA-Z_]+\)|#stickamjp|http:\/\/nico\.ms\/lv[0-9]+#-[0-9]+:[0-9]+:[0-9]+) ChannelName=#Grep(FF)
10: RewriteContent: MessageType=PRIVMSG MatchPattern=[\x09\x20]*\[(もばつい)\]$
11: Drop: MatchPattern=(^|RT \@[0-9a-zA-Z_]+: )【.*?(RT|リツイート|速報|緊急|拡散|希望|推奨|募集|急募).*?】(?(1)|$)
> 前方か後方、もしくはRT形式に続く【】に括られた指定文字列を含む価値のないTweetを表示しない
12: Drop: MatchPattern=((お(か|つ|は|や))あり|阻止 RT \@[0-9a-zA-Z_]+: .+?)
> まるで意味のわからないTweetを表示しない
[HR]
26日1時 追記
バグ修正と1点追加
0: Redirect:[DISABLED] MatchPattern=\@elin_twi ChannelName=#Replies
1: Redirect: UserMatchPattern=^mikomoe_navi$ MatchPattern=^\@elin_twi ChannelName=#Navi
2: Drop:[DISABLED] MatchPattern=^.{,3}$
3: Drop: MatchPattern=(^(.)(\2)+$|^(.)(?!\4)(.)(\4\5)+$|(ぺろ|ほむ){2,})
4: Drop: MatchPattern=^(.+?) RT \@[0-9a-zA-Z_]+: \1
5: Drop: MatchPattern=(#(4ji|qanow)(?![^ ])|^まいんちゃんと$)
> 対象ハッシュタグに#qanowを追加
6: Drop: MatchPattern=http:\/\/shindanmaker\.com\/[0-9]+
7: Drop: MatchPattern=(#nico[a-z_]+|http:\/\/nico\.ms\/[a-z]{2}?[0-9]+.*?#(sm|im|so)[0-9]+)
8: Drop: MatchPattern=^The (.+?) Daily is out!
9: Redirect: MatchPattern=(\( #[0-9a-zA-Z_]+ live at http:\/\/ustre\.am\/[0-9a-zA-Z_]+\)|#stickamjp|http:\/\/nico\.ms\/lv[0-9]+#-([0-9]+:)?[0-9]+:[0-9]+) ChannelName=#Grep(FF)
> 正規表現のミスを修正
10: RewriteContent: MessageType=PRIVMSG MatchPattern=[\x09\x20]*\[(もばつい)\]$
11: Drop: MatchPattern=(^|RT \@[0-9a-zA-Z_]+: )【.*?(RT|リツイート|速報|緊急|拡散|希望|推奨|募集|急募).*?】(?(1)|$)
12: Drop: MatchPattern=((お(か|つ|は|や))あり|阻止 RT \@[0-9a-zA-Z_]+: .+?)