Skip to content

Instantly share code, notes, and snippets.

@tyoro
Created December 20, 2018 14:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tyoro/bbe7532695fac4e8bafe8d2e6636043d to your computer and use it in GitHub Desktop.
Save tyoro/bbe7532695fac4e8bafe8d2e6636043d to your computer and use it in GitHub Desktop.
Disocrd の VC の入室を Google Home から通知する bot
package main
import (
"fmt"
"github.com/bwmarrin/discordgo"
"log"
"net/http"
"net/url"
)
type UserState struct{
Name string
CurrentVC string
}
var(
Token = "Bot YOUR_TOKEN" //"Bot"という接頭辞がないと401 unauthorizedエラーが起きます
BotName = "<@YOUR_CLIENT_ID>"
stopBot = make(chan bool)
discord *discordgo.Session
usermap = map[string]*UserState{}
)
func main() {
//Discordのセッションを作成
var err error
discord, err = discordgo.New()
discord.Token = Token
if err != nil {
fmt.Println("Error logging in")
fmt.Println(err)
}
//VoiceStateUpdate のハンドラを追加
discord.AddHandler(onVoiceStateUpdate)
// websocketを開いてlistening開始
err = discord.Open()
if err != nil {
fmt.Println(err)
}
fmt.Println("Listening...")
<-stopBot //プログラムが終了しないようロック
return
}
func onVoiceStateUpdate(s *discordgo.Session, vs *discordgo.VoiceStateUpdate ) {
_, ok := usermap[vs.UserID]
if !ok {
//Userが居ない VC 未設定の User を追加しておく
usermap[vs.UserID] = new(UserState)
user, _ := discord.User(vs.UserID)
usermap[vs.UserID].Name = user.Username
log.Print("new user added : "+user.Username)
}
if len(vs.ChannelID) > 0 && usermap[vs.UserID].CurrentVC != vs.ChannelID {
channel, _ := discord.Channel(vs.ChannelID)
message := usermap[vs.UserID].Name+"さんが"+channel.Name+"にジョインしました"
log.Print(message)
// ここに ジョインを通知するのに利用する処理を書く
// 以下は ローカルで建てた Google-home-notifier の example.js に処理を投げつける場合
values := url.Values{}
values.Add("text", message)
resp, err := http.Get("http://localhost:8091/google-home-notifier" + "?" + values.Encode())
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
//別にレスポンスいらないしもっとシンプルに書けるのかもしれない
}
usermap[vs.UserID].CurrentVC = vs.ChannelID
fmt.Printf("%+v", vs.VoiceState)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment