#nop vim: set filetype=tt:; /* 本文件属于 PaoTin++ 的一部分。 PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp ) 享有并保留一切法律权利 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。 */ ///=== { ///// chat 模块用来分类聊天记录,分别存放到单独的日志文件里。 // }; #var lib_ui_chat[META] { {NAME} {聊天日志} {DESC} {抓取聊天信息,分置到不同的日志文件里去} {AUTHOR} {担子炮} }; #var chat-channel {}; #list chat-channel create { {{pattern}{求助} {action}{helpmeLog} {gag}{true}} {{pattern}{北侠QQ群} {action}{qqLog} {gag}{true}} {{pattern}{%!{闲聊|副本|谣言}} {action}{chatLog} {gag}{true}} {{pattern}{%!{江湖|任务|交易}} {action}{jhLog} {gag}{true}} {{pattern}{%!{队伍|门派|本地|区域}} {action}{bdLog} {gag}{true}} {{pattern}{私聊} {action}{tellLog} {gag}{false}} {{pattern}{%*} {action}{groupLog} {gag}{true}} }; load-lib storage; load-lib alert; #func {lib_ui_chat.Init} { load-file {etc/ui-chat.tin}; #return true; }; #nop 普通聊天信息; #action {~^%c【%+2..5u】%c%*%+1..10u%c({[a-z A-Z]+})%c: %*$E} { chat.log {%2} {%0}; } {4.994}; #nop 单行的 emote 表情; #action {~{*UTF8}{?:^}%c【{\p{Han}{2,5}}】%*(%+1..S{| \S+}%s||%s{\S+ |}%+1..S)%c{|◆\p{Han}+◆}%c$E} { chat.log {%2} {%0}; } {4.994}; #nop 多行的 emote 表情; #action {~^%c【%+2..5u】%*$E} { chat.log-multi-line {%2} {%0}; } {4.995}; #alias {chat.log} { #local type {%1}; #local text {%2}; #local id {}; #loop {1} {&chat-channel[]} {id} { #local pattern {$chat-channel[$id][pattern]}; #local action {$chat-channel[$id][action]}; #local gag {$chat-channel[$id][gag]}; #if { "$type" == "$pattern" } { $action $text; #if { "$gag" == "true" } { #line gag; }; #return; }; }; }; #alias {chat.log-multi-line} { #local type {%1}; #local text {%2}; chat.log {$type} {$text}; #if { "$type" == "本地" } { #if { {$text} == {%*天空中突然闪出一道绚丽的火花%*} } { #class chat.log open; #action {~^%*{|ID=chat.log}$} { chat.log {%1} {%%0}; } {4.993}; #action {~^%c{\e\[2;37;0m|}\e[36m{|\e\[2;37;0m }{|\e\[0m}{|ID=chat.log}$} { chat.log {%1} {%%0}; #class chat.log kill; } {4.992}; #delay chat.log {#class chat.log kill} 0; #class chat.log close; }; }; #if { "$type" == "江湖" } { #if { {$text} == {%*神力和纵跃排行榜%*} } { #class chat.log open; #action {~^%*{|ID=chat.log}$} { chat.log {%1} {%%0}; } {4.993}; #action {~^%c{[' -]+}%c{|ID=chat.log}$} { chat.log {%1} {%%0}; #class chat.log kill; } {4.992}; #delay chat.log {#class chat.log kill} 0; #class chat.log close; }; #elseif { {$text} == {%*{[^m )]}\e[0m} } { #local lines {1}; #if { {$text} == {%*请大家挖泥之余去各大BBS和论坛宣传北大侠客行,宣传内容详见%*} } { #local lines {2}; }; #line multishot $lines #action {~^%*{|ID=chat.log}$} { chat.log {%1} {%%0}; } {4.993}; }; #return; }; #if { "$type" != "{闲聊|求助|谣言}" } { #return; }; #if { "$type" == "{闲聊|谣言}" && {$text} == {%* {\e\[0m}} } { #return; }; #if { {$text} == {%c【求助】{我是大高手|大高手告诉|大高手说}%*} } { #return; }; #if { {$text} == {%c【谣言】某人: 我看到了!!就是%*造的谣!!%c} } { #return; }; #class chat.log open; #action {~^%*{|ID=chat.log}$} { chat.log {%1} {%%0}; } {4.993}; #action {~^%*(%w%s||%s{\S+ |}%+1..S)%c{|ID=chat.log}$} { chat.log {%1} {%%0}; #class chat.log kill; } {4.992}; #if { "$type" == "{闲聊|谣言}" } { #action {~^%*{\S \e\[0m}{|ID=chat.log}$} { chat.log {%1} {%%0}; #class chat.log kill; } {4.992}; }; #delay chat.log {#class chat.log kill} 0; #class chat.log close; }; #action {~^%c%u%c(%w)告诉你:%*$} {alert.Add 有私聊; chat.log 私聊 {%0}} {9.999}; #action {~^%c%u%c回答你:%*$} {alert.Add 有私聊; chat.log 私聊 {%0}} {9.999}; #action {~^%c你告诉%c%u%c:%*$} {chat.log 私聊 {%0}} {9.997}; #action {~^%c你回答%c%u%c:%*$} {chat.log 私聊 {%0}} {9.997}; #var chat-open-channels {UNKNOWN}; #var chat-todo-channels {}; ///=== { // ## chat.TuneOff <频道ID> [...] // 关闭聊天频道。参数为一个或多个频道 ID。 // 可用的频道 ID 有: // - 常用: chat rumor qq rw jh helpme // - 不常用: bd fb tt group nation qy jy mp // }; #alias {chat.TuneOff} { #info arguments save; #unvar info[ARGUMENTS][0]; #local chans {@sset.Create{$info[ARGUMENTS][]}}; #local chan {}; #if { "$chat-open-channels" == "UNKNOWN" } { #foreach {$chans} {chan} { #var chat-todo-channels[$chan] {off}; }; }; #else { #local todo {@sset.Intersection{{$chans};{$chat-open-channels}}}; #foreach {$todo} {chan} { tune channel $chan; }; }; #return; }; ///=== { // ## chat.TuneOn <频道ID> [...] // 打开聊天频道。参数为一个或多个频道 ID。 // 可用的频道 ID 有: // - 常用: chat rumor qq rw jh helpme // - 不常用: bd fb tt group nation qy jy mp // }; #alias {chat.TuneOn} { #info arguments save; #unvar info[ARGUMENTS][0]; #local chans {@sset.Create{$info[ARGUMENTS][]}}; #local chan {}; #if { "$chat-open-channels" == "UNKNOWN" } { #foreach {$chans} {chan} { #var chat-todo-channels[$chan] {on}; }; }; #else { #local todo {@sset.Diff{{$chans};{$chat-open-channels}}}; #foreach {$todo} {chan} { tune channel $chan; }; }; #return; }; ///=== { // ## chat.OpenAll // 打开所有聊天频道。 // }; #alias {chat.OpenAll} { tune channel; chat.TuneOn bd chat fb group helpme jh jy mp nation qq qy rumor rw tt; }; ///=== { // ## chat.CloseAll // 关闭所有聊天频道。 // }; #alias {chat.CloseAll} { tune channel; chat.TuneOff bd chat fb group helpme jh jy mp nation qq qy rumor rw tt; }; #nop 你现在打开的频道:bd, fb, group, helpme, jh, jy, mp, nation, qq, qy, rumor, rw, tt。; #action {^你现在打开的频道:%*。{|ID=paotin/chat}$} { #local channels {%1}; #replace channels {, } {;}; #var chat-open-channels {@sset.Create{$channels}}; chat.tune; }; #action {^你现在并没有打开任何频道。{|ID=paotin/chat}$} { #var chat-open-channels {}; chat.tune; }; #alias {chat.tune} { #local chan {}; #foreach {*chat-todo-channels[]} {chan} { #local todo {$chat-todo-channels[$chan]}; #local set {$chat-open-channels}; #if { "$todo" == "on" && !@sset.Contains{{$set};$chan} } { tune channel $chan; }; #elseif { "$todo" == "off" && @sset.Contains{{$set};$chan} } { tune channel $chan; }; #unvar chat-todo-channels[$chan]; }; }; event.HandleOnce {user-online} {chat/init} {ui/chat} { tune channel; set learn_emote 1; };