penguin/golifehk

@golifehk bot in Telegram

utils/system.go

raw ยท 1739 bytes

package utils

import (
	"bytes"
	"encoding/json"
	"fmt"
	tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
	"io"
	"log"
	"path/filepath"
	"strings"
	"time"
)

var JSON_SETTINGS string = filepath.Join(WORKDIR, "settings.json")

var settingsTime = time.Unix(0, 0)

type SysSettings struct {
	IgnoredChats map[int64]bool `json:"IgnoredChats"`
}

var Settings = SysSettings{IgnoredChats: map[int64]bool{}}

func rwSettings() {

	buff, err := ChangedStream(JSON_SETTINGS, writeSettings, settingsTime)
	if err != nil {
		log.Panic(err)
		return
	}

	conf := SysSettings{}
	err = json.Unmarshal(buff.Bytes(), &conf)
	if err != nil {
		log.Panic(err)
		return
	}

	Settings = conf
}

func writeSettings() (io.Reader, error) {
	b, err := json.Marshal(Settings)
	if err != nil {
		return nil, err
	}
	return bytes.NewBuffer(b), nil
}

func SystemControl(tgMesg *tgbotapi.Message) (string, bool) {

	rwSettings()

	processed := false
	mesg := ""

	if tgMesg.Text == "" {
		return "", false
	}

	if tgMesg.Text[0] == '/' {
		processed = true
	}

	chatId := tgMesg.Chat.ID

	if Settings.IgnoredChats == nil {
		Settings.IgnoredChats = map[int64]bool{}
	}

	if strings.Contains(tgMesg.Text, "/golifehk disable") {
		mesg = fmt.Sprintf("OK")
		Settings.IgnoredChats[chatId] = true
		processed = true
	}

	if strings.Contains(tgMesg.Text, "/golifehk enable") {
		mesg = fmt.Sprintf("OK")
		Settings.IgnoredChats[chatId] = false
		processed = true
	}

	if processed {
		settingsTime = time.Now()
		rwSettings()
	}

	//// Begin processing settings

	// ignore chats if enabled
	if ignore, ok := Settings.IgnoredChats[chatId]; ok {
		processed = processed || ignore
	} else {
		// default ignore
		processed = true
	}

	return mesg, processed
}