Created
December 20, 2018 14:51
-
-
Save tyoro/bbe7532695fac4e8bafe8d2e6636043d to your computer and use it in GitHub Desktop.
Disocrd の VC の入室を Google Home から通知する bot
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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