```
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":{
"?":"问号",
"?":"问号"
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`,
{//语言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`)
//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 私信
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),
})//上舰私信
}
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-心跳用来传递人气值
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)
//小于设定
{
{//语言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,
+ },
})
}
{//额外
//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
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)
{//语言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)
// 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-分区排行 使用热门榜替代
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)
}
{//语言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(">>> ")
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)
}
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}
}
{//语言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,
type Danmu_mq_t struct {
uid string
msg string
+ m map[string]string//tts参数替换列表
}
var Danmu_mq = mq.New(10)
)
var (
- tts_setting_onoff = map[string]string{
+ tts_setting_string = map[string]string{
"0buyguide":"感谢{D}",
"0gift":"感谢{D}",
"0superchat":"感谢{D}",
"\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
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 {
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)
}
}()
//使用带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
},
}
-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
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),
}
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
{
"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