From 9cc651e95f7db9e9c330d27fa1df20cd1ede95db Mon Sep 17 00:00:00 2001 From: qydysky Date: Mon, 14 Jun 2021 04:27:34 +0800 Subject: [PATCH] =?utf8?q?TTS=E8=AF=AD=E9=9F=B3=E5=90=88=E6=88=90=E8=87=AA?= =?utf8?q?=E7=94=B1=E5=BA=A6=E5=A4=A7=E6=8F=90=E5=8D=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- README.md | 17 +- Reply/F.go | 7 + Reply/Reply.go | 279 ++++++++++++++----------- Reply/tts.go | 53 +++-- Reply/ws_msg/SEND_GIFT.go | 105 ++++++++++ Reply/ws_msg/SUPER_CHAT_MESSAGE_JPN.go | 55 +++++ Reply/ws_msg/USER_TOAST_MSG.go | 31 +++ demo/config/config_tts.json | 37 +++- 8 files changed, 427 insertions(+), 157 deletions(-) create mode 100644 Reply/ws_msg/SEND_GIFT.go create mode 100644 Reply/ws_msg/SUPER_CHAT_MESSAGE_JPN.go create mode 100644 Reply/ws_msg/USER_TOAST_MSG.go diff --git a/README.md b/README.md index bf3e68d..25bfb92 100644 --- a/README.md +++ b/README.md @@ -285,16 +285,17 @@ config_K_v.json ``` release默认编译tts -总开关,自定义响应的事件可在`demo/config/config_tts.json`中编辑 +总开关,自定义响应的事件可在`demo/config/config_tts.json`中编辑。{}为传递过来的变量,将会按设定替换。最后未使用的{}会全部删除。下例:`ABC购买 1个月舰长`。 +``` +... +"0buyguide-help": "大航海 {username}:用户 {op_name}:购买方式 {role_name}:大航海类型 {num}:个数 {unit}:时间单位", +"0buyguide": "{username}{op_name} {num}个{unit}{role_name}", +... ``` -{D}:为tts内容 -key为demo/face下的文件名 -"onoff":{ - "help":"空字符串将不触发,{D}会被替换", - "0buyguide": "感谢{D}" -} -有些无法被tts引擎阅读的符号可以在此项中替换 +特别说明的,下面结构为全局替换。 + +``` "replace":{ "?":"问号", "?":"问号" diff --git a/Reply/F.go b/Reply/F.go index fe02427..d6698c3 100644 --- a/Reply/F.go +++ b/Reply/F.go @@ -1625,6 +1625,13 @@ func init(){ delete(autoskip.buf,k) {//超时显示 if v.Num > 3 { + c.Danmu_Main_mq.Push_tag(`tts`,Danmu_mq_t{//传入消息队列 + uid:`0multi`, + m:map[string]string{ + `{num}`:strconv.Itoa(int(v.Num)), + `{msg}`:k, + }, + }) Msg_showdanmu(Danmu_item{ msg:strconv.Itoa(int(v.Num)) + " x " + k, uid:`0multi`, diff --git a/Reply/Reply.go b/Reply/Reply.go index 628e8e7..e776203 100644 --- a/Reply/Reply.go +++ b/Reply/Reply.go @@ -129,7 +129,9 @@ func (replyF) vtr_gift_lottery(s string){ {//语言tts c.Danmu_Main_mq.Push_tag(`tts`,Danmu_mq_t{ uid:`0room`, - msg:fmt.Sprint(j.Data.InteractMsg), + m:map[string]string{ + `{msg}`:j.Data.InteractMsg, + }, }) } Gui_show(j.Data.InteractMsg,`0room`) @@ -205,51 +207,67 @@ func (replyF) anchor_lot_award(s string){ //msg-通常是大航海购买续费 func (replyF) user_toast_msg(s string){ - username := p.Json().GetValFromS(s, "data.username"); - op_type := p.Json().GetValFromS(s, "data.op_type"); - uid := p.Json().GetValFromS(s, "data.uid"); - role_name := p.Json().GetValFromS(s, "data.role_name"); - num := p.Json().GetValFromS(s, "data.num"); - unit := p.Json().GetValFromS(s, "data.unit"); - // target_guard_count := p.Json().GetValFromS(s, "data.target_guard_count"); - price := p.Json().GetValFromS(s, "data.price"); + msglog := msglog.Base_add("礼") + + var j ws_msg.USER_TOAST_MSG + if e := json.Unmarshal([]byte(s), &j);e != nil{ + msglog.L(`E: `, e) + return + } + + username := j.Data.Username + op_type := j.Data.OpType + uid := j.Data.UID + role_name := j.Data.RoleName + num := j.Data.Num + unit := j.Data.Unit + // target_guard_count := j.Data.target_guard_count + price := j.Data.Price var sh []interface{} var sh_log []interface{} - if username != nil { + if username != "" { sh = append(sh, username) } - if op_type != nil { - switch op_type.(float64) { - case 1: - sh = append(sh, "购买了") - case 2: - sh = append(sh, "续费了") - case 3: - sh = append(sh, "自动续费了") - default: - msglog.L(`W`, s) - sh = append(sh, op_type) - } - } - if num != nil { + op_name := "" + switch op_type { + case 1: + op_name = `购买` + sh = append(sh, "购买了") + case 2: + op_name = `续费` + sh = append(sh, "续费了") + case 3: + op_name = `自动续费` + sh = append(sh, "自动续费了") + default: + msglog.L(`W`, s) + sh = append(sh, op_type) + } + if num != 0 { sh = append(sh, num, "个") } - if unit != nil { + if unit != "" { sh = append(sh, unit) } - if role_name != nil { + if role_name != "" { sh = append(sh, role_name) } - if price != nil { - sh_log = append(sh, "¥", int(price.(float64)) / 1000)//不在界面显示价格 - c.Danmu_Main_mq.Push_tag(`c.Rev_add`,price.(float64) / 1000) + if price != 0 { + sh_log = append(sh, "¥", price / 1000)//不在界面显示价格 + c.Danmu_Main_mq.Push_tag(`c.Rev_add`,price / 1000) } {//语言tts c.Danmu_Main_mq.Push_tag(`tts`,Danmu_mq_t{//传入消息队列 uid:`0buyguide`, - msg:fmt.Sprint(sh...), + m:map[string]string{ + `{username}`:username, + `{op_name}`:op_name, + `{role_name}`:role_name, + `{num}`:strconv.Itoa(num), + `{unit}`:unit, + }, }) } {//额外 ass 私信 @@ -257,7 +275,7 @@ func (replyF) user_toast_msg(s string){ c.Danmu_Main_mq.Push_tag(`guard_update`,nil)//使用连续付费的新舰长无法区分,刷新舰长数 if uid != 0 { c.Danmu_Main_mq.Push_tag(`pm`,send.Pm_item{ - Uid:int(uid.(float64)), + Uid:uid, Msg:c.K_v.LoadV(`上舰私信`).(string), })//上舰私信 } @@ -276,7 +294,7 @@ func (replyF) user_toast_msg(s string){ Gui_show(Itos(sh), "0buyguide") // Gui_show("====\n") - msglog.Base_add("礼").Log_show_control(false).L(`I: `,sh_log...) + msglog.Log_show_control(false).L(`I: `,sh_log...) } //HeartBeat-心跳用来传递人气值 @@ -404,74 +422,72 @@ func (replyF) room_change(s string){ msglog.Base_add("房").L(`I: `, sh...) } -//Msg-大航海欢迎信息 +//Msg-大航海欢迎信息 或已废弃 func (replyF) welcome_guard(s string){ - - username := p.Json().GetValFromS(s, "data.username"); - guard_level := p.Json().GetValFromS(s, "data.guard_level"); - img := "0default" - - var sh = []interface{}{"欢迎"} - - if guard_level != nil { - switch guard_level.(float64) { - case 1:sh = append(sh, "总督");img="0level1" - case 2:sh = append(sh, "提督");img="0level2" - case 3:sh = append(sh, "舰长");img="0level3" - default:sh = append(sh, "等级", guard_level) - } - } - if username != nil { - sh = append(sh, username, "进入直播间") - } - {//语言tts - c.Danmu_Main_mq.Push_tag(`tts`,Danmu_mq_t{//传入消息队列 - uid:img, - msg:fmt.Sprintln(sh...), - }) - } - fmt.Print(">>> ") - fmt.Println(sh...) - Gui_show(Itos(append([]interface{}{">>> "}, sh...)), img) - - msglog.Base_add("房").Log_show_control(false).L(`I: `, sh...) + // username := p.Json().GetValFromS(s, "data.username"); + // guard_level := p.Json().GetValFromS(s, "data.guard_level"); + // img := "0default" + + // var sh = []interface{}{"欢迎"} + + // if guard_level != nil { + // switch guard_level.(float64) { + // case 1:sh = append(sh, "总督");img="0level1" + // case 2:sh = append(sh, "提督");img="0level2" + // case 3:sh = append(sh, "舰长");img="0level3" + // default:sh = append(sh, "等级", guard_level) + // } + // } + // if username != nil { + // sh = append(sh, username, "进入直播间") + // } + // {//语言tts + // c.Danmu_Main_mq.Push_tag(`tts`,Danmu_mq_t{//传入消息队列 + // uid:img, + // msg:fmt.Sprintln(sh...), + // }) + // } + // fmt.Print(">>> ") + // fmt.Println(sh...) + // Gui_show(Itos(append([]interface{}{">>> "}, sh...)), img) + + // msglog.Base_add("房").Log_show_control(false).L(`I: `, sh...) } //Msg-礼物处理 func (replyF) send_gift(s string){ - coin_type := p.Json().GetValFromS(s, "data.coin_type"); - if coin_type != nil && coin_type == "silver" {return} + msglog := msglog.Base_add("礼").Log_show_control(false) - num := p.Json().GetValFromS(s, "data.num"); - uname := p.Json().GetValFromS(s, "data.uname"); - action := p.Json().GetValFromS(s, "data.action"); - giftName := p.Json().GetValFromS(s, "data.giftName"); - total_coin := p.Json().GetValFromS(s, "data.total_coin"); + var j ws_msg.SEND_GIFT + if e := json.Unmarshal([]byte(s), &j);e != nil { + msglog.L(`E: `, e) + } + + //忽略银瓜子 + if j.Data.CoinType == "silver" {return} + + num := j.Data.Num + uname := j.Data.Uname + action := j.Data.Action + giftName := j.Data.Giftname + total_coin := j.Data.TotalCoin var sh []interface{} var sh_log []interface{} var allprice float64 - if uname != nil { - sh = append(sh, uname) - } - if action != nil { - sh = append(sh, action) - } - if num != nil { - sh = append(sh, num, "个") - } - if giftName != nil { - sh = append(sh, giftName) - } - if total_coin != nil { - allprice = total_coin.(float64) / 1000 + sh = append(sh, uname) + sh = append(sh, action) + sh = append(sh, num, "个") + sh = append(sh, giftName) + + if total_coin != 0 { + allprice = float64(total_coin) / 1000 sh_log = append(sh, fmt.Sprintf("¥%.1f",allprice))//不在界面显示价格 c.Danmu_Main_mq.Push_tag(`c.Rev_add`,allprice) } if len(sh) == 0 {return} - msglog := msglog.Base_add("礼").Log_show_control(false) //小于设定 { @@ -486,7 +502,12 @@ func (replyF) send_gift(s string){ {//语言tts c.Danmu_Main_mq.Push_tag(`tts`,Danmu_mq_t{//传入消息队列 uid:`0gift`, - msg:fmt.Sprintln(sh...), + m:map[string]string{ + `{num}`:strconv.Itoa(num), + `{uname}`:uname, + `{action}`:action, + `{giftName}`:giftName, + }, }) } {//额外 @@ -569,9 +590,16 @@ func (replyF) live(s string) { //Msg-超级留言处理 var sc_buf = make(map[string]struct{}) func (replyF) super_chat_message(s string){ - id := p.Json().GetValFromS(s, "data.id"); - if id != nil { - if _,ok := sc_buf[id.(string)];ok{return} + msglog := msglog.Base_add("礼") + + var j ws_msg.SUPER_CHAT_MESSAGE_JPN + if e := json.Unmarshal([]byte(s), &j);e != nil { + msglog.L(`E: `, e) + } + + id := j.Data.ID + if id != "" { + if _,ok := sc_buf[id];ok{return} if len(sc_buf) >= 10 { for k,_ := range sc_buf {delete(sc_buf, k);break} {//copy map @@ -580,28 +608,26 @@ func (replyF) super_chat_message(s string){ sc_buf = tmp } } - sc_buf[id.(string)] = struct{}{} + sc_buf[id] = struct{}{} } - uname := p.Json().GetValFromS(s, "data.user_info.uname"); - price := p.Json().GetValFromS(s, "data.price"); - message := p.Json().GetValFromS(s, "data.message"); - message_jpn := p.Json().GetValFromS(s, "data.message_jpn"); + uname := j.Data.UserInfo.Uname + price := j.Data.Price + message := j.Data.Message + message_jpn := j.Data.MessageJpn var sh = []interface{}{"SC: "} - if uname != nil { - sh = append(sh, uname) - } + sh = append(sh, uname) logg := sh - if price != nil { + if price != 0 { sh = append(sh, "\n")//界面不显示价格 logg = append(logg, "¥", price) - c.Danmu_Main_mq.Push_tag(`c.Rev_add`,price.(float64)) + c.Danmu_Main_mq.Push_tag(`c.Rev_add`,float64(price)) } fmt.Println("====") fmt.Println(sh...) // Gui_show("\n====") - if message != nil && message.(string) != ""{ + if message != "" { fmt.Println(message) // Gui_show(message.(string)) sh = append(sh, message) @@ -610,10 +636,15 @@ func (replyF) super_chat_message(s string){ {//语言tts c.Danmu_Main_mq.Push_tag(`tts`,Danmu_mq_t{//传入消息队列 uid:`0superchat`, - msg:fmt.Sprintln(sh...), + m:map[string]string{ + `{uname}`:uname, + `{price}`:strconv.Itoa(price), + `{message}`:message, + `{message_jpn}`:message_jpn, + }, }) } - if message_jpn != nil && message.(string) != message_jpn.(string) && message_jpn.(string) != "" { + if message != message_jpn && message_jpn != "" { fmt.Println(message_jpn) // Gui_show(message_jpn.(string)) sh = append(sh, message_jpn) @@ -626,7 +657,7 @@ func (replyF) super_chat_message(s string){ // Gui_show("====\n") Gui_show(Itos(sh), "0superchat") } - msglog.Base_add("礼").Log_show_control(false).L(`I: `, logg...) + msglog.Log_show_control(false).L(`I: `, logg...) } //Msg-分区排行 使用热门榜替代 @@ -681,7 +712,10 @@ func (replyF) hot_rank_settlement(s string){ Gui_show(tmp, "0rank") c.Danmu_Main_mq.Push_tag(`tts`,Danmu_mq_t{//传入消息队列 uid:"0rank", - msg:tmp, + m:map[string]string{ + `{Area_name}`:type_item.Data.Area_name, + `{Rank}`:strconv.Itoa(type_item.Data.Rank), + }, }) msglog.L(`I: `, "热门榜", tmp) } @@ -742,7 +776,9 @@ func (replyF) entry_effect(s string){ {//语言tts c.Danmu_Main_mq.Push_tag(`tts`,Danmu_mq_t{//传入消息队列 uid:img, - msg:fmt.Sprintln(copy_writing), + m:map[string]string{ + `{msg}`:copy_writing, + }, }) } fmt.Print(">>> ") @@ -832,6 +868,15 @@ func (replyF) danmu(s string) { msglog.L(`I: `, item.auth, ":", item.msg) return } + //附加功能 更少弹幕 + if !Lessdanmuf(item.msg) { + msglog.L(`I: `, item.auth, ":", item.msg) + return + } + if _msg := Shortdanmuf(item.msg); _msg == "" { + msglog.L(`I: `, item.auth, ":", item.msg) + return + } else {item.msg = _msg} } Msg_showdanmu(item) } @@ -856,17 +901,7 @@ func Msg_senddanmu(msg string){ func Msg_showdanmu(item Danmu_item) { msg := item.msg msglog := msglog.Log_show_control(false) - {//附加功能 更少弹幕 - if !Lessdanmuf(msg) { - if item.auth != nil {msglog.L(`I: `, item.auth, ":", msg)} - return - } - if _msg := Shortdanmuf(msg); _msg == "" { - if item.auth != nil {msglog.L(`I: `, item.auth, ":", msg)} - return - } else {msg = _msg} - } - + //room change if item.roomid != 0 && item.roomid != c.Roomid {return} @@ -881,10 +916,15 @@ func Msg_showdanmu(item Danmu_item) { } {//语言tts 私信 if item.uid != "" { - c.Danmu_Main_mq.Push_tag(`tts`,Danmu_mq_t{//传入消息队列 - uid:item.uid, - msg:msg, - }) + if item.auth != nil { + c.Danmu_Main_mq.Push_tag(`tts`,Danmu_mq_t{//传入消息队列 + uid:item.uid, + m:map[string]string{ + `{auth}`:fmt.Sprint(item.auth), + `{msg}`:msg, + }, + }) + } if i,e := strconv.Atoi(item.uid);e == nil { c.Danmu_Main_mq.Push_tag(`pm`,send.Pm_item{ Uid:i, @@ -906,6 +946,7 @@ func Msg_showdanmu(item Danmu_item) { type Danmu_mq_t struct { uid string msg string + m map[string]string//tts参数替换列表 } var Danmu_mq = mq.New(10) diff --git a/Reply/tts.go b/Reply/tts.go index 2363738..899907e 100644 --- a/Reply/tts.go +++ b/Reply/tts.go @@ -14,7 +14,7 @@ import ( ) var ( - tts_setting_onoff = map[string]string{ + tts_setting_string = map[string]string{ "0buyguide":"感谢{D}", "0gift":"感谢{D}", "0superchat":"感谢{D}", @@ -23,7 +23,7 @@ var ( "\n":" ", } ) -var tts_List = make(chan interface{},20) +var tts_List = make(chan string,20) var tts_limit = limit.New(1,5000,15000)//频率限制1次/5s,最大等待时间15s @@ -68,7 +68,7 @@ func init(){ buf.Load("config/config_tts.json") if onoff,ok := buf.Get(`onoff`);ok { for k,v := range onoff.(map[string]interface{}) { - tts_setting_onoff[k] = v.(string) + tts_setting_string[k] = v.(string) } } if replace,ok := buf.Get(`replace`);ok { @@ -82,8 +82,11 @@ func init(){ go func(){ for{ - e := <- tts_List - TTS(e.(Danmu_mq_t).uid, e.(Danmu_mq_t).msg) + s := <- tts_List + for len(tts_List) > 0 && len(s) < 100 { + s += " " + <- tts_List + } + TTS(<- tts_List) } }() @@ -91,8 +94,28 @@ func init(){ //使用带tag的消息队列在功能间传递消息 c.Danmu_Main_mq.Pull_tag(msgq.FuncMap{ `tts`:func(data interface{})(bool){//tts - if _,ok := tts_setting_onoff[data.(Danmu_mq_t).uid];ok { - tts_List <- data + d,_ := data.(Danmu_mq_t) + if s,ok := tts_setting_string[d.uid];ok && len(d.m) != 0 && s != "" { + + for k,v := range d.m { + s = strings.ReplaceAll(s, k, v) + } + for k,v := range tts_setting_replace { + s = strings.ReplaceAll(s, k, v) + } + var ( + skip bool + runel []rune + ) + for _,v := range s { + if v == []rune("{")[0] {skip = true} + if v == []rune("}")[0] {skip = false;continue} + if skip {continue} + runel = append(runel,v) + } + + tts_log.L(`I: `, d.uid, string(runel)) + tts_List <- string(runel) } return false }, @@ -109,20 +132,9 @@ func init(){ } -func TTS(uid,msg string) { +func TTS(msg string) { if tts_limit.TO() {return} - v,ok := tts_setting_onoff[uid] - if !ok || v == ``{return} - - tts_log.L(`I: `,uid, strings.ReplaceAll(msg, "\n", " ")) - - msg = strings.ReplaceAll(v, "{D}", msg) - - for k,v := range tts_setting_replace { - msg = strings.ReplaceAll(msg, k, v) - } - var ( req = reqf.New() rval reqf.Rval @@ -185,10 +197,11 @@ func youdao(msg string) reqf.Rval { return baidu(msg) } + //https://ai.youdao.com/gw.s#/ var ( api = map[string]string{ `q`:msg, - `langType`:"auto", + `langType`:"zh-CHS", `appKey`:appId, `salt`:p.Stringf().Rand(1, 8), } diff --git a/Reply/ws_msg/SEND_GIFT.go b/Reply/ws_msg/SEND_GIFT.go new file mode 100644 index 0000000..220809f --- /dev/null +++ b/Reply/ws_msg/SEND_GIFT.go @@ -0,0 +1,105 @@ +package part + +type SEND_GIFT struct { + Cmd string `json:"cmd"` + Data struct { + Action string `json:"action"` + BatchComboID string `json:"batch_combo_id"` + BatchComboSend struct { + Action string `json:"action"` + BatchComboID string `json:"batch_combo_id"` + BatchComboNum int `json:"batch_combo_num"` + BlindGift interface{} `json:"blind_gift"` + GiftID int `json:"gift_id"` + GiftName string `json:"gift_name"` + GiftNum int `json:"gift_num"` + SendMaster interface{} `json:"send_master"` + UID int `json:"uid"` + Uname string `json:"uname"` + } `json:"batch_combo_send"` + Beatid string `json:"beatId"` + BizSource string `json:"biz_source"` + BlindGift interface{} `json:"blind_gift"` + BroadcastID int `json:"broadcast_id"` + CoinType string `json:"coin_type"` + ComboResourcesID int `json:"combo_resources_id"` + ComboSend struct { + Action string `json:"action"` + ComboID string `json:"combo_id"` + ComboNum int `json:"combo_num"` + GiftID int `json:"gift_id"` + GiftName string `json:"gift_name"` + GiftNum int `json:"gift_num"` + SendMaster interface{} `json:"send_master"` + UID int `json:"uid"` + Uname string `json:"uname"` + } `json:"combo_send"` + ComboStayTime int `json:"combo_stay_time"` + ComboTotalCoin int `json:"combo_total_coin"` + CritProb int `json:"crit_prob"` + Demarcation int `json:"demarcation"` + Dmscore int `json:"dmscore"` + Draw int `json:"draw"` + Effect int `json:"effect"` + EffectBlock int `json:"effect_block"` + Face string `json:"face"` + Giftid int `json:"giftId"` + Giftname string `json:"giftName"` + Gifttype int `json:"giftType"` + Gold int `json:"gold"` + GuardLevel int `json:"guard_level"` + IsFirst bool `json:"is_first"` + IsSpecialBatch int `json:"is_special_batch"` + Magnification int `json:"magnification"` + MedalInfo struct { + AnchorRoomid int `json:"anchor_roomid"` + AnchorUname string `json:"anchor_uname"` + GuardLevel int `json:"guard_level"` + IconID int `json:"icon_id"` + IsLighted int `json:"is_lighted"` + MedalColor int `json:"medal_color"` + MedalColorBorder int `json:"medal_color_border"` + MedalColorEnd int `json:"medal_color_end"` + MedalColorStart int `json:"medal_color_start"` + MedalLevel int `json:"medal_level"` + MedalName string `json:"medal_name"` + Special string `json:"special"` + TargetID int `json:"target_id"` + } `json:"medal_info"` + NameColor string `json:"name_color"` + Num int `json:"num"` + OriginalGiftName string `json:"original_gift_name"` + Price int `json:"price"` + Rcost int64 `json:"rcost"` + Remain int `json:"remain"` + Rnd string `json:"rnd"` + SendMaster interface{} `json:"send_master"` + Silver int `json:"silver"` + Super int `json:"super"` + SuperBatchGiftNum int `json:"super_batch_gift_num"` + SuperGiftNum int `json:"super_gift_num"` + SvgaBlock int `json:"svga_block"` + TagImage string `json:"tag_image"` + Tid string `json:"tid"` + Timestamp int `json:"timestamp"` + TopList interface{} `json:"top_list"` + TotalCoin int `json:"total_coin"` + UID int `json:"uid"` + Uname string `json:"uname"` + } `json:"data"` +} + +/* +{"cmd":"SEND_GIFT","data":{"action":"投喂","batch_combo_id":"batch:gift:combo_id:333010355:585267:20004:1623602183.2621","batch_combo_send": +{"action":"投喂","batch_combo_id":"batch:gift:combo_id:333010355:585267:20004:1623602183.2621","batch_combo_num":1,"blind_gift":null,"gift_i +d":20004,"gift_name":"吃瓜","gift_num":1,"send_master":null,"uid":333010355,"uname":"小尕子_"},"beatId":"","biz_source":"Live","blind_gift": +null,"broadcast_id":0,"coin_type":"gold","combo_resources_id":1,"combo_send":{"action":"投喂","combo_id":"gift:combo_id:333010355:585267:200 +04:1623602183.2615","combo_num":1,"gift_id":20004,"gift_name":"吃瓜","gift_num":1,"send_master":null,"uid":333010355,"uname":"小尕子_"},"com +bo_stay_time":3,"combo_total_coin":100,"crit_prob":0,"demarcation":1,"dmscore":16,"draw":0,"effect":0,"effect_block":0,"face":"http://i2.hds +lb.com/bfs/face/dfb44e63d5ac42c28a37c295f6005561be2b089f.jpg","giftId":20004,"giftName":"吃瓜","giftType":1,"gold":0,"guard_level":0,"is_fir +st":true,"is_special_batch":0,"magnification":1,"medal_info":{"anchor_roomid":0,"anchor_uname":"","guard_level":0,"icon_id":0,"is_lighted":0 +,"medal_color":6067854,"medal_color_border":12632256,"medal_color_end":12632256,"medal_color_start":12632256,"medal_level":1,"medal_name":" +少废话","special":"","target_id":14110780},"name_color":"","num":1,"original_gift_name":"","price":100,"rcost":3892073142,"remain":0,"rnd":" +1332407012","send_master":null,"silver":0,"super":0,"super_batch_gift_num":1,"super_gift_num":1,"svga_block":0,"tag_image":"","tid":"1623602 +183121500002","timestamp":1623602183,"top_list":null,"total_coin":100,"uid":333010355,"uname":"小尕子_"}} +*/ \ No newline at end of file diff --git a/Reply/ws_msg/SUPER_CHAT_MESSAGE_JPN.go b/Reply/ws_msg/SUPER_CHAT_MESSAGE_JPN.go new file mode 100644 index 0000000..80898b5 --- /dev/null +++ b/Reply/ws_msg/SUPER_CHAT_MESSAGE_JPN.go @@ -0,0 +1,55 @@ +package part + +type SUPER_CHAT_MESSAGE_JPN struct { + Cmd string `json:"cmd"` + Data struct { + ID string `json:"id"` + UID string `json:"uid"` + Price int `json:"price"` + Rate int `json:"rate"` + Message string `json:"message"` + MessageJpn string `json:"message_jpn"` + IsRanked int `json:"is_ranked"` + BackgroundImage string `json:"background_image"` + BackgroundColor string `json:"background_color"` + BackgroundIcon string `json:"background_icon"` + BackgroundPriceColor string `json:"background_price_color"` + BackgroundBottomColor string `json:"background_bottom_color"` + Ts int `json:"ts"` + Token string `json:"token"` + MedalInfo interface{} `json:"medal_info"` + UserInfo struct { + Uname string `json:"uname"` + Face string `json:"face"` + FaceFrame string `json:"face_frame"` + GuardLevel int `json:"guard_level"` + UserLevel int `json:"user_level"` + LevelColor string `json:"level_color"` + IsVip int `json:"is_vip"` + IsSvip int `json:"is_svip"` + IsMainVip int `json:"is_main_vip"` + Title string `json:"title"` + Manager int `json:"manager"` + } `json:"user_info"` + Time int `json:"time"` + StartTime int `json:"start_time"` + EndTime int `json:"end_time"` + Gift struct { + Num int `json:"num"` + GiftID int `json:"gift_id"` + GiftName string `json:"gift_name"` + } `json:"gift"` + } `json:"data"` + Roomid string `json:"roomid"` +} + +/* +{"cmd":"SUPER_CHAT_MESSAGE_JPN","data":{"id":"1852575","uid":"696837750","price":2000,"rate":1000,"message":"\u8fd9\u80fd\u770b\u5230\u51e0\ +u70b9","message_jpn":"","is_ranked":1,"background_image":"https:\/\/i0.hdslb.com\/bfs\/live\/a712efa5c6ebc67bafbe8352d3e74b820a00c13e.png"," +background_color":"#FFD8D8","background_icon":"https:\/\/i0.hdslb.com\/bfs\/live\/0d9cbbdbad7d3371266cd5b568065415415316ae.png","background_ +price_color":"#C86A7A","background_bottom_color":"#AB1A32","ts":1623612710,"token":"5491A5EB","medal_info":null,"user_info":{"uname":"Red\u4 +e00","face":"http:\/\/i0.hdslb.com\/bfs\/face\/member\/noface.jpg","face_frame":"http:\/\/i0.hdslb.com\/bfs\/live\/ceb8e7fc5e207b8e6219c9917 +e3ef1b22f3df61a.png","guard_level":1,"user_level":43,"level_color":"#ff86b2","is_vip":0,"is_svip":0,"is_main_vip":0,"title":"0","manager":0} +,"time":7200,"start_time":1623612710,"end_time":1623619910,"gift":{"num":1,"gift_id":12000,"gift_name":"\u9192\u76ee\u7559\u8a00"}},"roomid" +:"47867"} +*/ \ No newline at end of file diff --git a/Reply/ws_msg/USER_TOAST_MSG.go b/Reply/ws_msg/USER_TOAST_MSG.go new file mode 100644 index 0000000..daaac94 --- /dev/null +++ b/Reply/ws_msg/USER_TOAST_MSG.go @@ -0,0 +1,31 @@ +package part + +type USER_TOAST_MSG struct { + Cmd string `json:"cmd"` + Data struct { + AnchorShow bool `json:"anchor_show"` + Color string `json:"color"` + Dmscore int `json:"dmscore"` + EndTime int `json:"end_time"` + GuardLevel int `json:"guard_level"` + IsShow int `json:"is_show"` + Num int `json:"num"` + OpType int `json:"op_type"` + PayflowID string `json:"payflow_id"` + Price int `json:"price"` + RoleName string `json:"role_name"` + StartTime int `json:"start_time"` + SvgaBlock int `json:"svga_block"` + TargetGuardCount int `json:"target_guard_count"` + ToastMsg string `json:"toast_msg"` + UID int `json:"uid"` + Unit string `json:"unit"` + UserShow bool `json:"user_show"` + Username string `json:"username"` + } `json:"data"` +} +/* +{"cmd":"USER_TOAST_MSG","data":{"anchor_show":true,"color":"#00D1F1","dmscore":90,"end_time":1623612866,"guard_level":3,"is_show":0,"num":1, +"op_type":3,"payflow_id":"2106140334131392145517282","price":138000,"role_name":"舰长","start_time":1623612866,"svga_block":0,"target_guard_ +count":820,"toast_msg":"\u003c%大桶麦丽素%\u003e 自动续费了舰长","uid":40144551,"unit":"月","user_show":true,"username":"大桶麦丽素"}} +*/ \ No newline at end of file diff --git a/demo/config/config_tts.json b/demo/config/config_tts.json index a167e5a..6a508bd 100644 --- a/demo/config/config_tts.json +++ b/demo/config/config_tts.json @@ -1,20 +1,37 @@ { "onoff":{ - "help":"空字符串将不触发,{D}会被替换", - "0buyguide": "感谢{D}", - "0gift": "感谢{D}", - "0superchat": "感谢{D}", - "0multi": "观众:{D}", - "0rank":"{D}", - "0level1":"{D}", + "help":"空字符串将不触发。{}将被替换 未使用的{}将被移除", + + "0default-help":"系统消息 {msg}:内容", + "0default":"{msg}", + + "0buyguide-help": "大航海 {username}:用户 {op_name}:购买方式 {role_name}:大航海类型 {num}:个数 {unit}:时间单位", + "0buyguide": "{username}{op_name} {num}个{unit}{role_name}", + + "0gift-help": "投喂礼物 {num}:个数 {uname}:用户 {action}:动作 {giftName}:礼物名称", + "0gift": "{uname}{action} {num}个{giftName}", + + "0superchat-help":"超级留言 {uname}:用户 {message}:内容 {message_jpn}:日语内容", + "0superchat": "{uname}说 {message}", + + "0room-help":"房间消息 {msg}消息", + "0room":"{msg}", + + "0rank-help":"小时榜排行 {Area_name}:分区名 {Rank}:排位", + "0rank":"获得 {Area_name}第{Rank}", + + "0level-help":"大航海进入 {username}:用户 {guard_name}:大航海类型", + "0level1":"欢迎 {guard_name}{username}进入直播间", "0level2":"", - "0level3":"" + "0level3":"", + + "user-help":"用户弹幕 111是用户uid可添加 0multi是合并弹幕功能的多用户弹幕 {num}:多用户个数 {auth}:用户 {msg}:弹幕内容", + "0multi": "{num}个观众说 {msg}", + "111":"" }, "replace":{ "?":"问号", "?":"问号", - "!":"叹号", - "!":"叹号", "hso":"好色哦" } } \ No newline at end of file -- 2.39.2