Compare commits

..
17 Commits
Author SHA1 Message Date
Dustin Pianalto 1e88425853 force bot to run on node with label
CI / build (push) Has been cancelled
2021-07-19 13:06:16 -08:00
Dustin Pianalto eacdd455f9 force bot to run on node with label
CI / build (push) Has been cancelled
2021-07-19 12:49:57 -08:00
Dustin Pianalto 1e184c97a2 Test broadcast response
CI / build (push) Has been cancelled
2021-06-30 22:00:38 -08:00
Dustin Pianalto 8c2bb50637 Test broadcast response
CI / build (push) Has been cancelled
2021-06-30 21:54:35 -08:00
Dustin Pianalto 5f20f1b129 Test broadcast response
CI / build (push) Has been cancelled
2021-06-30 21:46:31 -08:00
Dustin Pianalto 8a9373637f Test broadcast response
CI / build (push) Has been cancelled
2021-06-30 21:10:53 -08:00
Dustin Pianalto b1f705746e Test broadcast response
CI / build (push) Has been cancelled
2021-06-30 21:00:43 -08:00
Dustin Pianalto 8893cc62f4 Test broadcast response
CI / build (push) Has been cancelled
2021-06-30 20:56:51 -08:00
Dustin Pianalto 0bc5953c65 Test broadcast response
CI / build (push) Has been cancelled
2021-06-30 14:51:04 -08:00
Dustin Pianalto 821ede69cf Test broadcast response
CI / build (push) Has been cancelled
2021-06-30 14:34:03 -08:00
Dustin Pianalto fe2e28357a Add broadcast command
CI / build (push) Has been cancelled
2021-02-24 17:18:52 -09:00
Dustin Pianalto b8ca9506c9 Add broadcast command
CI / build (push) Has been cancelled
2021-02-24 17:09:35 -09:00
Dustin Pianalto 1d8de473c4 Add broadcast command
CI / build (push) Has been cancelled
2021-02-24 16:29:42 -09:00
Dustin Pianalto 6a08f06101 Compare servernames as lower
CI / build (push) Has been cancelled
2021-02-24 14:29:32 -09:00
Dustin Pianalto dddcc8c316 Update format on listplayers output
CI / build (push) Has been cancelled
2021-02-24 14:10:55 -09:00
Dustin Pianalto 5a384305b0 Add initial listplayers
CI / build (push) Has been cancelled
2021-02-24 14:06:18 -09:00
Dustin Pianalto fb5f508fdf Add initial listplayers
CI / build (push) Has been cancelled
2021-02-24 14:01:20 -09:00
6 changed files with 105 additions and 5 deletions
+2
View File
@@ -34,3 +34,5 @@ spec:
secretKeyRef: secretKeyRef:
name: geeksbot name: geeksbot
key: discord_token key: discord_token
nodeSelector:
geeks: "yes"
+1
View File
@@ -8,6 +8,7 @@ require (
github.com/go-bindata/go-bindata v3.1.2+incompatible // indirect github.com/go-bindata/go-bindata v3.1.2+incompatible // indirect
github.com/golang-migrate/migrate v3.5.4+incompatible // indirect github.com/golang-migrate/migrate v3.5.4+incompatible // indirect
github.com/golang-migrate/migrate/v4 v4.14.1 github.com/golang-migrate/migrate/v4 v4.14.1
github.com/gorcon/rcon v1.3.1
github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/lib/pq v1.8.0 github.com/lib/pq v1.8.0
) )
+2
View File
@@ -152,6 +152,8 @@ github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/gorcon/rcon v1.3.1 h1:z6a5iOlojfdkvA1qaKEng7QfCJuCzYlC9BUDs6/M+74=
github.com/gorcon/rcon v1.3.1/go.mod h1:2gztBPSV2WxkPkqV4jiJkdHs+NT46mNSGb8JxbPesx4=
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
+96 -4
View File
@@ -2,6 +2,7 @@ package arcon
import ( import (
"fmt" "fmt"
"log"
"strings" "strings"
"github.com/dustinpianalto/disgoman" "github.com/dustinpianalto/disgoman"
@@ -11,10 +12,10 @@ import (
"github.com/gorcon/rcon" "github.com/gorcon/rcon"
) )
var listplayersCommand = &disgoman.Command{ var ListplayersCommand = &disgoman.Command{
Name: "request", Name: "listplayers",
Aliases: nil, Aliases: nil,
Description: "Submit a request for the guild staff", Description: "List the players currently connected to a ARK server.",
OwnerOnly: false, OwnerOnly: false,
Hidden: false, Hidden: false,
RequiredPermissions: 0, RequiredPermissions: 0,
@@ -44,7 +45,18 @@ func listplayersCommandFunc(ctx disgoman.Context, args []string) {
for _, server := range servers { for _, server := range servers {
go listplayers(ctx, server) go listplayers(ctx, server)
} }
return
} }
serverName := strings.Join(args, " ")
server, err := services.ServerService.ServerByName(serverName, guild)
if err != nil {
discord_utils.SendErrorMessage(ctx,
fmt.Sprintf("Could not find **%s** in this guild.", serverName),
err,
)
return
}
listplayers(ctx, server)
} }
func listplayers(ctx disgoman.Context, server geeksbot.Server) { func listplayers(ctx disgoman.Context, server geeksbot.Server) {
@@ -87,6 +99,86 @@ func listplayers(ctx disgoman.Context, server geeksbot.Server) {
} }
} }
_, _ = ctx.Session.ChannelMessageEdit(ctx.Channel.ID, msg.ID, _, _ = ctx.Session.ChannelMessageEdit(ctx.Channel.ID, msg.ID,
fmt.Sprintf("**%s:**\n%s", server.Name, strings.Join(players, "\n")), fmt.Sprintf("**%s:**%s", server.Name, strings.Join(players, "\n")),
)
}
var BroadcastCommand = &disgoman.Command{
Name: "broadcast",
Aliases: nil,
Description: "Broadcast a message to ARK servers.",
OwnerOnly: false,
Hidden: false,
RequiredPermissions: 0,
Invoke: broadcastCommandFunc,
}
func broadcastCommandFunc(ctx disgoman.Context, args []string) {
guild, err := services.GuildService.GetOrCreateGuild(ctx.Guild.ID)
if err != nil {
discord_utils.SendErrorMessage(ctx, "Error getting Guild from the database", err)
return
}
author, err := services.UserService.GetOrCreateUser(ctx.Message.Author.ID)
if err != nil {
discord_utils.SendErrorMessage(ctx, "Sorry, there was a problem getting your user.", err)
return
}
if !discord_utils.IsGuildAdmin(ctx, author) && !discord_utils.IsGuildMod(ctx, author) {
return
}
message := strings.Join(args[1:len(args)], " ")
if strings.ToLower(args[0]) == "all" {
servers, err := services.ServerService.GuildServers(guild)
if err != nil {
discord_utils.SendErrorMessage(ctx, "Could not find any servers for this guild", err)
return
}
for _, server := range servers {
go broadcast(ctx, server, message)
}
return
} else {
serverName := strings.Title(strings.ReplaceAll(args[0], "_", " "))
server, err := services.ServerService.ServerByName(serverName, guild)
if err != nil {
discord_utils.SendErrorMessage(ctx, fmt.Sprintf("Could not find %s", serverName), err)
return
}
broadcast(ctx, server, message)
}
}
func broadcast(ctx disgoman.Context, server geeksbot.Server, message string) {
msg, err := ctx.Send(fmt.Sprintf("**Broadcasting to: %s**", server.Name))
if err != nil {
discord_utils.SendErrorMessage(ctx, "There was an error getting the player list", err)
return
}
conn, err := rcon.Dial(fmt.Sprintf("%s:%d", server.IPAddr, server.Port), server.Password)
if err != nil {
_, _ = ctx.Session.ChannelMessageEdit(ctx.Channel.ID, msg.ID,
fmt.Sprintf("**Could not open connection to %s**", server.Name),
)
return
}
defer conn.Close()
userName := discord_utils.GetDisplayName(ctx, ctx.Message.Author.ID)
response, err := conn.Execute(fmt.Sprintf("broadcast %s: %s", userName, message))
if err != nil {
_, _ = ctx.Session.ChannelMessageEdit(ctx.Channel.ID, msg.ID,
fmt.Sprintf("**There was a problem getting a response from %s**", server.Name),
)
return
}
log.Printf("%T - %#v", response, response)
if strings.Contains(response, "Server received, But no response!!") {
_, _ = ctx.Session.ChannelMessageEdit(ctx.Channel.ID, msg.ID,
fmt.Sprintf("**%s Broadcast Successful**", server.Name),
)
return
}
_, _ = ctx.Session.ChannelMessageEdit(ctx.Channel.ID, msg.ID,
fmt.Sprintf("**Broadcasting to %s Failed!**", server.Name),
) )
} }
+3
View File
@@ -2,6 +2,7 @@ package exts
import ( import (
"github.com/dustinpianalto/disgoman" "github.com/dustinpianalto/disgoman"
"github.com/dustinpianalto/geeksbot/internal/exts/arcon"
"github.com/dustinpianalto/geeksbot/internal/exts/guild" "github.com/dustinpianalto/geeksbot/internal/exts/guild"
"github.com/dustinpianalto/geeksbot/internal/exts/requests" "github.com/dustinpianalto/geeksbot/internal/exts/requests"
"github.com/dustinpianalto/geeksbot/internal/exts/utils" "github.com/dustinpianalto/geeksbot/internal/exts/utils"
@@ -36,4 +37,6 @@ func AddCommandHandlers(g *disgoman.CommandManager) {
_ = g.AddCommand(requests.ListCommand) _ = g.AddCommand(requests.ListCommand)
_ = g.AddCommand(requests.ViewCommand) _ = g.AddCommand(requests.ViewCommand)
_ = g.AddCommand(requests.CommentCommand) _ = g.AddCommand(requests.CommentCommand)
_ = g.AddCommand(arcon.ListplayersCommand)
_ = g.AddCommand(arcon.BroadcastCommand)
} }
+1 -1
View File
@@ -74,7 +74,7 @@ func (s serverService) ServerByID(id int) (geeksbot.Server, error) {
func (s serverService) ServerByName(name string, guild geeksbot.Guild) (geeksbot.Server, error) { func (s serverService) ServerByName(name string, guild geeksbot.Guild) (geeksbot.Server, error) {
var id int var id int
queryString := "SELECT id FROM servers WHERE name = $1 AND guild_id = $2" queryString := "SELECT id FROM servers WHERE LOWER(name) = LOWER($1) AND guild_id = $2"
row := s.db.QueryRow(queryString, name, guild.ID) row := s.db.QueryRow(queryString, name, guild.ID)
err := row.Scan(&id) err := row.Scan(&id)
if err != nil { if err != nil {