获取搜索结果中的物品具体名称index的FutureEvent 传入ctx和一个递归次数上限,返回一个int 如果为返回内容为负, 说明 -1 会话超时 -2 主动结束 -3 连续3次错误
(ctx *zero.Ctx)
| 389 | // -2 主动结束 |
| 390 | // -3 连续3次错误 |
| 391 | func getitemnameindex(ctx *zero.Ctx) int { |
| 392 | recv, cancel := zero.NewFutureEvent("message", 999, false, ctx.CheckSession()).Repeat() |
| 393 | defer cancel() |
| 394 | for i := 0; i < 3; i++ { |
| 395 | select { |
| 396 | case <-time.After(time.Second * 30): |
| 397 | // 超时15秒处理 |
| 398 | ctx.SendChain(message.Text("会话已超时!")) |
| 399 | return -1 |
| 400 | case e := <-recv: |
| 401 | msg := e.Event.Message.ExtractPlainText() |
| 402 | // 输入c主动结束的处理 |
| 403 | if msg == "c" { |
| 404 | ctx.SendChain(message.Text("会话已结束!")) |
| 405 | return -2 |
| 406 | } |
| 407 | // 尝试对输入进行数字转换 |
| 408 | num, err := strconv.Atoi(msg) |
| 409 | if err != nil { |
| 410 | ctx.SendChain(message.Text("请输入数字! (输入c结束会话)")) |
| 411 | continue |
| 412 | } |
| 413 | return num |
| 414 | } |
| 415 | } |
| 416 | ctx.SendChain(message.Text("连续输入错误, 会话已结束!")) |
| 417 | return -3 |
| 418 | } |