// 命令处理相关 package main import ( "fmt" "strconv" "strings" ) // 错误命令信息 const handleErrMsg = "请输入正确的命令,输入 help 查看全部命令的解释" // 帮助信息 const helpMsg = `listlive:列出正在直播的主播 listdanmu:列出正在录制直播弹幕的主播 listrecord:列出正在录制直播视频的主播 adddanmu uid:添加指定主播到录制列表(弹幕和录播都开启),uid 在主播的网页版个人主页查看 deldanmu uid:将指定主播移出录制列表 addrecord uid:开启指定主播的直播视频录制 delrecord uid:关闭指定主播的直播视频录制 startdanmu uid:临时录制指定主播的直播弹幕 stopdanmu uid:停止录制指定主播的直播弹幕 startrecord uid:临时录制指定主播的直播视频 stoprecord uid:停止录制指定主播的直播视频 quit:退出本程序,退出需要等待半分钟左右 help:输出本帮助信息` var uidBoolDispatch = map[string]func(int) bool{ "adddanmu": addUID, "deldanmu": removeUID, "startdanmu": startDanmu, "stopdanmu": stopDanmu, "startrecord": startRecord, "stoprecord": stopRecord, "addrecord": func(uid int) bool { return setRecordFlag(uid, true) }, "delrecord": func(uid int) bool { return setRecordFlag(uid, false) }, } var listDispatch = map[string]func(){ "listlive": listLive, "listdanmu": listDanmu, "listrecord": listRecord, } // 处理单个命令 func handleCmd(cmd string) bool { if d, ok := listDispatch[cmd]; ok { d() return true } switch cmd { case "quit": quitRun() return true default: lPrintErr("错误的命令:" + cmd) printErr() return false } } // 处理 "命令 UID" func handleCmdUID(cmd string, uid int) bool { if d, ok := uidBoolDispatch[cmd]; ok { return d(uid) } lPrintErr("错误的命令:"+cmd, uid) printErr() return false } // 打印错误命令信息 func printErr() { lPrintWarn(handleErrMsg) } // 处理所有命令 func handleAllCmd(text string) bool { cmd := strings.Fields(text) switch len(cmd) { case 1: switch cmd[0] { case "help": fmt.Println(helpMsg) return true default: return handleCmd(cmd[0]) } case 2: if uid, err := strconv.ParseUint(cmd[1], 10, 64); err == nil { return handleCmdUID(cmd[0], int(uid)) } printErr() return false default: printErr() return false } }