package handle import ( "WechatGateWay/api" "WechatGateWay/global" "WechatGateWay/third_part" "WechatGateWay/utils" "encoding/xml" "fmt" "log" "net/http" ) // cmdExec 根据白名单命令来执行 func cmdExec(msgContent MsgContent) (replyContent string) { var cmdString string switch msgContent.Content { case "last": cmdString = global.HistoryCmds[len(global.HistoryCmds)-1] case "history": cmdString = utils.SlicePrint(global.HistoryCmds) case "删除图片": //通过文本消息删除上一张图片 lastImg := GetLastWechatLog(msgContent.FromUsername, "image") err := utils.DeleteFile(lastImg.Content) if err != nil { log.Println("删除图片失败: ", lastImg.Content) return } else { log.Println("图片已删除: ", lastImg.Content) return } case "删除文本": //通过文本消息删除上一条文本消息 lastText := GetLastWechatLog(msgContent.FromUsername, "text") textMd5 := utils.Md5String(lastText.Content) go RecordWechatBlockWords(lastText.Content, textMd5, msgContent.FromUsername) return case "eth", "btc", "虚拟货币": priceBTC := api.GetBinanceLatestPrice("BTCUSDT") priceETH := api.GetBinanceLatestPrice("ETHUSDT") replyContent = fmt.Sprintf("BTC: %f \n ETH: %f", priceBTC, priceETH) return case "gold", "黄金": replyContent = "黄金黄金黄金黄金黄金" default: cmdString = msgContent.Content } global.HistoryCmds = append(global.HistoryCmds, msgContent.Content) replyContent, err := utils.CMDShellTrick(cmdString) if err != nil { replyContent = "/:,@!执行失败:\n" + msgContent.Content } else { replyContent = "/::D执行成功:\n" + replyContent //aiAnswer = "执行命令:" + msgContent.Content } return } func aiReply(msgContent MsgContent) (replyContent string) { var replyContentAi string if _, ok := global.EmojMap[msgContent.Content]; ok { //系统表情消息 取字典意思丢ai回复 replyContentAi = third_part.AiChat(global.EmojMap[msgContent.Content]) } else { //普通文本消息直接丢ai replyContentAi = third_part.AiChat(msgContent.Content) } //对ai结果 有表情包的上表情包 if emoj, ok := utils.MapKey(global.EmojMap, replyContentAi); ok { replyContent = emoj + replyContentAi } else { replyContent = replyContentAi } return } func replyText(msgContent MsgContent, timestamp, nonce string, w http.ResponseWriter) { var replyContent string if global.EnableCmdExec && utils.SliceContain(global.CMDList, msgContent.Content) && msgContent.FromUsername == "QiaoYang" { //开启了命令执行功能,并且消息内容包含了命令 log.Println("收到命令消息") replyContent = cmdExec(msgContent) //cmdString := cmdExec(msgContent) //var cmdString string //if msgContent.Content == "last" { // cmdString = global.HistoryCmds[len(global.HistoryCmds)-1] //} else if msgContent.Content == "history" { // cmdString = utils.SlicePrint(global.HistoryCmds) //} else if msgContent.Content == "删除图片" { // //通过文本消息删除上一张图片 // lastImg := GetLastWechatLog(msgContent.FromUsername, "image") // err := utils.DeleteFile(lastImg.Content) // if err != nil { // log.Println("删除图片失败: ", lastImg.Content) // return // } else { // log.Println("图片已删除: ", lastImg.Content) // return // } // //} else if msgContent.Content == "删除文本" { // //通过文本消息删除上一条文本消息 // lastText := GetLastWechatLog(msgContent.FromUsername, "text") // textMd5 := utils.Md5String(lastText.Content) // go RecordWechatBlockWords(lastText.Content, textMd5, msgContent.FromUsername) // return // //} else { // cmdString = msgContent.Content //} //global.HistoryCmds = append(global.HistoryCmds, msgContent.Content) //replyContent, err := utils.CMDShellTrick(cmdString) //if err != nil { // replyContent = "/:,@!执行失败:\n" + msgContent.Content //} else { // replyContent = "/::D执行成功:\n" + replyContent // //aiAnswer = "执行命令:" + msgContent.Content //} } else { log.Println("ai msg") replyContent = aiReply(msgContent) } //文本消息审核 if WordsBlocked(utils.Md5String(replyContent)) { replyContent = "***(过于文明,无法显示)" } //构造回复消息 replyMsg, _ := xml.Marshal(ReplyTextMsg{ ToUsername: msgContent.FromUsername, FromUsername: msgContent.ToUsername, CreateTime: msgContent.CreateTime, MsgType: "text", Content: replyContent, }) encryptMsg, cryptErr := global.WxCrypt.EncryptMsg(string(replyMsg), timestamp, nonce) if cryptErr != nil { log.Println("回复加密出错", cryptErr) return } else { log.Println(string(encryptMsg)) l, err := w.Write(encryptMsg) if err != nil { log.Println("返回消息失败") return } else { go RecordWechatLog(msgContent.FromUsername, msgContent.ToUsername, msgContent.CreateTime, msgContent.MsgType, replyContent) log.Println("成功写入", l) } } }