parent
a32ed89be8
commit
b038d5b10d
8
Gopkg.lock
generated
8
Gopkg.lock
generated
@ -25,6 +25,12 @@
|
|||||||
revision = "056a4d47dcc4d67fa3947a4f13945a5c690e568b"
|
revision = "056a4d47dcc4d67fa3947a4f13945a5c690e568b"
|
||||||
version = "v2.1.0"
|
version = "v2.1.0"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "github.com/robfig/cron"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "b024fc5ea0e34bc3f83d9941c8d60b0622bfaca4"
|
||||||
|
version = "v1"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
name = "github.com/sirupsen/logrus"
|
name = "github.com/sirupsen/logrus"
|
||||||
packages = ["."]
|
packages = ["."]
|
||||||
@ -70,6 +76,6 @@
|
|||||||
[solve-meta]
|
[solve-meta]
|
||||||
analyzer-name = "dep"
|
analyzer-name = "dep"
|
||||||
analyzer-version = 1
|
analyzer-version = 1
|
||||||
inputs-digest = "72b8805a04554297ce6fcb28ecaad016e3398624e90621de1b067cfe2f662e40"
|
inputs-digest = "e26a19cb9a3e96a96b1d51599ead99341edc2278667ddf8a7dac4cd197fbe09d"
|
||||||
solver-name = "gps-cdcl"
|
solver-name = "gps-cdcl"
|
||||||
solver-version = 1
|
solver-version = 1
|
||||||
|
@ -47,6 +47,9 @@ func main() {
|
|||||||
c.Log.Info("= i2_bot initialized. =")
|
c.Log.Info("= i2_bot initialized. =")
|
||||||
c.Log.Info("=======================")
|
c.Log.Info("=======================")
|
||||||
|
|
||||||
|
c.Cron.Start()
|
||||||
|
c.Log.Info("> Cron started.")
|
||||||
|
|
||||||
u := tgbotapi.NewUpdate(0)
|
u := tgbotapi.NewUpdate(0)
|
||||||
u.Timeout = 60
|
u.Timeout = 60
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@ package appcontext
|
|||||||
import (
|
import (
|
||||||
"github.com/go-telegram-bot-api/telegram-bot-api"
|
"github.com/go-telegram-bot-api/telegram-bot-api"
|
||||||
"github.com/jmoiron/sqlx"
|
"github.com/jmoiron/sqlx"
|
||||||
|
"github.com/robfig/cron"
|
||||||
"lab.pztrn.name/fat0troll/i2_bot/lib/broadcaster/broadcasterinterface"
|
"lab.pztrn.name/fat0troll/i2_bot/lib/broadcaster/broadcasterinterface"
|
||||||
"lab.pztrn.name/fat0troll/i2_bot/lib/chatter/chatterinterface"
|
"lab.pztrn.name/fat0troll/i2_bot/lib/chatter/chatterinterface"
|
||||||
"lab.pztrn.name/fat0troll/i2_bot/lib/config"
|
"lab.pztrn.name/fat0troll/i2_bot/lib/config"
|
||||||
@ -29,6 +30,7 @@ import (
|
|||||||
type Context struct {
|
type Context struct {
|
||||||
StartupFlags *flagger.Flagger
|
StartupFlags *flagger.Flagger
|
||||||
Cfg *config.Config
|
Cfg *config.Config
|
||||||
|
Cron *cron.Cron
|
||||||
Log *mogrus.LoggerHandler
|
Log *mogrus.LoggerHandler
|
||||||
Bot *tgbotapi.BotAPI
|
Bot *tgbotapi.BotAPI
|
||||||
Forwarder forwarderinterface.ForwarderInterface
|
Forwarder forwarderinterface.ForwarderInterface
|
||||||
@ -87,11 +89,9 @@ func (c *Context) Init() {
|
|||||||
|
|
||||||
c.Bot = connections.BotInit(c.Cfg, c.Log)
|
c.Bot = connections.BotInit(c.Cfg, c.Log)
|
||||||
c.Db = connections.DBInit(c.Cfg, c.Log)
|
c.Db = connections.DBInit(c.Cfg, c.Log)
|
||||||
}
|
|
||||||
|
|
||||||
// InitializeStartupFlags gives information about available startup flags
|
|
||||||
func (c *Context) InitializeStartupFlags() {
|
|
||||||
|
|
||||||
|
crontab := cron.New()
|
||||||
|
c.Cron = crontab
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegisterRouterInterface registering router interface in application
|
// RegisterRouterInterface registering router interface in application
|
||||||
|
@ -25,4 +25,6 @@ func New(ac *appcontext.Context) {
|
|||||||
// Init is an initialization function for pinner
|
// Init is an initialization function for pinner
|
||||||
func (p *Pinner) Init() {
|
func (p *Pinner) Init() {
|
||||||
c.Log.Info("Initializing Pinner...")
|
c.Log.Info("Initializing Pinner...")
|
||||||
|
|
||||||
|
c.Cron.AddFunc("0 55 */2 * * *", p.PinBattleAlert)
|
||||||
}
|
}
|
||||||
|
@ -69,3 +69,35 @@ func (p *Pinner) PinMessageToAllChats(update *tgbotapi.Update) string {
|
|||||||
|
|
||||||
return "ok"
|
return "ok"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PinBattleAlert pins to all squads 'battle alert' at :55 of every even hour
|
||||||
|
// Even hours are in Moscow timezone
|
||||||
|
func (p *Pinner) PinBattleAlert() {
|
||||||
|
c.Log.Debug("> Cron invoked PinBattleAlert()")
|
||||||
|
|
||||||
|
message := "*Турнир Лиги покемемов состоится через 5 минут!*\nБоевая готовность, отряд!"
|
||||||
|
groupChats, _ := c.Squader.GetAllSquadChats()
|
||||||
|
|
||||||
|
for i := range groupChats {
|
||||||
|
if groupChats[i].ChatType == "supergroup" {
|
||||||
|
msg := tgbotapi.NewMessage(groupChats[i].TelegramID, message)
|
||||||
|
msg.ParseMode = "Markdown"
|
||||||
|
|
||||||
|
pinnableMessage, err := c.Bot.Send(msg)
|
||||||
|
if err != nil {
|
||||||
|
c.Log.Error(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
pinChatMessageConfig := tgbotapi.PinChatMessageConfig{
|
||||||
|
ChatID: pinnableMessage.Chat.ID,
|
||||||
|
MessageID: pinnableMessage.MessageID,
|
||||||
|
DisableNotification: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = c.Bot.PinChatMessage(pinChatMessageConfig)
|
||||||
|
if err != nil {
|
||||||
|
c.Log.Error(err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -10,5 +10,7 @@ import (
|
|||||||
// PinnerInterface implements Pinner for importing via appcontex
|
// PinnerInterface implements Pinner for importing via appcontex
|
||||||
type PinnerInterface interface {
|
type PinnerInterface interface {
|
||||||
Init()
|
Init()
|
||||||
|
|
||||||
|
PinBattleAlert()
|
||||||
PinMessageToAllChats(update *tgbotapi.Update) string
|
PinMessageToAllChats(update *tgbotapi.Update) string
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,19 @@ func (s *Squader) GetSquadByID(squadID int) (dbmapping.SquadChat, bool) {
|
|||||||
return squadFull, true
|
return squadFull, true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetAllSquadChats returns all main squad chats
|
||||||
|
func (s *Squader) GetAllSquadChats() ([]dbmapping.Chat, bool) {
|
||||||
|
groupChats := []dbmapping.Chat{}
|
||||||
|
|
||||||
|
err := c.Db.Select(&groupChats, "SELECT ch.* FROM chats ch, squads s WHERE s.chat_id=ch.id")
|
||||||
|
if err != nil {
|
||||||
|
c.Log.Error(err)
|
||||||
|
return groupChats, false
|
||||||
|
}
|
||||||
|
|
||||||
|
return groupChats, true
|
||||||
|
}
|
||||||
|
|
||||||
// GetUserRolesInSquads lists all user roles
|
// GetUserRolesInSquads lists all user roles
|
||||||
func (s *Squader) GetUserRolesInSquads(playerRaw *dbmapping.Player) ([]dbmapping.SquadPlayerFull, bool) {
|
func (s *Squader) GetUserRolesInSquads(playerRaw *dbmapping.Player) ([]dbmapping.SquadPlayerFull, bool) {
|
||||||
userRoles := []dbmapping.SquadPlayerFull{}
|
userRoles := []dbmapping.SquadPlayerFull{}
|
||||||
|
@ -12,6 +12,7 @@ import (
|
|||||||
type SquaderInterface interface {
|
type SquaderInterface interface {
|
||||||
Init()
|
Init()
|
||||||
|
|
||||||
|
GetAllSquadChats() ([]dbmapping.Chat, bool)
|
||||||
GetSquadByID(squadID int) (dbmapping.SquadChat, bool)
|
GetSquadByID(squadID int) (dbmapping.SquadChat, bool)
|
||||||
GetUserRolesInSquads(playerRaw *dbmapping.Player) ([]dbmapping.SquadPlayerFull, bool)
|
GetUserRolesInSquads(playerRaw *dbmapping.Player) ([]dbmapping.SquadPlayerFull, bool)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user