diff --git a/examples/avatar/README.md b/examples/avatar/README.md index 858e11a..de4f80d 100644 --- a/examples/avatar/README.md +++ b/examples/avatar/README.md @@ -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 diff --git a/examples/avatar/url/README.md b/examples/avatar/url/README.md new file mode 100644 index 0000000..6247f00 --- /dev/null +++ b/examples/avatar/url/README.md @@ -0,0 +1,41 @@ + +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" +``` \ No newline at end of file diff --git a/examples/avatar/url/main.go b/examples/avatar/url/main.go new file mode 100644 index 0000000..7a60682 --- /dev/null +++ b/examples/avatar/url/main.go @@ -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) +}