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
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:
@@ -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"))
|
||||
}
|
||||
Reference in New Issue
Block a user