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.") }