From 7cd07a3187baeeb0aa69fc29f3e9ffa4207b2bee Mon Sep 17 00:00:00 2001 From: himawari <1156544355@qq.com> Date: Mon, 22 Apr 2024 14:14:54 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=8E=A8=20=E4=BC=98=E5=8C=96=E4=B8=8A?= =?UTF-8?q?=E5=B1=82tts=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tts/lolimi/api.go | 56 ++++++++++++++++++++++++++++++++++++++++++----- tts/lolimi/tts.go | 29 ++++++------------------ 2 files changed, 58 insertions(+), 27 deletions(-) diff --git a/tts/lolimi/api.go b/tts/lolimi/api.go index ba7539f..2e53835 100644 --- a/tts/lolimi/api.go +++ b/tts/lolimi/api.go @@ -1,12 +1,58 @@ package lolimi +import ( + "fmt" + + "github.com/FloatTech/floatbox/binary" + "github.com/FloatTech/floatbox/web" + "github.com/tidwall/gjson" +) + const ( lolimiURL = "https://api.lolimi.cn" genshinURL = lolimiURL + "/API/yyhc/y.php?msg=%v&speaker=%v" - jiaranURL = lolimiURL + "/API/yyhc/jr.php?msg=%v&type=2" - tafeiURL = lolimiURL + "/API/yyhc/taf.php?msg=%v&type=2" - dxlURL = lolimiURL + "/API/yyhc/dxl.php?msg=%v&type=2" + jiaranURL = lolimiURL + "/API/yyhc/jr.php?msg=%v" + tafeiURL = lolimiURL + "/API/yyhc/taf.php?msg=%v" + dxlURL = lolimiURL + "/API/yyhc/dxl.php?msg=%v" + lyyURL = lolimiURL + "/API/yyhc/lyy.php?msg=%v" + kbURL = lolimiURL + "/API/yyhc/kb.php?msg=%v" + sxcURL = lolimiURL + "/API/yyhc/sxc.php?msg=%v" + czURL = lolimiURL + "/API/yyhc/cz.php?msg=%v" + dzURL = lolimiURL + "/API/yyhc/dz.php?msg=%v" +) + +var ( + lolimiMap = map[string]string{ + "嘉然": jiaranURL, + "塔菲": tafeiURL, + "东雪莲": dxlURL, + "懒羊羊": lyyURL, + "科比": kbURL, + "孙笑川": sxcURL, + "陈泽": czURL, + "丁真": dzURL, + } + // SoundList ... + SoundList = [...]string{"嘉然", "塔菲", "东雪莲", "懒羊羊", "科比", "孙笑川", "陈泽", "丁真", "空", "荧", "派蒙", "纳西妲", "阿贝多", "温迪", "枫原万叶", "钟离", "荒泷一斗", "八重神子", "艾尔海森", "提纳里", "迪希雅", "卡维", "宵宫", "莱依拉", "赛诺", "诺艾尔", "托马", "凝光", "莫娜", "北斗", "神里绫华", "雷电将军", "芭芭拉", "鹿野院平藏", "五郎", "迪奥娜", "凯亚", "安柏", "班尼特", "琴", "柯莱", "夜兰", "妮露", "辛焱", "珐露珊", "魈", "香菱", "达达利亚", "砂糖", "早柚", "云堇", "刻晴", "丽莎", "迪卢克", "烟绯", "重云", "珊瑚宫心海", "胡桃", "可莉", "流浪者", "久岐忍", "神里绫人", "甘雨", "戴因斯雷布", "优菈", "菲谢尔", "行秋", "白术", "九条裟罗", "雷泽", "申鹤", "迪娜泽黛", "凯瑟琳", "多莉", "坎蒂丝", "萍姥姥", "罗莎莉亚", "留云借风真君", "绮良良", "瑶瑶", "七七", "奥兹", "米卡", "夏洛蒂", "埃洛伊", "博士", "女士", "大慈树王", "三月七", "娜塔莎", "希露瓦", "虎克", "克拉拉", "丹恒", "希儿", "布洛妮娅", "瓦尔特", "杰帕德", "佩拉", "姬子", "艾丝妲", "白露", "星", "穹", "桑博", "伦纳德", "停云", "罗刹", "卡芙卡", "彦卿", "史瓦罗", "螺丝咕姆", "阿兰", "银狼", "素裳", "丹枢", "黑塔", "景元", "帕姆", "可可利亚", "半夏", "符玄", "公输师傅", "奥列格", "青雀", "大毫", "青镞", "费斯曼", "绿芙蓉", "镜流", "信使", "丽塔", "失落迷迭", "缭乱星棘", "伊甸", "伏特加女孩", "狂热蓝调", "莉莉娅", "萝莎莉娅", "八重樱", "八重霞", "卡莲", "第六夜想曲", "卡萝尔", "姬子", "极地战刃", "布洛妮娅", "次生银翼", "理之律者", "真理之律者", "迷城骇兔", "希儿", "魇夜星渊", "黑希儿", "帕朵菲莉丝", "天元骑英", "幽兰黛尔", "德丽莎", "月下初拥", "朔夜观星", "暮光骑士", "明日香", "李素裳", "格蕾修", "梅比乌斯", "渡鸦", "人之律者", "爱莉希雅", "爱衣", "天穹游侠", "琪亚娜", "空之律者", "终焉之律者", "薪炎之律者", "云墨丹心", "符华", "识之律者", "维尔薇", "始源之律者", "芽衣", "雷之律者", "苏莎娜", "阿波尼亚", "陆景和", "莫弈", "夏彦", "左然"} ) -// SoundList ... -var SoundList = [...]string{"嘉然", "塔菲", "东雪莲", "空", "荧", "派蒙", "纳西妲", "阿贝多", "温迪", "枫原万叶", "钟离", "荒泷一斗", "八重神子", "艾尔海森", "提纳里", "迪希雅", "卡维", "宵宫", "莱依拉", "赛诺", "诺艾尔", "托马", "凝光", "莫娜", "北斗", "神里绫华", "雷电将军", "芭芭拉", "鹿野院平藏", "五郎", "迪奥娜", "凯亚", "安柏", "班尼特", "琴", "柯莱", "夜兰", "妮露", "辛焱", "珐露珊", "魈", "香菱", "达达利亚", "砂糖", "早柚", "云堇", "刻晴", "丽莎", "迪卢克", "烟绯", "重云", "珊瑚宫心海", "胡桃", "可莉", "流浪者", "久岐忍", "神里绫人", "甘雨", "戴因斯雷布", "优菈", "菲谢尔", "行秋", "白术", "九条裟罗", "雷泽", "申鹤", "迪娜泽黛", "凯瑟琳", "多莉", "坎蒂丝", "萍姥姥", "罗莎莉亚", "留云借风真君", "绮良良", "瑶瑶", "七七", "奥兹", "米卡", "夏洛蒂", "埃洛伊", "博士", "女士", "大慈树王", "三月七", "娜塔莎", "希露瓦", "虎克", "克拉拉", "丹恒", "希儿", "布洛妮娅", "瓦尔特", "杰帕德", "佩拉", "姬子", "艾丝妲", "白露", "星", "穹", "桑博", "伦纳德", "停云", "罗刹", "卡芙卡", "彦卿", "史瓦罗", "螺丝咕姆", "阿兰", "银狼", "素裳", "丹枢", "黑塔", "景元", "帕姆", "可可利亚", "半夏", "符玄", "公输师傅", "奥列格", "青雀", "大毫", "青镞", "费斯曼", "绿芙蓉", "镜流", "信使", "丽塔", "失落迷迭", "缭乱星棘", "伊甸", "伏特加女孩", "狂热蓝调", "莉莉娅", "萝莎莉娅", "八重樱", "八重霞", "卡莲", "第六夜想曲", "卡萝尔", "姬子", "极地战刃", "布洛妮娅", "次生银翼", "理之律者", "真理之律者", "迷城骇兔", "希儿", "魇夜星渊", "黑希儿", "帕朵菲莉丝", "天元骑英", "幽兰黛尔", "德丽莎", "月下初拥", "朔夜观星", "暮光骑士", "明日香", "李素裳", "格蕾修", "梅比乌斯", "渡鸦", "人之律者", "爱莉希雅", "爱衣", "天穹游侠", "琪亚娜", "空之律者", "终焉之律者", "薪炎之律者", "云墨丹心", "符华", "识之律者", "维尔薇", "始源之律者", "芽衣", "雷之律者", "苏莎娜", "阿波尼亚", "陆景和", "莫弈", "夏彦", "左然"} +// TTS 文字转语音最上层方法 +func TTS(name string, text string) (recURL string, err error) { + var ( + ttsURL string + data []byte + ok bool + ) + ttsURL, ok = lolimiMap[name] + if !ok { + ttsURL = fmt.Sprintf(genshinURL, text, name) + } else { + ttsURL = fmt.Sprintf(ttsURL, text) + } + data, err = web.GetData(ttsURL) + if err != nil { + return + } + recURL = gjson.Get(binary.BytesToString(data), "music").String() + return +} diff --git a/tts/lolimi/tts.go b/tts/lolimi/tts.go index 2232263..0d9e939 100644 --- a/tts/lolimi/tts.go +++ b/tts/lolimi/tts.go @@ -14,7 +14,6 @@ import ( "github.com/FloatTech/floatbox/web" "github.com/pkumza/numcn" "github.com/sirupsen/logrus" - "github.com/tidwall/gjson" ) const ( @@ -65,24 +64,18 @@ func (tts *Lolimi) Speak(_ int64, text func() string) (fileName string, err erro } return numcn.EncodeFromFloat64(f) }) - var ttsURL string - switch tts.name { - case "嘉然": - ttsURL = fmt.Sprintf(jiaranURL, t) - case "塔菲": - ttsURL = fmt.Sprintf(tafeiURL, t) - case "东雪莲": - ttsURL = fmt.Sprintf(dxlURL, t) - default: - ttsURL = fmt.Sprintf(genshinURL, t, tts.name) - } var ( - b [8]byte - data []byte + b [8]byte + data []byte + ttsURL string ) goBinary.LittleEndian.PutUint64(b[:], uint64(tts.mode)) h := crc64.New(crc64.MakeTable(crc64.ISO)) h.Write(b[:]) + ttsURL, err = TTS(tts.name, t) + if err != nil { + return + } _, _ = h.Write(binary.StringToBytes(ttsURL)) n := fmt.Sprintf(cachePath+"%016x.wav", h.Sum64()) if file.IsExist(n) { @@ -93,14 +86,6 @@ func (tts *Lolimi) Speak(_ int64, text func() string) (fileName string, err erro if err != nil { return } - // 嘉然的处理方式不同,直接发送 - if tts.name != "嘉然" { - recordURL := gjson.Get(binary.BytesToString(data), "music").String() - data, err = web.GetData(recordURL) - if err != nil { - return - } - } err = os.WriteFile(n, data, 0644) if err != nil { return From 07cbc2c8fec5c2f7f20025c46dceee4bc2ce17ce Mon Sep 17 00:00:00 2001 From: himawari <1156544355@qq.com> Date: Mon, 22 Apr 2024 23:52:00 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E2=9C=A8=20=E6=B7=BB=E5=8A=A0=E6=96=B0?= =?UTF-8?q?=E7=9A=84api=E5=9B=9E=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aireply/lolimi.go | 63 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 aireply/lolimi.go diff --git a/aireply/lolimi.go b/aireply/lolimi.go new file mode 100644 index 0000000..92b07d9 --- /dev/null +++ b/aireply/lolimi.go @@ -0,0 +1,63 @@ +package aireply + +import ( + "fmt" + "net/url" + "strings" + + "github.com/FloatTech/floatbox/binary" + "github.com/FloatTech/floatbox/web" + "github.com/tidwall/gjson" +) + +// LolimiAi Lolimi回复类 +type LolimiAi struct { + u string + n string + b []string +} + +const ( + lolimiURL = "https://api.lolimi.cn" + // MomoURL api地址 + MomoURL = lolimiURL + "/API/AI/mm.php?msg=%v" + // MomoBotName ... + MomoBotName = "沫沫" + // JingfengURL api地址 + JingfengURL = lolimiURL + "/API/AI/jj.php?msg=%v" + // JingfengBotName ... + JingfengBotName = "婧枫" +) + +// NewLolimiAi ... +func NewLolimiAi(u, name string, banwords ...string) *LolimiAi { + return &LolimiAi{u: u, n: name, b: banwords} +} + +// String ... +func (l *LolimiAi) String() string { + return l.n +} + +// TalkPlain 取得回复消息 +func (l *LolimiAi) TalkPlain(_ int64, msg, nickname string) string { + msg = strings.ReplaceAll(msg, nickname, l.n) + u := fmt.Sprintf(l.u, url.QueryEscape(msg)) + data, err := web.GetData(u) + if err != nil { + return "ERROR: " + err.Error() + } + replystr := gjson.Get(binary.BytesToString(data), "data.output").String() + textReply := strings.ReplaceAll(replystr, l.n, nickname) + for _, w := range l.b { + if strings.Contains(textReply, w) { + return "ERROR: 回复可能含有敏感内容" + } + } + return textReply +} + +// Talk 取得带 CQ 码的回复消息 +func (l *LolimiAi) Talk(_ int64, msg, nickname string) string { + return l.TalkPlain(0, msg, nickname) +}