Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

93 lines
2.1KB

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