Initial commit: docker compose config
Release Docker multi arch / docker (push) Has been cancelled
Test Install Script / Test Script Syntax (push) Has been cancelled
Test Install Script / Test on almalinux-10 (default) (push) Has been cancelled
Test Install Script / Test on almalinux-10 (root) (push) Has been cancelled
Test Install Script / Test on almalinux-8 (default) (push) Has been cancelled
Test Install Script / Test on almalinux-8 (root) (push) Has been cancelled
Test Install Script / Test on almalinux-9 (default) (push) Has been cancelled
Test Install Script / Test on almalinux-9 (root) (push) Has been cancelled
Test Install Script / Test on amazonlinux-2 (default) (push) Has been cancelled
Test Install Script / Test on amazonlinux-2 (root) (push) Has been cancelled
Test Install Script / Test on debian-11 (default) (push) Has been cancelled
Test Install Script / Test on debian-11 (root) (push) Has been cancelled
Test Install Script / Test on debian-12 (default) (push) Has been cancelled
Test Install Script / Test on debian-12 (root) (push) Has been cancelled
Test Install Script / Test on debian-13 (default) (push) Has been cancelled
Test Install Script / Test on debian-13 (root) (push) Has been cancelled
Test Install Script / Test on fedora-latest (default) (push) Has been cancelled
Test Install Script / Test on fedora-latest (root) (push) Has been cancelled
Test Install Script / Test on rocky-10 (default) (push) Has been cancelled
Test Install Script / Test on rocky-10 (root) (push) Has been cancelled
Test Install Script / Test on rocky-8 (default) (push) Has been cancelled
Test Install Script / Test on rocky-8 (root) (push) Has been cancelled
Test Install Script / Test on rocky-9 (default) (push) Has been cancelled
Test Install Script / Test on rocky-9 (root) (push) Has been cancelled
Test Install Script / Test on ubuntu-22.04 (default) (push) Has been cancelled
Test Install Script / Test on ubuntu-22.04 (root) (push) Has been cancelled
Test Install Script / Test on ubuntu-24.04 (default) (push) Has been cancelled
Test Install Script / Test on ubuntu-24.04 (root) (push) Has been cancelled

This commit is contained in:
2026-05-30 12:07:11 +00:00
commit 616c6b1c62
381 changed files with 55145 additions and 0 deletions
+118
View File
@@ -0,0 +1,118 @@
package tgbot
import (
"encoding/json"
"os"
"path/filepath"
"strconv"
"strings"
"sync"
"time"
tele "gopkg.in/telebot.v4"
"server/settings"
)
const (
LangRU = "ru"
LangEN = "en"
saveUserLangsWait = 2 * time.Second
)
var (
userLang = make(map[int64]string)
userLangMu sync.RWMutex
saveUserLangsMu sync.Mutex
saveUserLangsTimer *time.Timer
)
func getUserLang(userID int64) string {
userLangMu.RLock()
defer userLangMu.RUnlock()
if lang, ok := userLang[userID]; ok {
return lang
}
return LangRU
}
func setUserLang(userID int64, lang string) {
if lang != LangRU && lang != LangEN {
return
}
userLangMu.Lock()
userLang[userID] = lang
userLangMu.Unlock()
scheduleSaveUserLangs()
}
func scheduleSaveUserLangs() {
saveUserLangsMu.Lock()
defer saveUserLangsMu.Unlock()
if saveUserLangsTimer != nil {
saveUserLangsTimer.Stop()
}
saveUserLangsTimer = time.AfterFunc(saveUserLangsWait, func() {
saveUserLangsMu.Lock()
saveUserLangsTimer = nil
saveUserLangsMu.Unlock()
saveUserLangs()
})
}
func loadUserLangs() {
fn := filepath.Join(settings.Path, "tg_langs.json")
buf, err := os.ReadFile(fn)
if err != nil {
return
}
var m map[string]string
if err := json.Unmarshal(buf, &m); err != nil {
return
}
userLangMu.Lock()
for k, v := range m {
if v == LangRU || v == LangEN {
if id, parseErr := strconv.ParseInt(k, 10, 64); parseErr == nil {
userLang[id] = v
}
}
}
userLangMu.Unlock()
}
func saveUserLangs() {
userLangMu.RLock()
m := make(map[string]string)
for k, v := range userLang {
m[strconv.FormatInt(k, 10)] = v
}
userLangMu.RUnlock()
buf, err := json.Marshal(m)
if err != nil {
return
}
fn := filepath.Join(settings.Path, "tg_langs.json")
_ = os.WriteFile(fn, buf, 0o600)
}
func cmdLang(c tele.Context) error {
uid := c.Sender().ID
args := c.Args()
if len(args) == 0 {
lang := getUserLang(uid)
if lang == LangEN {
return c.Send(tr(uid, "lang_current_en") + "\n/lang RU — " + tr(uid, "lang_switch_ru"))
}
return c.Send(tr(uid, "lang_current_ru") + "\n/lang EN — " + tr(uid, "lang_switch_en"))
}
lang := strings.ToUpper(strings.TrimSpace(args[0]))
if lang == "EN" {
setUserLang(uid, LangEN)
return c.Send(tr(uid, "lang_set_en"))
}
if lang == "RU" || lang == "РУ" {
setUserLang(uid, LangRU)
return c.Send(tr(uid, "lang_set"))
}
return c.Send(tr(uid, "lang_usage"))
}