implement start/reset
This commit is contained in:
parent
00d4b8667f
commit
84579af511
181
bot.go
181
bot.go
@ -140,7 +140,6 @@ func botUnpause(m *tb.Message) {
|
||||
}
|
||||
|
||||
func botDelete(m *tb.Message) {
|
||||
logInfoDebug("[%d] %s(%d) | %s(%d) : delete : %s\n", m.ID, m.Chat.Title, m.Chat.ID, m.Sender.Username, m.Sender.ID, m.Text)
|
||||
r := regexp.MustCompile("\\/delete (?P<CompanyID>[0-9]+)")
|
||||
id := uint8(255)
|
||||
if r.MatchString(m.Text) {
|
||||
@ -190,6 +189,33 @@ func botDelete(m *tb.Message) {
|
||||
return
|
||||
}
|
||||
|
||||
func botActuallyDelete(m *tb.Message) {
|
||||
r := regexp.MustCompile("^\\/delete_(?P<Ref>[a-f0-9]{16})$")
|
||||
ref := r.ReplaceAllString(m.Text, "${Ref}")
|
||||
a, ok := botActionMap[ref]
|
||||
if !ok {
|
||||
bot.SendChat(m.Chat.ID, "No corresponding request.")
|
||||
return
|
||||
}
|
||||
if a.Action != "DeleteCompany" {
|
||||
bot.SendChat(m.Chat.ID, "Not a delete request.")
|
||||
return
|
||||
}
|
||||
if a.UserID != m.Sender.ID {
|
||||
bot.SendChat(m.Chat.ID, "Requesting user has to confirm himself.")
|
||||
return
|
||||
}
|
||||
if time.Now().Sub(a.Time) > time.Minute {
|
||||
bot.SendChat(m.Chat.ID, "Request expired.")
|
||||
} else {
|
||||
srv.DeleteCompany(a.CompanyID)
|
||||
bot.SendChat(m.Chat.ID, "Company deleted.")
|
||||
}
|
||||
delete(botActionMap, ref)
|
||||
return
|
||||
|
||||
}
|
||||
|
||||
func botCompanies(m *tb.Message) {
|
||||
str := "Companies :"
|
||||
for k, v := range srv.Status.Companies {
|
||||
@ -212,6 +238,11 @@ func botReset(m *tb.Message) {
|
||||
return
|
||||
}
|
||||
|
||||
if !cfg.Game.Started {
|
||||
bot.SendChat(m.Chat.ID, "Game is not started.")
|
||||
return
|
||||
}
|
||||
|
||||
b := make([]byte, 8)
|
||||
_, err := rand.Read(b)
|
||||
logErrorDebug(err, "botReset : rand.Read")
|
||||
@ -232,11 +263,48 @@ func botReset(m *tb.Message) {
|
||||
return
|
||||
}
|
||||
|
||||
func botStart(m *tb.Message) {
|
||||
if m.Sender.ID != int(cfg.Telegram.AdminID) {
|
||||
bot.SendChat(m.Chat.ID, "Only the admin can use this command.")
|
||||
func botActuallyReset(m *tb.Message) {
|
||||
r := regexp.MustCompile("^\\/reset_(?P<Ref>[a-f0-9]{16})$")
|
||||
|
||||
ref := r.ReplaceAllString(m.Text, "${Ref}")
|
||||
a, ok := botActionMap[ref]
|
||||
if !ok {
|
||||
bot.SendChat(m.Chat.ID, "No corresponding request.")
|
||||
return
|
||||
}
|
||||
if a.Action != "ResetGame" {
|
||||
bot.SendChat(m.Chat.ID, "Not a reset request.")
|
||||
return
|
||||
}
|
||||
if a.UserID != m.Sender.ID {
|
||||
bot.SendChat(m.Chat.ID, "Requesting user has to confirm himself.")
|
||||
return
|
||||
}
|
||||
if time.Now().Sub(a.Time) > time.Minute {
|
||||
bot.SendChat(m.Chat.ID, "Request expired.")
|
||||
} else {
|
||||
cfg.Game.Started = false
|
||||
bot.SendChat(m.Chat.ID, "Game resetted.")
|
||||
}
|
||||
delete(botActionMap, ref)
|
||||
return
|
||||
}
|
||||
|
||||
func botStart(m *tb.Message) {
|
||||
if cfg.Game.Started {
|
||||
bot.SendChat(m.Chat.ID, "Game already started.")
|
||||
return
|
||||
}
|
||||
|
||||
actuallyReady := true
|
||||
for _, cc := range cfg.Clients {
|
||||
if !cc.Ready {
|
||||
actuallyReady = false
|
||||
}
|
||||
}
|
||||
if m.Sender.ID != int(cfg.Telegram.AdminID) && !actuallyReady {
|
||||
bot.SendChat(m.Chat.ID, "Not all players are ready. Only the admin can force the start.")
|
||||
}
|
||||
|
||||
b := make([]byte, 8)
|
||||
_, err := rand.Read(b)
|
||||
@ -258,7 +326,44 @@ func botStart(m *tb.Message) {
|
||||
return
|
||||
}
|
||||
|
||||
func botActuallyStart(m *tb.Message) {
|
||||
r := regexp.MustCompile("^\\/start_(?P<Ref>[a-f0-9]{16})$")
|
||||
|
||||
ref := r.ReplaceAllString(m.Text, "${Ref}")
|
||||
a, ok := botActionMap[ref]
|
||||
if !ok {
|
||||
bot.SendChat(m.Chat.ID, "No corresponding request.")
|
||||
return
|
||||
}
|
||||
if a.Action != "StartGame" {
|
||||
bot.SendChat(m.Chat.ID, "Not a game start request.")
|
||||
return
|
||||
}
|
||||
if a.UserID != m.Sender.ID {
|
||||
bot.SendChat(m.Chat.ID, "Requesting user has to confirm himself.")
|
||||
return
|
||||
}
|
||||
if time.Now().Sub(a.Time) > time.Minute {
|
||||
bot.SendChat(m.Chat.ID, "Request expired.")
|
||||
} else {
|
||||
cfg.Game.Started = true
|
||||
cfg.Game.StartDate = time.Now()
|
||||
for _, cc := range cfg.Clients {
|
||||
cc.Ready = true
|
||||
}
|
||||
bot.SendChat(m.Chat.ID, "Game started !")
|
||||
}
|
||||
delete(botActionMap, ref)
|
||||
return
|
||||
|
||||
}
|
||||
|
||||
func botReady(m *tb.Message) {
|
||||
if cfg.Game.Started {
|
||||
bot.SendChat(m.Chat.ID, "Game is already started.")
|
||||
return
|
||||
}
|
||||
|
||||
cc, ok := cfg.Clients[m.Sender.ID]
|
||||
if !ok {
|
||||
bot.SendChat(m.Chat.ID, "Player not registered")
|
||||
@ -277,9 +382,13 @@ func botReady(m *tb.Message) {
|
||||
|
||||
if cc.Ready {
|
||||
cc.Ready = false
|
||||
ready--
|
||||
waiting++
|
||||
bot.SendChat(m.Chat.ID, fmt.Sprintf("Player not ready anymore. Only %d players ready now.", ready))
|
||||
} else {
|
||||
cc.Ready = true
|
||||
ready++
|
||||
waiting--
|
||||
bot.SendChat(m.Chat.ID, fmt.Sprintf("Player is now ready. Still waiting for %d players.", waiting))
|
||||
}
|
||||
|
||||
@ -743,77 +852,19 @@ func botText(m *tb.Message) {
|
||||
|
||||
r := regexp.MustCompile("^\\/delete_(?P<Ref>[a-f0-9]{16})$")
|
||||
if r.MatchString(m.Text) {
|
||||
ref := r.ReplaceAllString(m.Text, "${Ref}")
|
||||
a, ok := botActionMap[ref]
|
||||
if !ok {
|
||||
bot.SendChat(m.Chat.ID, "No corresponding request.")
|
||||
return
|
||||
}
|
||||
if a.Action != "DeleteCompany" {
|
||||
bot.SendChat(m.Chat.ID, "Not a delete request.")
|
||||
return
|
||||
}
|
||||
if a.UserID != m.Sender.ID {
|
||||
bot.SendChat(m.Chat.ID, "Requesting user has to confirm himself.")
|
||||
return
|
||||
}
|
||||
if time.Now().Sub(a.Time) > time.Minute {
|
||||
bot.SendChat(m.Chat.ID, "Request expired.")
|
||||
} else {
|
||||
srv.DeleteCompany(a.CompanyID)
|
||||
bot.SendChat(m.Chat.ID, "Company deleted.")
|
||||
}
|
||||
delete(botActionMap, ref)
|
||||
botActuallyDelete(m)
|
||||
return
|
||||
}
|
||||
|
||||
r = regexp.MustCompile("^\\/reset_(?P<Ref>[a-f0-9]{16})$")
|
||||
if r.MatchString(m.Text) {
|
||||
ref := r.ReplaceAllString(m.Text, "${Ref}")
|
||||
a, ok := botActionMap[ref]
|
||||
if !ok {
|
||||
bot.SendChat(m.Chat.ID, "No corresponding request.")
|
||||
return
|
||||
}
|
||||
if a.Action != "ResetGame" {
|
||||
bot.SendChat(m.Chat.ID, "Not a reset request.")
|
||||
return
|
||||
}
|
||||
if a.UserID != m.Sender.ID {
|
||||
bot.SendChat(m.Chat.ID, "Requesting user has to confirm himself.")
|
||||
return
|
||||
}
|
||||
if time.Now().Sub(a.Time) > time.Minute {
|
||||
bot.SendChat(m.Chat.ID, "Request expired.")
|
||||
} else {
|
||||
bot.SendChat(m.Chat.ID, "Game resetted (to be implemented).")
|
||||
}
|
||||
delete(botActionMap, ref)
|
||||
botActuallyReset(m)
|
||||
return
|
||||
}
|
||||
|
||||
r = regexp.MustCompile("^\\/start_(?P<Ref>[a-f0-9]{16})$")
|
||||
if r.MatchString(m.Text) {
|
||||
ref := r.ReplaceAllString(m.Text, "${Ref}")
|
||||
a, ok := botActionMap[ref]
|
||||
if !ok {
|
||||
bot.SendChat(m.Chat.ID, "No corresponding request.")
|
||||
return
|
||||
}
|
||||
if a.Action != "StartGame" {
|
||||
bot.SendChat(m.Chat.ID, "Not a game start request.")
|
||||
return
|
||||
}
|
||||
if a.UserID != m.Sender.ID {
|
||||
bot.SendChat(m.Chat.ID, "Requesting user has to confirm himself.")
|
||||
return
|
||||
}
|
||||
if time.Now().Sub(a.Time) > time.Minute {
|
||||
bot.SendChat(m.Chat.ID, "Request expired.")
|
||||
} else {
|
||||
bot.SendChat(m.Chat.ID, "Game started (to be implemented).")
|
||||
}
|
||||
delete(botActionMap, ref)
|
||||
botActuallyStart(m)
|
||||
return
|
||||
}
|
||||
|
||||
|
4
main.go
4
main.go
@ -45,7 +45,9 @@ func main() {
|
||||
|
||||
srv = &ServerTTD{
|
||||
Config: cfg.Server,
|
||||
Data: &ServerDataTTD{},
|
||||
Data: &ServerDataTTD{
|
||||
Started: cfg.Game.Started,
|
||||
},
|
||||
Status: &ServerStatusTTD{},
|
||||
}
|
||||
go srv.Start()
|
||||
|
18
ttd.go
18
ttd.go
@ -54,6 +54,7 @@ type ServerDataTTD struct {
|
||||
LastClientCompute time.Time
|
||||
Conn net.Conn
|
||||
Stop chan struct{}
|
||||
Started bool
|
||||
}
|
||||
|
||||
var updateHeartBeat = 5 * time.Second
|
||||
@ -591,6 +592,20 @@ func (s *ServerTTD) PruneCompanies() {
|
||||
|
||||
func (s *ServerTTD) ComputeClientTime() {
|
||||
t := time.Now()
|
||||
if !cfg.Game.Started {
|
||||
s.Data.LastClientCompute = t
|
||||
s.Data.Started = false
|
||||
return
|
||||
}
|
||||
if !s.Data.Started {
|
||||
for _, cc := range cfg.Clients {
|
||||
cc.TimeLeft = cfg.Game.StartingAllotment
|
||||
}
|
||||
bot.SendChat(cfg.Telegram.ChatID, "Starting allotment credited.")
|
||||
s.Data.Started = true
|
||||
return
|
||||
}
|
||||
|
||||
daysNow := int(t.Sub(cfg.Game.StartDate).Hours() / 24)
|
||||
daysLast := int(s.Data.LastClientCompute.Sub(cfg.Game.StartDate).Hours() / 24)
|
||||
if daysLast != daysNow {
|
||||
@ -714,6 +729,9 @@ func (s *ServerTTD) NeedPause() bool {
|
||||
}
|
||||
|
||||
func (s *ServerTTD) NeedPauseReason() string {
|
||||
if !cfg.Game.Started {
|
||||
return "game not started"
|
||||
}
|
||||
if !s.Status.Initialized {
|
||||
return ""
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
// Code generated by version.sh (@generated) DO NOT EDIT.
|
||||
package main
|
||||
var githash = "044eac9"
|
||||
var buildstamp = "2021-12-04_04:49:04"
|
||||
var commits = "211"
|
||||
var version = "044eac9-b211 - 2021-12-04_04:49:04"
|
||||
var githash = "00d4b86"
|
||||
var buildstamp = "2021-12-04_05:24:10"
|
||||
var commits = "212"
|
||||
var version = "00d4b86-b212 - 2021-12-04_05:24:10"
|
||||
|
Loading…
Reference in New Issue
Block a user