Implement proper version command

This commit is contained in:
eleksir
2025-05-27 22:09:56 +03:00
parent f9dd1acc45
commit 0ed74ed812
5 changed files with 73 additions and 5 deletions

View File

@@ -5,8 +5,11 @@ import (
"fmt" "fmt"
"os" "os"
"os/signal" "os/signal"
"regexp"
"time" "time"
_ "embed"
"buny-jabber-bot/internal/jabber" "buny-jabber-bot/internal/jabber"
"github.com/eleksir/go-xmpp" "github.com/eleksir/go-xmpp"
@@ -14,8 +17,13 @@ import (
"gopkg.in/tomb.v2" "gopkg.in/tomb.v2"
) )
//go:embed version
var version string
// main - фактичеcки, начало и основное тело программы. // main - фактичеcки, начало и основное тело программы.
func main() { func main() {
var err error
for { for {
var j = jabber.Jabber{ //nolint:exhaustruct var j = jabber.Jabber{ //nolint:exhaustruct
SigChan: make(chan os.Signal, 1), SigChan: make(chan os.Signal, 1),
@@ -37,6 +45,8 @@ func main() {
os.Exit(1) os.Exit(1)
} }
j.C.Version = version
// no panic // no panic
switch j.C.Loglevel { switch j.C.Loglevel {
case "fatal": case "fatal":
@@ -66,6 +76,23 @@ func main() {
log.SetOutput(logfile) log.SetOutput(logfile)
} }
j.C.ExeName, err = os.Executable()
if err != nil {
log.Panicf("Unable to find my executable: %s", err)
}
// handle pricky windows case. But honestly i do not expect it runs on windows.
if regexp.MustCompile(".[Ee][Xx][Ee]$").MatchString(j.C.ExeName) {
j.C.ExeName = j.C.ExeName[:len(j.C.ExeName)-4]
if j.C.ExeName == "" {
j.C.ExeName = "buny-jabber-bot"
}
}
log.Infof("Service %s v%s starting", j.C.ExeName, j.C.Version)
myLogLevel := log.GetLevel() myLogLevel := log.GetLevel()
log.Warnf("Loglevel set to %v", myLogLevel) log.Warnf("Loglevel set to %v", myLogLevel)

View File

@@ -0,0 +1 @@
0.1

View File

@@ -30,9 +30,10 @@ func (j *Jabber) Cmd(v xmpp.Chat) error {
} }
if chosenOneTalks { if chosenOneTalks {
answer = fmt.Sprintf("%sпомощь - этот список команд\n", j.C.CSign) answer = fmt.Sprintf("%sпомощь - этот список команд\n", j.C.CSign)
answer += fmt.Sprintf("%shelp - this commands list\n", j.C.CSign) answer += fmt.Sprintf("%shelp - this commands list\n", j.C.CSign)
answer += fmt.Sprintf("%srehash - reload white and black lists", j.C.CSign) answer += fmt.Sprintf("%srehash - reload white and black lists (available to bot admins only)\n", j.C.CSign)
answer += fmt.Sprintf("%sver|%sversion - prints version of software", j.C.CSign, j.C.CSign)
} else { } else {
answer = "Ничем помочь не могу. Луна не светит на тебя." answer = "Ничем помочь не могу. Луна не светит на тебя."
} }
@@ -88,6 +89,13 @@ func (j *Jabber) Cmd(v xmpp.Chat) error {
v.Remote, v.Remote,
) )
var msg xmpp.Chat
msg.Remote = v.Remote
msg.Type = v.Type
msg.Text = "Ничем помочь не могу. Луна не светит на тебя."
_, err := j.Talk.Send(msg)
return err return err
} }
@@ -156,6 +164,13 @@ func (j *Jabber) Cmd(v xmpp.Chat) error {
v.Remote, v.Remote,
) )
var msg xmpp.Chat
msg.Remote = v.Remote
msg.Type = v.Type
msg.Text = "Ничем помочь не могу. Луна не светит на тебя."
_, err := j.Talk.Send(msg)
return err return err
} }
@@ -202,6 +217,29 @@ func (j *Jabber) Cmd(v xmpp.Chat) error {
} }
return err return err
case v.Text == fmt.Sprintf("%sver", j.C.CSign) || v.Text == fmt.Sprintf("%sversion", j.C.CSign):
var (
answer = fmt.Sprintf("Version %s", j.C.Version)
)
dest := v.Remote
if v.Type == "groupchat" {
dest = (strings.SplitN(v.Remote, "/", 2))[0]
}
if _, err := j.Talk.Send(
xmpp.Chat{ //nolint:exhaustruct
Remote: dest,
Text: strings.TrimSpace(answer),
Type: v.Type,
},
); err != nil {
err = fmt.Errorf("unable to send message to %s: %w", v.Remote, err)
return err
}
default: default:
return err return err
} }

View File

@@ -121,8 +121,8 @@ func (j *Jabber) ParseEvent(e interface{}) { //nolint:maintidx,gocognit,gocyclo
if id, err := j.Talk.IqVersionResponse( if id, err := j.Talk.IqVersionResponse(
v, v,
"buny-jabber-bot", j.C.ExeName,
"1.dev", j.C.Version,
(strings.SplitN(runtime.GOOS, "/", 2))[0], (strings.SplitN(runtime.GOOS, "/", 2))[0],
); err != nil { ); err != nil {
err := fmt.Errorf( err := fmt.Errorf(

View File

@@ -58,6 +58,8 @@ type MyConfig struct {
CSign string `json:"csign,omitempty"` CSign string `json:"csign,omitempty"`
Loglevel string `json:"loglevel,omitempty"` Loglevel string `json:"loglevel,omitempty"`
Log string `json:"log,omitempty"` Log string `json:"log,omitempty"`
Version string `json:"version,omitempty"`
ExeName string `json:"exe_name,omitempty"`
} }
// MyWhiteList прототип структурки с белым списком jid-ов. // MyWhiteList прототип структурки с белым списком jid-ов.