"Danmuji":true,//反射型弹幕机,回应弹幕
"Danmuji_auto":false,//自动型弹幕机,定时输出
"Autoskip":true,//刷屏缩减,相同合并
- "Lessdanmu":true,//弹幕缩减,显示差异大的
+ "Lessdanmu":false,//弹幕缩减,显示差异大的
+ "Moredanmu":false,//弹幕增量
}
func IsOn(s string) bool {
}
autoskip.num -= 1
i, ok := autoskip.buf.LoadAndDelete(s);
- if ok && i.(int) > 0 {fmt.Println(s, "+", i)}
+ if ok && i.(int) > 1 {fmt.Println(s, "+", i)}
}()
return 0
}
}
o := cross(s, lessdanmu.buf)
- lessdanmu.avg = (0.8 * lessdanmu.avg + 0.2 * o)
- return o > lessdanmu.avg
+ lessdanmu.avg = (95 * lessdanmu.avg + 5 * o) / 100
+ return o < lessdanmu.avg
}
-func cross(a string,buf []string) float32 {
- var (
- s float32
- all float32
- )
- for _,v1 := range buf {
- for _,v2 := range v1 {
- for _,v3 := range a {
- if v3 == v2 {s += 1}
- all += 1
+func cross(a string,buf []string) (float32) {
+ var s float32
+ for _,v1 := range a {
+ var matched bool
+ for _,v2 := range buf {
+ for _,v3 := range v2 {
+ if v3 == v1 {matched = true;break}
}
+ if matched {break}
}
-
+ if matched {s += 1}
}
- return s / all
+ return s / float32(len(a))
}
\ No newline at end of file
数据为WS_OP_MESSAGE类型的
*/
-var msglog = p.Logf().New().Base(-1, "Msg.go>").Open("danmu.log").Level(1)
+var msglog = p.Logf().New().Base(-1, "Msg.go").Open("danmu.log").Level(1)
var Msg_cookie string
var Msg_roomid int
var Msg_map = map[string]func(replayF, string) {
}
func (replayF) guard_buy(s string){
- msglog.Fileonly(true).Base(1, "礼")
- defer msglog.Fileonly(false)
+ msglog.Fileonly(true).Base(-1, "礼")
+ defer msglog.Base(0).Fileonly(false)
+
username := p.Json().GetValFromS(s, "data.username");
gift_name := p.Json().GetValFromS(s, "data.gift_name");
price := p.Json().GetValFromS(s, "data.price");
sh = append(sh, "购买了", gift_name)
}
if price != nil {
- sh = append(sh, "¥", price)
+ sh = append(sh, "¥", int(price.(float64)) / 1000)
}
fmt.Println("====")
sh = append(sh, giftName)
}
if price != nil {
- allprice = int64(num.(float64) * price.(float64))
- sh = append(sh, "(", allprice, "x 金瓜子 )")
+ allprice = int64(num.(float64) * price.(float64) / 1000)
+ sh = append(sh, "¥", allprice)
}
if len(sh) == 0 {return}
- msglog.Fileonly(true).Base(1, "礼")
- defer msglog.Fileonly(false)
+ msglog.Fileonly(true).Base(-1, "礼")
+ defer msglog.Base(0).Fileonly(false)
//小于3万金瓜子
if allprice < 30000 {msglog.T(sh...);return}
}
func (replayF) room_block_msg(s string) {
- msglog.Fileonly(true).Base(1, "封")
- defer msglog.Fileonly(false)
+ msglog.Fileonly(true).Base(-1, "封")
+ defer msglog.Base(0).Fileonly(false)
if uname := p.Json().GetValFromS(s, "uname");uname == nil {
msglog.E("uname", uname)
}
func (replayF) entry_effect(s string){
- msglog.Fileonly(true).Base(1, "房")
- defer msglog.Fileonly(false)
+ msglog.Fileonly(true).Base(-1, "房")
+ defer msglog.Base(0).Fileonly(false)
if copy_writing := p.Json().GetValFromS(s, "data.copy_writing");copy_writing == nil {
msglog.E("copy_writing", copy_writing)
msglog.Fileonly(true)
defer msglog.Fileonly(false)
+ //F附加方法
Danmujif(msg, Msg_cookie, Msg_roomid)
if Autobanf(msg) > 0.5 {
msglog.Base(1, "风险").I(msg)
msglog.I(auth, ":", msg)
return
}
- if Lessdanmuf(msg, 50) {
+ if Lessdanmuf(msg, 200) {
msglog.I(auth, ":", msg)
return
}
Token string
}
+var apilog = p.Logf().New().Base(-1, "api.go").Level(LogLevel)
func New_api(Roomid int) (o *api) {
- l := p.Logf().New().Base(-1, "api.go>新建").Level(LogLevel).T("New_api")
- defer l.Block()
+ apilog.Base(-1, "新建")
+ defer apilog.Base(0)
- l.T("ok")
+ apilog.T("ok")
o = new(api)
o.Roomid = Roomid
o.Get_info()
}
func (i *api) Get_info() (o *api) {
- o = i
- l := p.Logf().New().Base(-1, "api.go>获取房号").Level(LogLevel).T("*api.Get_info")
- defer l.Block()
+ o = i
+ apilog.Base(-1, "获取房号")
+ defer apilog.Base(0)
if o.Roomid == 0 {
- l.E("还未New_api")
+ apilog.E("还未New_api")
return
}
Roomid := strconv.Itoa(o.Roomid)
Timeout:10,
Retry:2,
});err != nil {
- l.E(err)
+ apilog.E(err)
return
}
res := string(req.Respon)
if msg := p.Json().GetValFrom(res, "msg");msg == nil || msg != "ok" {
- l.E("msg", msg)
+ apilog.E("msg", msg)
return
}
if Uid := p.Json().GetValFrom(res, "data.uid");Uid == nil {
- l.E("data.uid", Uid)
+ apilog.E("data.uid", Uid)
return
} else {
o.Uid = int(Uid.(float64))
}
if room_id := p.Json().GetValFrom(res, "data.room_id");room_id == nil {
- l.E("data.room_id", room_id)
+ apilog.E("data.room_id", room_id)
return
} else {
- l.T("ok")
+ apilog.T("ok")
o.Roomid = int(room_id.(float64))
}
return
func (i *api) Get_host_Token() (o *api) {
o = i
- l := p.Logf().New().Base(-1, "api.go>获取host key").Level(LogLevel).T("*api.Get_host_Token")
- defer l.Block()
+ apilog.Base(-1, "获取host key")
+ defer apilog.Base(0)
if o.Roomid == 0 {
- l.E("还未New_api")
+ apilog.E("还未New_api")
return
}
Roomid := strconv.Itoa(o.Roomid)
Timeout:10,
Retry:2,
});err != nil {
- l.E(err)
+ apilog.E(err)
return
}
res := string(req.Respon)
if msg := p.Json().GetValFrom(res, "message");msg == nil || msg != "0" {
- l.E("message", msg)
+ apilog.E("message", msg)
return
}
_Token := p.Json().GetValFrom(res, "data.token")
if _Token == nil {
- l.E("data.token", _Token, res)
+ apilog.E("data.token", _Token, res)
return
}
o.Token = _Token.(string)
if host_list := p.Json().GetValFrom(res, "data.host_list");host_list == nil {
- l.E("data.host_list", host_list)
+ apilog.E("data.host_list", host_list)
return
} else {
for k, v := range host_list.([]interface{}) {
if _host := p.Json().GetValFrom(v, "host");_host == nil {
- l.E("data.host_list[", k, "].host", _host)
+ apilog.E("data.host_list[", k, "].host", _host)
continue
} else {
o.Url = append(o.Url, "wss://" + _host.(string) + "/sub")
}
}
- l.T("ok")
+ apilog.T("ok")
}
return
//返回数据分派
func Reply(b []byte) {
+ danmulog.Base(-1, "返回分派")
+ defer danmulog.Base(0)
if ist, _ := headChe(b[:16], len(b), WS_BODY_PROTOCOL_VERSION_DEFLATE, WS_OP_MESSAGE, 0, 4); ist {
Msg(b, true);return
Msg(b, false);return
}
- danmulog.Base(1, "返回分派")
-
if ist, _ := headChe(b[:16], len(b), WS_HEADER_DEFAULT_VERSION, WS_OP_HEARTBEAT_REPLY, WS_HEADER_DEFAULT_SEQUENCE, 4); ist {
danmulog.T("heartbeat replay!");
return
}
func headChe(head []byte, datalenght,Bodyv,Opeation,Sequence,show int) (bool,int32) {
+ danmulog.Base(-1, "头部检查")
+ defer danmulog.Base(0)
+
if len(head) != WS_PACKAGE_HEADER_TOTAL_LENGTH {return false, 0}
- danmulog.Base(-1, "头部检查").Level(show)
- defer danmulog.Base(0).Level(LogLevel)
+ danmulog.Level(show)
+ defer danmulog.Level(LogLevel)
packL := Btoi32(head[:4])
//认证生成与检查
func hello_send(roomid int, key string) []byte {
+ danmulog.Base(-1, "认证生成")
+ defer danmulog.Base(0)
if roomid == 0 || key == "" {
- danmulog.Base(1, "认证生成").E("roomid == 0 || key == \"\"")
+ danmulog.E("roomid == 0 || key == \"\"")
return []byte("")
}