130 lines
2.9 KiB
Go
130 lines
2.9 KiB
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
func getLockedClient(id int64, createMissing bool) (*ChirpClient, bool) {
|
|
muxClients.RLock()
|
|
if c, ok := clients[id]; ok {
|
|
c.Mux.Lock()
|
|
muxClients.RUnlock()
|
|
return c, true
|
|
} else if createMissing {
|
|
c := new(ChirpClient)
|
|
c.TGUserID64 = id
|
|
c.Active = false
|
|
c.Mux.Lock()
|
|
muxClients.RUnlock()
|
|
muxClients.Lock()
|
|
clients[id] = c
|
|
muxClients.Unlock()
|
|
return c, true
|
|
} else {
|
|
muxClients.RUnlock()
|
|
//c := new(ChirpClient)
|
|
//return c, false
|
|
return nil, false
|
|
}
|
|
}
|
|
|
|
func clientFwdCWMsg(userID64 int64, fromMsgID64 int64, fromChatID64 int64, toChatID64 int64) {
|
|
c := TGCommand{
|
|
Type: commandForwardMsg,
|
|
FromUserID64: userID64,
|
|
FromMsgID64: fromMsgID64,
|
|
FromChatID64: fromChatID64,
|
|
ToChatID64: toChatID64,
|
|
}
|
|
MQTGCmdQueue <- c
|
|
|
|
}
|
|
|
|
func clientSendCWMsg(userID64 int64, s string) {
|
|
clientSendCWMsgDelay(userID64, s, 0)
|
|
}
|
|
|
|
func clientSendCWMsgDelay(userID64 int64, s string, d time.Duration) {
|
|
c := TGCommand{
|
|
Type: commandSendMsg,
|
|
Text: s,
|
|
FromUserID64: userID64,
|
|
ToChatID64: userID64ChtWrsBot,
|
|
Delay: d,
|
|
}
|
|
MQTGCmdQueue <- c
|
|
}
|
|
|
|
func clientRefreshCWMsg(userID64 int64, chatID64 int64, msgID64 int64) {
|
|
c := TGCommand{
|
|
Type: commandRefreshMsg,
|
|
FromUserID64: userID64,
|
|
FromChatID64: chatID64,
|
|
FromMsgID64: msgID64,
|
|
Delay: 0,
|
|
}
|
|
MQTGCmdQueue <- c
|
|
}
|
|
|
|
func clientMsgMeAck(m *ChatWarsMessageMeAck) {
|
|
if clt, ok := getLockedClient(m.Msg.TGUserID64, false); ok {
|
|
if clt.Active {
|
|
if clt.CWLastUpdate.Before(m.Msg.Date) {
|
|
clt.CWGuildID64 = m.CWGuildID64
|
|
clt.CWUserID64 = m.CWUserID64
|
|
clt.CWState = m.State
|
|
clt.CWLastUpdate = m.Msg.Date
|
|
if getObjGuildID(``) != m.CWGuildID64 && strings.Compare(clt.CWRole, ``) == 0 {
|
|
clientSendCWMsg(m.Msg.TGUserID64, "/g_roles")
|
|
}
|
|
}
|
|
}
|
|
clt.Mux.Unlock()
|
|
}
|
|
}
|
|
|
|
func clientMsgGoQuestAck(m *ChatWarsMessageGoQuestAck) {
|
|
if clt, ok := getLockedClient(m.Msg.TGUserID64, false); ok {
|
|
if clt.Active {
|
|
if clt.CWLastUpdate.Before(m.Msg.Date) {
|
|
clt.CWLastUpdate = m.Msg.Date
|
|
clt.CWBusyUntil = m.Msg.Date.Add(m.Duration)
|
|
}
|
|
}
|
|
clt.Mux.Unlock()
|
|
}
|
|
}
|
|
|
|
func clientMsgGRolesAck(m *ChatWarsMessageGRolesAck) {
|
|
if clt, ok := getLockedClient(m.Msg.TGUserID64, false); ok {
|
|
if clt.Active {
|
|
if clt.CWLastUpdate.Before(m.Msg.Date) {
|
|
if m.CommanderID64 == clt.CWUserID64 {
|
|
clt.CWRole = `commander`
|
|
} else if m.BartenderID64 == clt.CWUserID64 {
|
|
clt.CWRole = `bartender`
|
|
} else if m.SquireID64 == clt.CWUserID64 {
|
|
clt.CWRole = `squire`
|
|
} else if m.TreasurerID64 == clt.CWUserID64 {
|
|
clt.CWRole = `treasurer`
|
|
} else {
|
|
clt.CWRole = `none`
|
|
}
|
|
clt.CWLastUpdate = m.Msg.Date
|
|
}
|
|
}
|
|
clt.Mux.Unlock()
|
|
}
|
|
}
|
|
|
|
func clientGetCWUserID64(tgUserID64 int64) (int64, error) {
|
|
if clt, ok := getLockedClient(tgUserID64, false); ok {
|
|
i := clt.CWUserID64
|
|
clt.Mux.Unlock()
|
|
return i, nil
|
|
}
|
|
return 0, errors.New("Unknown user_id.")
|
|
}
|