[NOT WORKING] Crossplatform command unstable alpha

This commit is contained in:
Minecodes 2023-07-16 21:33:33 +02:00
parent 450d719497
commit 162f82f35b
Signed by: thies
GPG key ID: E6CD3105E59C12D1
12 changed files with 694 additions and 406 deletions

33
cmds/fox.go Normal file
View file

@ -0,0 +1,33 @@
package cmds
import (
"fmt"
"math/rand"
"time"
"github.com/bwmarrin/discordgo"
)
func dcFox(s *discordgo.Session, i *discordgo.InteractionCreate) {
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "",
Flags: discordgo.MessageFlagsEphemeral,
Embeds: []*discordgo.MessageEmbed{
{
Author: &discordgo.MessageEmbedAuthor{
Name: "Random Fox",
URL: "https://randomfox.ca",
IconURL: "https://randomfox.ca/favicon.ico",
},
Color: 0xf48b00,
Image: &discordgo.MessageEmbedImage{
URL: "https://randomfox.ca/images/" + fmt.Sprint(rand.Intn(123)) + ".jpg",
},
Timestamp: time.Now().Format(time.RFC3339),
},
},
},
})
}

184
cmds/gh.go Normal file
View file

@ -0,0 +1,184 @@
package cmds
import (
"encoding/json"
"io/ioutil"
"log"
"net/http"
"strconv"
"time"
"github.com/bwmarrin/discordgo"
)
func dcGhUser(s *discordgo.Session, i *discordgo.InteractionCreate) {
if i.Interaction.ApplicationCommandData().Options[0].Name == "user" {
user := i.Interaction.ApplicationCommandData().Options[0].Options[0].StringValue()
req, err := http.NewRequest("GET", "https://api.github.com/users/"+user, nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("User-Agent", "curl")
req.Response, err = http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer req.Response.Body.Close()
body, err := ioutil.ReadAll(req.Response.Body)
if err != nil {
log.Fatal(err)
}
type User struct {
Login string `json:"login"`
ID int `json:"id"`
NodeID string `json:"node_id"`
AvatarURL string `json:"avatar_url"`
GravatarID string `json:"gravatar_id"`
URL string `json:"url"`
HTMLURL string `json:"html_url"`
FollowersURL string `json:"followers_url"`
FollowingURL string `json:"following_url"`
GistsURL string `json:"gists_url"`
StarredURL string `json:"starred_url"`
SubscriptionsURL string `json:"subscriptions_url"`
OrganizationsURL string `json:"organizations_url"`
ReposURL string `json:"repos_url"`
EventsURL string `json:"events_url"`
ReceivedEventsURL string `json:"received_events_url"`
Type string `json:"type"`
SiteAdmin bool `json:"site_admin"`
Name string `json:"name"`
Company string `json:"company"`
Blog string `json:"blog"`
Location string `json:"location"`
Email string `json:"email"`
Hireable bool `json:"hireable"`
Bio string `json:"bio"`
TwitterUsername string `json:"twitter_username"`
PublicRepos int `json:"public_repos"`
PublicGists int `json:"public_gists"`
Followers int `json:"followers"`
Following int `json:"following"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
}
var data User
err = json.Unmarshal(body, &data)
if err != nil {
log.Fatal(err)
}
var fields = []*discordgo.MessageEmbedField{
{
Name: "Username",
Value: data.Login,
Inline: true,
},
{
Name: "ID",
Value: strconv.Itoa(data.ID),
Inline: true,
},
{
Name: "Public Repos",
Value: strconv.Itoa(data.PublicRepos),
Inline: true,
},
{
Name: "Public Gists",
Value: strconv.Itoa(data.PublicGists),
Inline: true,
},
{
Name: "Followers",
Value: strconv.Itoa(data.Followers),
Inline: true,
},
{
Name: "Following",
Value: strconv.Itoa(data.Following),
Inline: true,
},
{
Name: "Created At",
Value: data.CreatedAt,
Inline: true,
},
}
if data.Bio != "" {
fields = append(fields, &discordgo.MessageEmbedField{
Name: "Bio",
Value: data.Bio,
Inline: true,
})
}
if data.Company != "" {
fields = append(fields, &discordgo.MessageEmbedField{
Name: "Company",
Value: data.Company,
Inline: true,
})
}
if data.Location != "" {
fields = append(fields, &discordgo.MessageEmbedField{
Name: "Location",
Value: data.Location,
Inline: true,
})
}
if data.Email != "" {
fields = append(fields, &discordgo.MessageEmbedField{
Name: "Email",
Value: data.Email,
Inline: true,
})
}
if data.Blog != "" {
fields = append(fields, &discordgo.MessageEmbedField{
Name: "Blog",
Value: data.Blog,
Inline: true,
})
}
if data.TwitterUsername != "" {
fields = append(fields, &discordgo.MessageEmbedField{
Name: "Twitter",
Value: "https://twitter.com/" + data.TwitterUsername,
Inline: true,
})
}
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "",
Embeds: []*discordgo.MessageEmbed{
{
Title: "Github: " + user,
Color: 0x24292D,
Description: "",
Provider: &discordgo.MessageEmbedProvider{
Name: "Github",
URL: "https://github.com",
},
Author: &discordgo.MessageEmbedAuthor{
Name: data.Name,
URL: data.HTMLURL,
IconURL: data.AvatarURL,
},
Timestamp: time.Now().Format(time.RFC3339),
Footer: &discordgo.MessageEmbedFooter{
Text: "Provided by Github",
IconURL: "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png",
},
Fields: fields,
},
},
Flags: discordgo.MessageFlagsEphemeral,
},
})
}
}

39
cmds/httpcat.go Normal file
View file

@ -0,0 +1,39 @@
package cmds
import (
"fmt"
"time"
"github.com/bwmarrin/discordgo"
)
func dcHTTPCat(s *discordgo.Session, i *discordgo.InteractionCreate) {
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "",
Flags: discordgo.MessageFlagsEphemeral,
Embeds: []*discordgo.MessageEmbed{
{
Title: "HTTP Cat",
Color: 0xfa7c91,
Image: &discordgo.MessageEmbedImage{
URL: "https://http.cat/" + fmt.Sprint(i.Interaction.ApplicationCommandData().Options[0].FloatValue()) + ".jpg",
Width: 1400,
Height: 1600,
},
Provider: &discordgo.MessageEmbedProvider{
Name: "HTTP Cat",
URL: "https://http.cat",
},
Author: &discordgo.MessageEmbedAuthor{
Name: "HTTP Cat",
URL: "https://http.cat",
IconURL: "https://http.cat/favicon.ico",
},
Timestamp: time.Now().Format(time.RFC3339),
},
},
},
})
}

39
cmds/httpdog.go Normal file
View file

@ -0,0 +1,39 @@
package cmds
import (
"fmt"
"time"
"github.com/bwmarrin/discordgo"
)
func dcHTTPDog(s *discordgo.Session, i *discordgo.InteractionCreate) {
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "",
Flags: discordgo.MessageFlagsEphemeral,
Embeds: []*discordgo.MessageEmbed{
{
Title: "HTTP Dog",
Color: 0xfa7c91,
Image: &discordgo.MessageEmbedImage{
URL: "https://http.dog/" + fmt.Sprint(i.Interaction.ApplicationCommandData().Options[0].FloatValue()) + ".jpg",
Width: 1400,
Height: 1600,
},
Provider: &discordgo.MessageEmbedProvider{
Name: "HTTP Dog",
URL: "https://http.dog",
},
Author: &discordgo.MessageEmbedAuthor{
Name: "HTTP Dog",
URL: "https://http.dog",
IconURL: "https://http.dog/favicon.ico",
},
Timestamp: time.Now().Format(time.RFC3339),
},
},
},
})
}

46
cmds/password.go Normal file
View file

@ -0,0 +1,46 @@
package cmds
import (
"math/rand"
"strings"
"github.com/bwmarrin/discordgo"
)
var (
minPasswordLength = float64(12)
maxPasswordLength = float64(100)
passwordChars = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_+{}[]:;?/.,<>")
)
func gen(length int64) string {
password := make([]rune, length)
for i := range password {
password[i] = passwordChars[rand.Intn(len(passwordChars))]
}
// check if password has at least one number, one uppercase letter, one lowercase letter and one special character
// if not, generate a new password
if !strings.ContainsAny(string(password), "0123456789") || !strings.ContainsAny(string(password), "abcdefghijklmnopqrstuvwxyz") || !strings.ContainsAny(string(password), "ABCDEFGHIJKLMNOPQRSTUVWXYZ") || !strings.ContainsAny(string(password), "!@#$%^&*()_+{}[]:;?/.,<>") {
return gen(length)
}
return string(password)
}
func dcPassword(s *discordgo.Session, i *discordgo.InteractionCreate) {
length := i.Interaction.ApplicationCommandData().Options[0].IntValue()
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "",
Flags: discordgo.MessageFlagsEphemeral,
Embeds: []*discordgo.MessageEmbed{
{
Title: "Password",
Color: 0x00ff00,
Description: "Your password is: `" + gen(length) + "`",
},
},
},
})
}

15
cmds/ping.go Normal file
View file

@ -0,0 +1,15 @@
package cmds
import (
"github.com/bwmarrin/discordgo"
)
func dcPing(s *discordgo.Session, i *discordgo.InteractionCreate) {
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "Pong!",
Flags: discordgo.MessageFlagsEphemeral,
},
})
}

27
cmds/qrcode.go Normal file
View file

@ -0,0 +1,27 @@
package cmds
import (
"github.com/bwmarrin/discordgo"
)
func dcQRCode(s *discordgo.Session, i *discordgo.InteractionCreate) {
value := i.Interaction.ApplicationCommandData().Options[0].StringValue()
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "",
Flags: discordgo.MessageFlagsEphemeral,
Embeds: []*discordgo.MessageEmbed{
{
Title: "QR Code",
Color: 0xffff66,
Image: &discordgo.MessageEmbedImage{
URL: "https://api.qrserver.com/v1/create-qr-code/?size=1000x1000&data=" + value,
Width: 1000,
Height: 1000,
},
},
},
},
})
}

15
cmds/trains.go Normal file
View file

@ -0,0 +1,15 @@
package cmds
import (
"github.com/bwmarrin/discordgo"
)
func dcTrains(s *discordgo.Session, i *discordgo.InteractionCreate) {
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "🚅 I like trains! 🚅",
Flags: discordgo.MessageFlagsEphemeral,
},
})
}

77
cmds/weather.go Normal file
View file

@ -0,0 +1,77 @@
package cmds
import (
"io/ioutil"
"log"
"net/http"
"time"
"github.com/bwmarrin/discordgo"
)
func dcWeather(s *discordgo.Session, i *discordgo.InteractionCreate) {
loc := i.Interaction.ApplicationCommandData().Options[0].StringValue()
// make http request
req, err := http.NewRequest("GET", "https://wttr.in/"+loc+"?0&T", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("User-Agent", "curl")
req.Response, err = http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer req.Response.Body.Close()
body, err := ioutil.ReadAll(req.Response.Body)
if err != nil {
log.Fatal(err)
}
if i.Interaction.ApplicationCommandData().Options[1].BoolValue() {
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "",
Embeds: []*discordgo.MessageEmbed{
{
Title: "Weather in " + loc,
Description: "```" + string(body) + "```",
Color: 0x0E86D4,
Timestamp: time.Now().Format(time.RFC3339),
Provider: &discordgo.MessageEmbedProvider{
Name: "wttr.in",
URL: "https://wttr.in",
},
Author: &discordgo.MessageEmbedAuthor{
Name: "wttr.in",
URL: "https://wttr.in",
},
},
},
Flags: discordgo.MessageFlagsEphemeral,
},
})
} else {
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "",
Embeds: []*discordgo.MessageEmbed{
{
Title: "Weather in " + loc,
Description: "```" + string(body) + "```",
Color: 0x0E86D4,
Timestamp: time.Now().Format(time.RFC3339),
Provider: &discordgo.MessageEmbedProvider{
Name: "wttr.in",
URL: "https://wttr.in",
},
Author: &discordgo.MessageEmbedAuthor{
Name: "wttr.in",
URL: "https://wttr.in",
},
},
},
},
})
}
}

12
go.mod Executable file → Normal file
View file

@ -1,14 +1,18 @@
module tatake
module git.minecodes.de/thies/Tatake
go 1.19
go 1.20
require (
github.com/bwmarrin/discordgo v0.26.1
github.com/joho/godotenv v1.4.0
github.com/bwmarrin/discordgo v0.27.1
github.com/joho/godotenv v1.5.1
gosrc.io/xmpp v0.5.1
)
require (
github.com/google/uuid v1.1.1 // indirect
github.com/gorilla/websocket v1.4.2 // indirect
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b // indirect
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 // indirect
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 // indirect
nhooyr.io/websocket v1.6.5 // indirect
)

116
go.sum Executable file → Normal file
View file

@ -1,14 +1,122 @@
github.com/bwmarrin/discordgo v0.26.1 h1:AIrM+g3cl+iYBr4yBxCBp9tD9jR3K7upEjl0d89FRkE=
github.com/bwmarrin/discordgo v0.26.1/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY=
github.com/agnivade/wasmbrowsertest v0.3.1/go.mod h1:zQt6ZTdl338xxRaMW395qccVE2eQm0SjC/SDz0mPWQI=
github.com/bwmarrin/discordgo v0.27.1 h1:ib9AIc/dom1E/fSIulrBwnez0CToJE113ZGt4HoliGY=
github.com/bwmarrin/discordgo v0.27.1/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY=
github.com/chromedp/cdproto v0.0.0-20190614062957-d6d2f92b486d/go.mod h1:S8mB5wY3vV+vRIzf39xDXsw3XKYewW9X6rW2aEmkrSw=
github.com/chromedp/cdproto v0.0.0-20190621002710-8cbd498dd7a0/go.mod h1:S8mB5wY3vV+vRIzf39xDXsw3XKYewW9X6rW2aEmkrSw=
github.com/chromedp/cdproto v0.0.0-20190812224334-39ef923dcb8d/go.mod h1:0YChpVzuLJC5CPr+x3xkHN6Z8KOSXjNbL7qV8Wc4GW0=
github.com/chromedp/cdproto v0.0.0-20190926234355-1b4886c6fad6/go.mod h1:0YChpVzuLJC5CPr+x3xkHN6Z8KOSXjNbL7qV8Wc4GW0=
github.com/chromedp/chromedp v0.3.1-0.20190619195644-fd957a4d2901/go.mod h1:mJdvfrVn594N9tfiPecUidF6W5jPRKHymqHfzbobPsM=
github.com/chromedp/chromedp v0.4.0/go.mod h1:DC3QUn4mJ24dwjcaGQLoZrhm4X/uPHZ6spDbS2uFhm4=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
github.com/fatih/color v1.6.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/go-interpreter/wagon v0.5.1-0.20190713202023-55a163980b6c/go.mod h1:5+b/MBYkclRZngKF5s6qrgWxSLgE9F5dFdO1hAueZLc=
github.com/go-interpreter/wagon v0.6.0/go.mod h1:5+b/MBYkclRZngKF5s6qrgWxSLgE9F5dFdO1hAueZLc=
github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo=
github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190908185732-236ed259b199/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg=
github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
github.com/knq/sysutil v0.0.0-20181215143952-f05b59f0f307/go.mod h1:BjPj+aVjl9FW/cCGiF3nGh5v+9Gd3VCgBQbod/GlMaQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/mailru/easyjson v0.0.0-20190403194419-1ea4449da983/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.0.0-20190620125010-da37f6c1e481/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/twitchyliquid64/golang-asm v0.0.0-20190126203739-365674df15fc/go.mod h1:NoCfSFWosfqMqmmD7hApkirIK9ozpHjxRnRxs1l413A=
go.coder.com/go-tools v0.0.0-20190317003359-0c6a35b74a16/go.mod h1:iKV5yK9t+J5nG9O3uF6KYdPEz3dyfMyB15MN1rbQ8Qw=
go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
golang.org/x/crypto v0.0.0-20180426230345-b49d69b5da94/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b h1:7mWr3k41Qtv8XlltBkDkl8LoP3mpSgBW8BUoxtEdbXg=
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181102091132-c10e9556a7bc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190306220234-b354f8bf4d9e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190618155005-516e3c20635f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190927073244-c990c680b611/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gosrc.io/xmpp v0.5.1 h1:Rgrm5s2rt+npGggJH3HakQxQXR8ZZz3+QRzakRQqaq4=
gosrc.io/xmpp v0.5.1/go.mod h1:L3NFMqYOxyLz3JGmgFyWf7r9htE91zVGiK40oW4RwdY=
gotest.tools v2.1.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
gotest.tools/gotestsum v0.3.5/go.mod h1:Mnf3e5FUzXbkCfynWBGOwLssY7gTQgCHObK9tMpAriY=
mvdan.cc/sh v2.6.4+incompatible/go.mod h1:IeeQbZq+x2SUGBensq/jge5lLQbS3XT2ktyp3wrt4x8=
nhooyr.io/websocket v1.6.5 h1:8TzpkldRfefda5JST+CnOH135bzVPz5uzfn/AF+gVKg=
nhooyr.io/websocket v1.6.5/go.mod h1:F259lAzPRAH0htX2y3ehpJe09ih1aSHN7udWki1defY=

497
main.go
View file

@ -3,26 +3,24 @@ package main
import (
//"errors"
"encoding/json"
"flag"
"fmt"
"math/rand"
"strconv"
"strings"
"time"
//"fmt"
"io/ioutil"
"log"
"net/http"
"os"
"os/signal"
"sync"
//"strings"
//"time"
"github.com/bwmarrin/discordgo"
"github.com/joho/godotenv"
"gosrc.io/xmpp"
"gosrc.io/xmpp/stanza"
)
var (
@ -31,7 +29,6 @@ var (
RemoveCommands = flag.Bool("rmcmd", true, "Remove all commands after shutdowning or not")
minPasswordLength = float64(12)
maxPasswordLength = float64(100)
passwordChars = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_+{}[]:;?/.,<>")
InfoMessages = []string{
`Hello, I'm a bot made by <@!556848982433857537>!`,
`Hello SlimeDiamond`,
@ -68,19 +65,6 @@ func init() {
}
}
func gen(length int64) string {
password := make([]rune, length)
for i := range password {
password[i] = passwordChars[rand.Intn(len(passwordChars))]
}
// check if password has at least one number, one uppercase letter, one lowercase letter and one special character
// if not, generate a new password
if !strings.ContainsAny(string(password), "0123456789") || !strings.ContainsAny(string(password), "abcdefghijklmnopqrstuvwxyz") || !strings.ContainsAny(string(password), "ABCDEFGHIJKLMNOPQRSTUVWXYZ") || !strings.ContainsAny(string(password), "!@#$%^&*()_+{}[]:;?/.,<>") {
return gen(length)
}
return string(password)
}
var (
integerOptionMinValue = 1.0
dmPermission = false
@ -193,383 +177,15 @@ var (
}
commandHandlers = map[string]func(s *discordgo.Session, i *discordgo.InteractionCreate){
"trains": func(s *discordgo.Session, i *discordgo.InteractionCreate) {
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "🚅 I like trains! 🚅",
Flags: discordgo.MessageFlagsEphemeral,
},
})
},
"ping": func(s *discordgo.Session, i *discordgo.InteractionCreate) {
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "Pong!",
Flags: discordgo.MessageFlagsEphemeral,
},
})
},
"weather": func(s *discordgo.Session, i *discordgo.InteractionCreate) {
loc := i.Interaction.ApplicationCommandData().Options[0].StringValue()
// make http request
req, err := http.NewRequest("GET", "https://wttr.in/"+loc+"?0&T", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("User-Agent", "curl")
req.Response, err = http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer req.Response.Body.Close()
body, err := ioutil.ReadAll(req.Response.Body)
if err != nil {
log.Fatal(err)
}
if i.Interaction.ApplicationCommandData().Options[1].BoolValue() {
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "",
Embeds: []*discordgo.MessageEmbed{
{
Title: "Weather in " + loc,
Description: "```" + string(body) + "```",
Color: 0x0E86D4,
Timestamp: time.Now().Format(time.RFC3339),
Provider: &discordgo.MessageEmbedProvider{
Name: "wttr.in",
URL: "https://wttr.in",
},
Author: &discordgo.MessageEmbedAuthor{
Name: "wttr.in",
URL: "https://wttr.in",
},
},
},
Flags: discordgo.MessageFlagsEphemeral,
},
})
} else {
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "",
Embeds: []*discordgo.MessageEmbed{
{
Title: "Weather in " + loc,
Description: "```" + string(body) + "```",
Color: 0x0E86D4,
Timestamp: time.Now().Format(time.RFC3339),
Provider: &discordgo.MessageEmbedProvider{
Name: "wttr.in",
URL: "https://wttr.in",
},
Author: &discordgo.MessageEmbedAuthor{
Name: "wttr.in",
URL: "https://wttr.in",
},
},
},
},
})
}
},
"gh": func(s *discordgo.Session, i *discordgo.InteractionCreate) {
if i.Interaction.ApplicationCommandData().Options[0].Name == "user" {
user := i.Interaction.ApplicationCommandData().Options[0].Options[0].StringValue()
req, err := http.NewRequest("GET", "https://api.github.com/users/"+user, nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("User-Agent", "curl")
req.Response, err = http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer req.Response.Body.Close()
body, err := ioutil.ReadAll(req.Response.Body)
if err != nil {
log.Fatal(err)
}
type User struct {
Login string `json:"login"`
ID int `json:"id"`
NodeID string `json:"node_id"`
AvatarURL string `json:"avatar_url"`
GravatarID string `json:"gravatar_id"`
URL string `json:"url"`
HTMLURL string `json:"html_url"`
FollowersURL string `json:"followers_url"`
FollowingURL string `json:"following_url"`
GistsURL string `json:"gists_url"`
StarredURL string `json:"starred_url"`
SubscriptionsURL string `json:"subscriptions_url"`
OrganizationsURL string `json:"organizations_url"`
ReposURL string `json:"repos_url"`
EventsURL string `json:"events_url"`
ReceivedEventsURL string `json:"received_events_url"`
Type string `json:"type"`
SiteAdmin bool `json:"site_admin"`
Name string `json:"name"`
Company string `json:"company"`
Blog string `json:"blog"`
Location string `json:"location"`
Email string `json:"email"`
Hireable bool `json:"hireable"`
Bio string `json:"bio"`
TwitterUsername string `json:"twitter_username"`
PublicRepos int `json:"public_repos"`
PublicGists int `json:"public_gists"`
Followers int `json:"followers"`
Following int `json:"following"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
}
var data User
err = json.Unmarshal(body, &data)
if err != nil {
log.Fatal(err)
}
var fields = []*discordgo.MessageEmbedField{
{
Name: "Username",
Value: data.Login,
Inline: true,
},
{
Name: "ID",
Value: strconv.Itoa(data.ID),
Inline: true,
},
{
Name: "Public Repos",
Value: strconv.Itoa(data.PublicRepos),
Inline: true,
},
{
Name: "Public Gists",
Value: strconv.Itoa(data.PublicGists),
Inline: true,
},
{
Name: "Followers",
Value: strconv.Itoa(data.Followers),
Inline: true,
},
{
Name: "Following",
Value: strconv.Itoa(data.Following),
Inline: true,
},
{
Name: "Created At",
Value: data.CreatedAt,
Inline: true,
},
}
if data.Bio != "" {
fields = append(fields, &discordgo.MessageEmbedField{
Name: "Bio",
Value: data.Bio,
Inline: true,
})
}
if data.Company != "" {
fields = append(fields, &discordgo.MessageEmbedField{
Name: "Company",
Value: data.Company,
Inline: true,
})
}
if data.Location != "" {
fields = append(fields, &discordgo.MessageEmbedField{
Name: "Location",
Value: data.Location,
Inline: true,
})
}
if data.Email != "" {
fields = append(fields, &discordgo.MessageEmbedField{
Name: "Email",
Value: data.Email,
Inline: true,
})
}
if data.Blog != "" {
fields = append(fields, &discordgo.MessageEmbedField{
Name: "Blog",
Value: data.Blog,
Inline: true,
})
}
if data.TwitterUsername != "" {
fields = append(fields, &discordgo.MessageEmbedField{
Name: "Twitter",
Value: "https://twitter.com/" + data.TwitterUsername,
Inline: true,
})
}
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "",
Embeds: []*discordgo.MessageEmbed{
{
Title: "Github: " + user,
Color: 0x24292D,
Description: "",
Provider: &discordgo.MessageEmbedProvider{
Name: "Github",
URL: "https://github.com",
},
Author: &discordgo.MessageEmbedAuthor{
Name: data.Name,
URL: data.HTMLURL,
IconURL: data.AvatarURL,
},
Timestamp: time.Now().Format(time.RFC3339),
Footer: &discordgo.MessageEmbedFooter{
Text: "Provided by Github",
IconURL: "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png",
},
Fields: fields,
},
},
Flags: discordgo.MessageFlagsEphemeral,
},
})
}
},
"httpdog": func(s *discordgo.Session, i *discordgo.InteractionCreate) {
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "",
Flags: discordgo.MessageFlagsEphemeral,
Embeds: []*discordgo.MessageEmbed{
{
Title: "HTTP Dog",
Color: 0xfa7c91,
Image: &discordgo.MessageEmbedImage{
URL: "https://http.dog/" + fmt.Sprint(i.Interaction.ApplicationCommandData().Options[0].FloatValue()) + ".jpg",
Width: 1400,
Height: 1600,
},
Provider: &discordgo.MessageEmbedProvider{
Name: "HTTP Dog",
URL: "https://http.dog",
},
Author: &discordgo.MessageEmbedAuthor{
Name: "HTTP Dog",
URL: "https://http.dog",
IconURL: "https://http.dog/favicon.ico",
},
Timestamp: time.Now().Format(time.RFC3339),
},
},
},
})
},
"httpcat": func(s *discordgo.Session, i *discordgo.InteractionCreate) {
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "",
Flags: discordgo.MessageFlagsEphemeral,
Embeds: []*discordgo.MessageEmbed{
{
Title: "HTTP Cat",
Color: 0xfa7c91,
Image: &discordgo.MessageEmbedImage{
URL: "https://http.cat/" + fmt.Sprint(i.Interaction.ApplicationCommandData().Options[0].FloatValue()) + ".jpg",
Width: 1400,
Height: 1600,
},
Provider: &discordgo.MessageEmbedProvider{
Name: "HTTP Cat",
URL: "https://http.cat",
},
Author: &discordgo.MessageEmbedAuthor{
Name: "HTTP Cat",
URL: "https://http.cat",
IconURL: "https://http.cat/favicon.ico",
},
Timestamp: time.Now().Format(time.RFC3339),
},
},
},
})
},
"fox": func(s *discordgo.Session, i *discordgo.InteractionCreate) {
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "",
Flags: discordgo.MessageFlagsEphemeral,
Embeds: []*discordgo.MessageEmbed{
{
Author: &discordgo.MessageEmbedAuthor{
Name: "Random Fox",
URL: "https://randomfox.ca",
IconURL: "https://randomfox.ca/favicon.ico",
},
Color: 0xf48b00,
Image: &discordgo.MessageEmbedImage{
URL: "https://randomfox.ca/images/" + fmt.Sprint(rand.Intn(123)) + ".jpg",
},
Timestamp: time.Now().Format(time.RFC3339),
},
},
},
})
},
"qrcode": func(s *discordgo.Session, i *discordgo.InteractionCreate) {
value := i.Interaction.ApplicationCommandData().Options[0].StringValue()
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "",
Flags: discordgo.MessageFlagsEphemeral,
Embeds: []*discordgo.MessageEmbed{
{
Title: "QR Code",
Color: 0xffff66,
Image: &discordgo.MessageEmbedImage{
URL: "https://api.qrserver.com/v1/create-qr-code/?size=1000x1000&data=" + value,
Width: 1000,
Height: 1000,
},
},
},
},
})
},
"password": func(s *discordgo.Session, i *discordgo.InteractionCreate) {
length := i.Interaction.ApplicationCommandData().Options[0].IntValue()
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Content: "",
Flags: discordgo.MessageFlagsEphemeral,
Embeds: []*discordgo.MessageEmbed{
{
Title: "Password",
Color: 0x00ff00,
Description: "Your password is: `" + gen(length) + "`",
},
},
},
})
},
"trains": cmds.dcTrains,
"ping": cmds.dcPing,
"weather": cmds.dcWeather,
"gh": cmds.dcGhUser,
"httpdog": cmds.dcHTTPDog,
"httpcat": cmds.dcHTTPCat,
"fox": cmds.dcFox,
"qrcode": cmds.dcQRCode,
"password": cmds.dcPassword,
}
)
@ -582,7 +198,24 @@ func init() {
})
}
func main() {
func handleMessage(s xmpp.Sender, p stanza.Packet) {
msg, ok := p.(stanza.Message)
if !ok {
_, _ = fmt.Fprintf(os.Stdout, "Ignoring packet: %T\n", p)
return
}
_, _ = fmt.Fprintf(os.Stdout, "Body = %s - from = %s\n", msg.Body, msg.From)
reply := stanza.Message{Attrs: stanza.Attrs{To: msg.From}, Body: msg.Body}
_ = s.Send(reply)
}
func errorHandler(err error) {
fmt.Println(err.Error())
}
func dc(wg *sync.WaitGroup) {
defer wg.Done()
s.AddHandler(func(s *discordgo.Session, r *discordgo.Ready) {
log.Printf("Logged in as: %v#%v", s.State.User.Username, s.State.User.Discriminator)
})
@ -624,4 +257,72 @@ func main() {
}
log.Println("Gracefully shutting down.")
os.Exit(0)
}
func xmppBot(wg *sync.WaitGroup) {
defer wg.Done()
config := xmpp.Config{
TransportConfiguration: xmpp.TransportConfiguration{
Address: "etc.minecodes.de:5222",
},
Jid: "tatake@etc.minecodes.de",
Credential: xmpp.Password("T*AM5%843#H&w!6krd&!"),
StreamLogger: os.Stdout,
Insecure: false,
// TLSConfig: tls.Config{InsecureSkipVerify: true},
}
router := xmpp.NewRouter()
router.HandleFunc("message", handleMessage)
client, err := xmpp.NewClient(&config, router, errorHandler)
if err != nil {
log.Fatalf("%+v", err)
}
// If you pass the client to a connection manager, it will handle the reconnect policy
// for you automatically.
cm := xmpp.NewStreamManager(client, nil)
log.Fatal(cm.Run())
stop := make(chan os.Signal, 1)
signal.Notify(stop, os.Interrupt)
log.Println("Press Ctrl+C to exit")
<-stop
cm.Stop()
}
func main() {
var wg sync.WaitGroup
wg.Add(2)
go dc(&wg)
go xmppBot(&wg)
wg.Wait()
/**config := xmpp.Config{
TransportConfiguration: xmpp.TransportConfiguration{
Address: "etc.minecodes.de:5222",
},
Jid: "tatake@etc.minecodes.de",
Credential: xmpp.Password("T*AM5%843#H&w!6krd&!"),
StreamLogger: os.Stdout,
Insecure: false,
// TLSConfig: tls.Config{InsecureSkipVerify: true},
}
router := xmpp.NewRouter()
router.HandleFunc("message", handleMessage)
client, err := xmpp.NewClient(&config, router, errorHandler)
if err != nil {
log.Fatalf("%+v", err)
}
// If you pass the client to a connection manager, it will handle the reconnect policy
// for you automatically.
cm := xmpp.NewStreamManager(client, nil)
log.Fatal(cm.Run())**/
}