Files
acfunlive-remake/handle.go
T
2026-09-25 13:16:54 +08:00

102 lines
2.3 KiB
Go

// 命令处理相关
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
}
}