Avatar Example using Url.

Readme clean up.
This commit is contained in:
VagantemNumen 2016-05-16 14:45:04 +05:00
parent 9529c44867
commit ecc6665887
No known key found for this signature in database
GPG key ID: 2720AE8E56962CA0
3 changed files with 140 additions and 4 deletions

View file

@ -2,7 +2,7 @@
Avatar Examples
====
These example demonstrates how to utilize DiscordGo to change the account avatar using local files and urls as well as with use of commands.
These example demonstrates how to utilize DiscordGo to change the account avatar using local files and urls.
### Build
@ -15,9 +15,6 @@ cd $GOPATH/src/github.com/bwmarrin/discordgo/examples/avatar/localfile
```sh
cd $GOPATH/src/github.com/bwmarrin/discordgo/examples/avatar/url
```
```sh
cd $GOPATH/src/github.com/bwmarrin/discordgo/examples/avatar/command
```
```sh
go build

View file

@ -0,0 +1,41 @@
<img align="right" src="http://bwmarrin.github.io/discordgo/img/discordgo.png">
Avatar Url Example
====
This example demonstrates how to utilize DiscordGo to change the account avatar using a remote url provided via a commandline flag.
### Build
This assumes you already have a working Go environment setup and that DiscordGo is correctly installed on your system.
Change directory into the example.
```sh
cd $GOPATH/src/github.com/bwmarrin/discordgo/examples/avatar/url
```
```sh
go build
```
### Usage
Please place the file you wish to use as an avatar inside the directory named as ``avatar.jpg``. The filename is not important if you supply it via the commandline flag ``-l`` when starting the application. If the flag is not specified avatar is set to DiscordGo Logo.
```sh
./url --help
Usage of ./url:
-e string
Account Email
-p string
Account Password
-t string
Account Token
-l string
Link to the avatar image.
```
For example to start application with Token and a non-default avatar:
```sh
./url -t "YOUR_BOT_TOKEN" -l "http://bwmarrin.github.io/discordgo/img/discordgo.png"
```

View file

@ -0,0 +1,98 @@
package main
import (
"encoding/base64"
"flag"
"fmt"
"io/ioutil"
"net/http"
"time"
"github.com/bwmarrin/discordgo"
)
var (
Email string
Password string
Token string
Url string
BotID string
BotUsername string
)
func init() {
flag.StringVar(&Email, "e", "", "Account Email")
flag.StringVar(&Password, "p", "", "Account Password")
flag.StringVar(&Token, "t", "", "Account Token")
flag.StringVar(&Url, "l", "http://bwmarrin.github.io/discordgo/img/discordgo.png", "Link to the avatar image")
flag.Parse()
}
func main() {
// Create a new Discord session using the provided login information.
// Use discordgo.New(Token) to just use a token for login.
dg, err := discordgo.New(Email, Password, Token)
if err != nil {
fmt.Println("error creating Discord session,", err)
return
}
// Register messageCreate as a callback for the messageCreate events.
dg.AddHandler(messageCreate)
// Open the websocket and begin listening.
dg.Open()
bot, err := dg.User("@me")
if err != nil {
fmt.Println("error fetching the bot details,", err)
return
}
BotID = bot.ID
BotUsername = bot.Username
changeAvatar(dg)
fmt.Println("Bot is now running. Press CTRL-C to exit.")
// Simple way to keep program running until CTRL-C is pressed.
<-make(chan struct{})
return
}
// Helper function to change the avatar
func changeAvatar(s *discordgo.Session) {
resp, err := http.Get(Url)
if err != nil {
fmt.Println("Error retrieving the file, ", err)
return
}
defer resp.Body.Close()
img, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading the response, ", err)
return
}
base64 := base64.StdEncoding.EncodeToString(img)
avatar := fmt.Sprintf("data:%s;base64,%s", http.DetectContentType(img), string(base64))
_, err = s.UserUpdate("", "", BotUsername, avatar, "")
if err != nil {
fmt.Println("Error setting the avatar, ", err)
}
}
// This function will be called (due to AddHandler above) every time a new
// message is created on any channel that the autenticated bot has access to.
func messageCreate(s *discordgo.Session, m *discordgo.MessageCreate) {
// Print message to stdout.
fmt.Printf("%-20s %-20s\n %20s > %s\n", m.ChannelID, time.Now().Format(time.Stamp), m.Author.Username, m.Content)
}