chirpnest/client.go

116 lines
2.6 KiB
Go
Raw Normal View History

2019-05-30 06:12:01 +02:00
package main
import (
2019-07-09 09:12:03 +02:00
"errors"
2019-06-14 05:27:43 +02:00
"fmt"
2019-05-30 06:12:01 +02:00
"strings"
2019-06-14 05:26:05 +02:00
"time"
2019-05-30 06:12:01 +02:00
)
2019-07-31 03:24:01 +02:00
func getLockedClient(int64 id, bool createMissing) (*ChirpClient, bool) {
muxClients.Lock()
if c, ok := clients[id]; ok {
c.Mux.Lock()
return c, true
} else if createMissing {
c := new(ChirpClient)
clients[id] = c
c.TGUserID64 = id
c.Lock()
return c, true
} else {
return 0, false
2019-06-14 05:24:43 +02:00
}
2019-07-31 03:24:01 +02:00
defer muxClients.Unlock()
2019-06-14 05:24:43 +02:00
}
2019-05-30 06:12:01 +02:00
func clientSendCWMsg(userID64 int64, s string) {
c := TGCommand{
Type: commandSendMsg,
Text: s,
FromUserID64: userID64,
ToChatID64: userID64ChtWrsBot,
}
MQTGCmdQueue <- c
}
2019-06-11 05:37:06 +02:00
func clientRefreshCWMsg(userID64 int64, chatID64 int64, msgID64 int64) {
2019-06-11 04:19:27 +02:00
c := TGCommand{
Type: commandRefreshMsg,
2019-06-11 05:37:06 +02:00
FromUserID64: userID64,
2019-06-11 04:19:27 +02:00
FromChatID64: chatID64,
FromMsgID64: msgID64,
}
MQTGCmdQueue <- c
}
2019-05-30 07:55:53 +02:00
func clientMsgMeAck(m *ChatWarsMessageMeAck) {
2019-05-30 08:08:39 +02:00
if _, ok := clientsQueue[m.Msg.UserID64]; ok {
2019-06-03 10:45:39 +02:00
if v, ok := clientsCW.Load(m.Msg.UserID64); ok {
2019-06-03 10:43:22 +02:00
c := v.(*ChatWarsClient)
2019-05-30 12:57:41 +02:00
if c.LastUpdate.Before(m.Msg.Date) {
2019-05-30 07:49:11 +02:00
c.GuildID64 = m.GuildID64
c.State = m.State
2019-05-30 08:08:39 +02:00
c.LastUpdate = m.Msg.Date
2019-05-31 05:15:19 +02:00
if getObjGuildID(``) != m.GuildID64 && strings.Compare(c.Role, ``) == 0 {
2019-05-30 08:08:39 +02:00
clientSendCWMsg(m.Msg.UserID64, "/g_roles")
2019-05-30 06:12:01 +02:00
}
}
} else {
c := ChatWarsClient{
2019-05-30 12:57:00 +02:00
UserID64: m.UserID64,
TelegramID64: m.Msg.UserID64,
GuildID64: m.GuildID64,
State: m.State,
LastUpdate: m.Msg.Date,
2019-05-30 06:12:01 +02:00
}
2019-06-03 10:46:27 +02:00
clientsCW.Store(m.Msg.UserID64, &c)
2019-05-31 05:15:19 +02:00
if getObjGuildID(``) != m.GuildID64 {
2019-05-30 08:08:39 +02:00
clientSendCWMsg(m.Msg.UserID64, "/g_roles")
2019-05-30 06:12:01 +02:00
}
}
}
}
2019-05-30 12:57:00 +02:00
2019-07-09 06:56:41 +02:00
func clientMsgGoQuestAck(m *ChatWarsMessageGoQuestAck) {
if _, ok := clientsQueue[m.Msg.UserID64]; ok {
if v, ok := clientsCW.Load(m.Msg.UserID64); ok {
c := v.(*ChatWarsClient)
if c.LastUpdate.Before(m.Msg.Date) {
c.LastUpdate = m.Msg.Date
c.BusyUntil = m.Msg.Date.Add(m.Duration)
}
}
}
}
2019-05-30 12:57:00 +02:00
func clientMsgGRolesAck(m *ChatWarsMessageGRolesAck) {
if _, ok := clientsQueue[m.Msg.UserID64]; ok {
2019-06-03 10:43:22 +02:00
if v, ok := clientsCW.Load(m.Msg.UserID64); ok {
c := v.(*ChatWarsClient)
2019-05-30 12:57:00 +02:00
if c.LastUpdate.Before(m.Msg.Date) {
if m.CommanderID64 == c.UserID64 {
c.Role = `commander`
} else if m.BartenderID64 == c.UserID64 {
c.Role = `bartender`
} else if m.SquireID64 == c.UserID64 {
c.Role = `squire`
} else if m.TreasurerID64 == c.UserID64 {
c.Role = `treasurer`
} else {
2019-05-30 12:58:01 +02:00
c.Role = `none`
2019-05-30 12:57:00 +02:00
}
c.LastUpdate = m.Msg.Date
}
}
}
}
2019-07-09 09:12:03 +02:00
func clientGetUserID64(tgUserID64 int64) (int64, error) {
2019-07-09 09:48:21 +02:00
if v, ok := clientsCW.Load(tgUserID64); ok {
c := v.(*ChatWarsClient)
return c.UserID64, nil
2019-07-09 09:12:03 +02:00
}
return 0, errors.New("Unknown user_id.")
}