example | ||
.travis.yml | ||
discord.go | ||
endpoints.go | ||
LICENSE | ||
README.md | ||
restapi.go | ||
structs.go | ||
util.go | ||
voice.go | ||
wsapi.go |
Discordgo
This package provides low level bindings for the Discord REST & Websocket API in the Go Programming Language (Golang).
-
See out dgVoice for experimental Discord voice support.
-
See out dgTest for more examples and test code.
Usage Example
package main
import (
"fmt"
"os"
"time"
"github.com/bwmarrin/discordgo"
)
func main() {
var err error
var username, password, token string
// Check for Username and Password arguments
if len(os.Args) < 2 || len(os.Args) > 3 {
fmt.Println("You must provide a username and password as arguments. See below example.")
fmt.Println(os.Args[0], " [username] [password]")
return
}
// Set username and password from command line arguments.
username = os.Args[1]
password = os.Args[2]
// Create a new Discord Session and set a handler for the OnMessageCreate
// event that happens for every new message on any channel
Session := discordgo.Session{
OnMessageCreate: messageCreate,
}
// Login to the Discord server and store the authentication token
// inside the Session, unless the token was already provided.
if token == "" {
Session.Token, err = Session.Login(username, password)
if err != nil {
fmt.Println(err)
return
}
}
// Open websocket connection
err = Session.Open()
if err != nil {
fmt.Println(err)
}
// Do websocket handshake.
err = Session.Handshake()
if err != nil {
fmt.Println(err)
}
// Listen for events.
Session.Listen()
return
}
func messageCreate(s *discordgo.Session, m discordgo.Message) {
fmt.Printf("%20s %20s %20s > %s\n", m.ChannelID, time.Now().Format(time.Stamp), m.Author.Username, m.Content)
}
Documentation
NOTICE : This library and the Discord API are unfinished. Because of that there may be major changes to library functions, constants, and structures.
What Works
Current package provides a low level direct mapping to the majority of Discord REST and Websock API.
- Login/Logout
- Open/Close Websocket and listen for events.
- Accept/Create/Delete Invites
- Get User details (Name, ID, Settings, etc)
- List/Create User Channels (Private Message Channels)
- List/Create Guilds
- List/Create Guild Channels
- List Guild Members
- Receive/Send Messages to Channels
What's Unfinished
- Make changes as needed to pass GoLint, GoVet, GoCyclo, etc. (goreportcard.com)
- Editing User Profile settings
- Permissions related functions.
- Functions for Maintenance Status
- Finish Voice support.
- Add a higher level interface with user friendly helper functions.
Other Discord APIs
Go: gdraynz/go-discord, Xackery/discord, Nerketur/discordapi
.NET: RogueException/Discord.Net, Luigifan/DiscordSharp
Java: nerd/Discord4J
Node.js: izy521/discord.io, hydrabolt/discord.js, qeled/discordie,
PHP: Cleanse/discord-hypertext, teamreflex/DiscordPHP
Python: Rapptz/discord.py
Ruby: meew0/discordrb
Scala: eaceaser/discord-akka
Rust: SpaceManiac/discord-rs