确实要靠自己维护当前输入的状态。比如用户绑定 uuid ,点击"绑定"按钮后,服务端保存当前操作为"waiting_for_uuid",接下来的输入就是绑定 uuid 。
对应的 golang 代码如下:
```go
var (
// 在状态管理中跟踪用户的操作状态。 以 chatID 为键,存储用户状态
usersState = make(map[int64]string)
)
// 用户状态的值
const (
stateWaitUUID = "waiting_for_uuid"
)
// ...
for update := range updates {
if update.Message == nil {
continue
}
logger.Info.Printf("%s [%s] %s", tag, update.Message.From.UserName, update.Message.Text)
switch update.Message.Text {
case "/bind":
// 处理用户绑定逻辑
// 更新用户操作状态为“等待 UUID”
usersState[
update.Message.Chat.ID] = stateWaitUUID
reply := "😘 请输入您的 UUID"
sendMessage(reply,
update.Message.Chat.ID)
case "/queryflow":
// 处理查询流量逻辑
handleQuery(update.Message)
default:
// 如果用户状态为等待 UUID ,则获取输入文本作为 UUID
if state, ok := usersState[
update.Message.Chat.ID]; ok && state == stateWaitUUID {
// 在这里处理绑定逻辑,将 uuid 存储到数据库或进行其他操作
handleBinding(update.Message)
// 清除用户状态
delete(usersState,
update.Message.Chat.ID)
break
}
// 处理其他文本消息
msg := "😪 请通过菜单选择操作"
sendMessage(msg,
update.Message.Chat.ID)
}
}
```