security with spamming

This commit is contained in:
shoopea 2020-02-29 11:16:40 +08:00
parent 8398560f9c
commit a020a111a8
2 changed files with 65 additions and 1 deletions

45
bot.go
View File

@ -711,6 +711,17 @@ func botListParsingRule(m *tb.Message) {
}
func botGStock(m *ChatWarsMessage) {
if hasUnfinishedJob(cacheObjSubType[`job_gstock`]) {
c := TGCommand{
Type: commandReplyMsg,
Text: "GStock is already running",
FromMsgID64: m.ID64,
FromChatID64: m.ChatID64,
}
TGCmdQueue <- c
return
}
clt, err := getLockedIdleClient()
if err != nil {
c := TGCommand{
@ -756,8 +767,18 @@ func botGStock(m *ChatWarsMessage) {
}
func botShops(m *ChatWarsMessage) {
// fan out to all active and non idle clients
if hasUnfinishedJob(cacheObjSubType[`job_shops`]) {
c := TGCommand{
Type: commandReplyMsg,
Text: "Shops is already running",
FromMsgID64: m.ID64,
FromChatID64: m.ChatID64,
}
TGCmdQueue <- c
return
}
// fan out to all active and non idle clients
clts, err := getAllIdleClientID64()
if err != nil || len(clts) == 0 {
c := TGCommand{
@ -809,6 +830,17 @@ func botShops(m *ChatWarsMessage) {
}
func botCraftItem(m *ChatWarsMessage, r *regexp.Regexp) {
if hasUnfinishedJob(cacheObjSubType[`job_craft_item`]) {
c := TGCommand{
Type: commandReplyMsg,
Text: "Craft Item is already running",
FromMsgID64: m.ID64,
FromChatID64: m.ChatID64,
}
TGCmdQueue <- c
return
}
clt, err := getLockedIdleClient()
if err != nil {
c := TGCommand{
@ -903,6 +935,17 @@ func botUserConfig(m *ChatWarsMessage) {
}
func botCraftAll(m *ChatWarsMessage, r *regexp.Regexp) {
if hasUnfinishedJob(cacheObjSubType[`job_craft_all`]) {
c := TGCommand{
Type: commandReplyMsg,
Text: "Craft All is already running",
FromMsgID64: m.ID64,
FromChatID64: m.ChatID64,
}
TGCmdQueue <- c
return
}
clt, err := getLockedIdleClient()
if err != nil {
c := TGCommand{

21
job.go
View File

@ -282,6 +282,27 @@ func rescheduleJob(jobID64 int64, trigger int64, schedule time.Time) error {
return nil
}
func hasUnfinishedJob(jobTypeID64 int64) bool {
var count int64
stmt, err := db.Prepare(`SELECT count(*) FROM obj o, obj_job j WHERE o.id = j.obj_id AND o.obj_sub_type_id = ? AND j.is_done = 0;`)
logOnError(err, "hasUnfinishedJob : prepare select obj")
if err != nil {
return false
}
defer stmt.Close()
err = stmt.QueryRow(jobTypeID64).Scan(&count)
logOnError(err, "hasUnfinishedJob : exec select obj")
if err != nil {
return false
}
if count > 0 {
return true
}
return false
}
func loadCurrentJobs() ([]Job, error) {
var (
objId int64