Compare commits
3 Commits
0a73bca056
...
27ce4d3c78
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
27ce4d3c78 | ||
|
|
693996a262 | ||
|
|
7da7f38e13 |
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/tg-holy-bot
|
||||
/data/config.json
|
||||
@@ -61,7 +61,7 @@ func main() {
|
||||
|
||||
log.Infof("Stop cron")
|
||||
|
||||
// Jobs usually runs in a fraction of second, don't bother waiting for their completion.
|
||||
// Кроновые задачки выполняются за доли сеекунды, не будем заморачиваться ожиданием их завершения.
|
||||
_ = c.Stop()
|
||||
|
||||
log.Infof("Shutdown bot")
|
||||
|
||||
@@ -70,6 +70,8 @@ func parser(data string) ([]string, error) {
|
||||
// А теперь пробежимся по полученной структуре и вытянем из неё все строки с праздниками.
|
||||
for _, ass := range s {
|
||||
for _, entity := range ass.MainEntity {
|
||||
holidays = append(holidays, entity.AcceptedAnswer.Text)
|
||||
|
||||
for _, sugestedAnswer := range entity.SuggestedAnswer {
|
||||
holidays = append(holidays, sugestedAnswer.Text)
|
||||
}
|
||||
|
||||
@@ -2,18 +2,54 @@ package holy
|
||||
|
||||
import (
|
||||
"tg-holy-bot/internal/log"
|
||||
"time"
|
||||
)
|
||||
|
||||
// CronTask sends generated hiliday list to the channel.
|
||||
// CronTask sends generated holiday list to the channel.
|
||||
func CronTask() {
|
||||
var (
|
||||
err error
|
||||
errcnt int
|
||||
phrase string
|
||||
timeout time.Duration
|
||||
)
|
||||
|
||||
log.Info("Cron Task triggered")
|
||||
|
||||
phrase, err := APIClient()
|
||||
for {
|
||||
phrase, err = APIClient()
|
||||
|
||||
if err != nil {
|
||||
log.Errorf("Unable to get holidays: %s", err)
|
||||
if err != nil {
|
||||
errcnt++
|
||||
|
||||
return
|
||||
log.Errorf("Unable to get holidays (try %d/15): %s", errcnt, err)
|
||||
|
||||
switch errcnt {
|
||||
case 0, 1, 2:
|
||||
timeout = 1 * time.Second
|
||||
|
||||
case 3, 4, 5:
|
||||
timeout = 5 * time.Second
|
||||
|
||||
case 6, 7, 8:
|
||||
timeout = 1 * time.Minute
|
||||
|
||||
case 9, 10, 11:
|
||||
timeout = 5 * time.Minute
|
||||
|
||||
case 12, 13, 14:
|
||||
timeout = 1 * time.Hour
|
||||
|
||||
default:
|
||||
log.Error("Giveup trying to get holidays")
|
||||
|
||||
return
|
||||
}
|
||||
} else {
|
||||
break
|
||||
}
|
||||
|
||||
time.Sleep(timeout)
|
||||
}
|
||||
|
||||
if _, err = Bot.SendMessage(phrase, Config.ChannelID, nil); err != nil {
|
||||
|
||||
@@ -45,7 +45,7 @@ func ReadConfig() error {
|
||||
|
||||
// Исходя из документации, hjson какбы умеет парсить "кривой" json, но парсит его в map-ку.
|
||||
// Интереснее на выходе получить структурку: то есть мы вначале конфиг преобразуем в map-ку, затем эту map-ку
|
||||
// сериализуем в json, а потом json преврщааем в стркутурку. Не очень эффективно, но он и не часто требуется.
|
||||
// сериализуем в json, а потом json преврщааем в стркутурку. Не очень эффективно, но оно и не часто требуется.
|
||||
var (
|
||||
sampleConfig *MyConfig
|
||||
tmp map[string]any
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package holy
|
||||
|
||||
type (
|
||||
// Holy структура, описывающая искомый json-чик.
|
||||
// Holy структура, описывающая искомый json-чик с праздниками.
|
||||
Holy struct {
|
||||
AtContext string `json:"@context"`
|
||||
AtType string `json:"@type"`
|
||||
|
||||
Reference in New Issue
Block a user