8
"github.com/garyburd/redigo/redis"
9
"github.com/patrickmn/go-cache"
12
"go.avito.ru/DO/moira/database"
16
botUsername = "moira-bot-host"
20
func (connector *DbConnector) GetIDByUsername(messenger, username string) (string, error) {
21
if messenger == "telegram" && strings.HasPrefix(username, "#") {
22
result := "@" + username[1:]
25
c := connector.pool.Get()
27
result, err := redis.String(c.Do("GET", usernameKey(messenger, username)))
28
if err == redis.ErrNil {
29
return result, database.ErrNil
35
func (connector *DbConnector) SetUsernameID(messenger, username, id string) error {
36
c := connector.pool.Get()
38
_, err := c.Do("SET", usernameKey(messenger, username), id)
43
func (connector *DbConnector) RemoveUser(messenger, username string) error {
44
c := connector.pool.Get()
46
_, err := c.Do("DEL", usernameKey(messenger, username))
48
return fmt.Errorf("Failed to delete username '%s' from messenger '%s', error: %s", username, messenger, err.Error())
54
func (connector *DbConnector) RegisterBotIfAlreadyNot(messenger string, ttl time.Duration) bool {
55
mutex := connector.sync.NewMutex(usernameKey(messenger, botUsername), redsync.SetExpiry(ttl), redsync.SetTries(1))
56
if err := mutex.Lock(); err != nil {
59
connector.messengersCache.Set(messenger, mutex, cache.NoExpiration)
64
func (connector *DbConnector) RenewBotRegistration(messenger string) bool {
65
mutexInterface, ok := connector.messengersCache.Get(messenger)
69
mutex := mutexInterface.(*redsync.Mutex)
74
func (connector *DbConnector) DeregisterBots() {
75
messengers := connector.messengersCache.Items()
76
for messenger := range messengers {
77
connector.DeregisterBot(messenger)
82
func (connector *DbConnector) DeregisterBot(messenger string) bool {
83
mutexInterface, ok := connector.messengersCache.Get(messenger)
87
mutex := mutexInterface.(*redsync.Mutex)
91
func usernameKey(messenger, username string) string {
92
return fmt.Sprintf("moira-%s-users:%s", messenger, username)