微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Golang中发布Slackbot响应

如何解决在Golang中发布Slackbot响应

我正在关注this教程,试图使go slack库正常工作。我可以接收来自松弛状态的邮件,该邮件存储在ev变量中,但无法回复

    func replyToUser(ev *slack.MessageEvent) { //change this to the channel for the actual app
    fmt.Printf(ev.User)

    slackClient.PostMessage(ev.User,slack.MsgOptionText("hello world",false),slack.MsgOptionUser(ev.User),slack.MsgOptionAsUser(true),slack.MsgOptionUsername("songbot"),)
}

我将从松弛状态收到的事件传递给此函数,并希望以hello world进行答复。我正在使用经典的slackbot。

当前出现错误

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x127abb7]

任何帮助,不胜感激!

解决方法

非常抱歉,我错误地定义了松弛客户端。这里的完整答案:https://github.com/slack-go/slack/issues/796

运行代码为:

package main

import (
    "fmt"
    "log"
    "os"

    "github.com/slack-go/slack"
)

var (
    slackClient *slack.Client //initialise the slack event
)

func main() {
    slackClient = slack.New(os.Getenv("SLACK_ACCESS_TOKEN"))
    rtm := slackClient.NewRTM() //create the realtime messaging objext
    go rtm.ManageConnection()   // set it up in a go routine

    for msg := range rtm.IncomingEvents {
        switch ev := msg.Data.(type) {
        case *slack.MessageEvent:
            go handleMessage(ev)
        }
    }
}

func handleMessage(ev *slack.MessageEvent) {
    fmt.Printf("%v\n",ev)
    fmt.Printf("Text Received: %v\n",ev.Msg.Text)
    _,_,err := slackClient.PostMessage(ev.Channel,slack.MsgOptionText("message",false),slack.MsgOptionAsUser(true))
    if err != nil {
        log.Println("error sending to slack: " + err.Error())
    }
    return
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。