Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

95 lines
2.2KB

  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "strings"
  6. "time"
  7. )
  8. type commandFunction func(*openIDSessionData, InWechatMsg) bool
  9. var commandMap = map[string]commandFunction{
  10. "版本信息": cmdVersion,
  11. "version": cmdVersion,
  12. //"所有命令": allCommand, //include it will cause initialization loop
  13. "echo": cmdEcho,
  14. "回音": cmdEcho,
  15. }
  16. func (ss *openIDSessionData) serveCommand(in InWechatMsg) (processed bool) {
  17. switch in.header.MsgType {
  18. case "text":
  19. processed = ss.serveTextCommand(in)
  20. case "image":
  21. in.replyText("图片收到")
  22. processed = true
  23. case "voice":
  24. processed = ss.serveTextCommand(in)
  25. case "video":
  26. case "shortvideo":
  27. case "location":
  28. case "link":
  29. case "event":
  30. processed = ss.serveEvents(in)
  31. default:
  32. processed = false
  33. }
  34. return
  35. }
  36. func (ss *openIDSessionData) serveTextCommand(in InWechatMsg) (processed bool) {
  37. cmd := ""
  38. if in.header.MsgType == "text" {
  39. cmd = in.body.(TextMsg).Content
  40. } else if in.header.MsgType == "voice" {
  41. cmd = voice2Cmd(in.body.(VoiceMsg))
  42. }
  43. if cmd != "" {
  44. if f, hasFunction := commandMap[cmd]; hasFunction {
  45. processed = f(ss, in)
  46. log.Printf("cmd...%s", ss.Procedure)
  47. return
  48. }
  49. if cmd == "所有命令" || cmd == "all command" {
  50. return allCommand(ss, in)
  51. }
  52. }
  53. return false //不认识的命令,我们选择这个信息不处理
  54. }
  55. func allCommand(ss *openIDSessionData, in InWechatMsg) (processed bool) {
  56. processed = true
  57. msg := "命令如下:\n"
  58. count := 0
  59. for k := range commandMap {
  60. count++
  61. msg = msg + fmt.Sprintf("%0d : %s \n", count, k)
  62. }
  63. in.replyText(msg)
  64. return
  65. }
  66. func cmdVersion(ss *openIDSessionData, in InWechatMsg) (processed bool) {
  67. processed = true
  68. in.replyText("这是测试版本" + time.Now().Format("2006/01/02 03:04:05"))
  69. return
  70. }
  71. func cmdEcho(ss *openIDSessionData, in InWechatMsg) (processed bool) {
  72. processed = true
  73. in.replyText("请输入不同类型的微信信息,比如文字,图片,视频,地址,链接,我们将原样回应您")
  74. procEcho.init(ss)
  75. procEcho.intro(ss)
  76. procEcho.start(ss, in)
  77. return
  78. }
  79. func voice2Cmd(v VoiceMsg) (cmd string) {
  80. cmd = v.Recognition
  81. cmd = strings.TrimSuffix(cmd, "。") //去掉末尾的标点符号,句号
  82. return
  83. }