from slackminion.plugin.base import BasePlugin
try:
from . import commit
except ImportError:
commit = "HEAD"
[docs]class UserManager(BasePlugin):
"""
Loads and stores user information
"""
[docs] def on_load(self):
self._dont_save = True # Don't save this plugin's state on shutdown
self.users = {}
self.admins = {}
if "bot_admins" in self._bot.config:
self.admins = self._bot.config["bot_admins"]
setattr(self._bot, "user_manager", self)
return super(UserManager, self).on_load()
[docs] def get(self, userid):
"""Retrieve user by id"""
if userid in self.users:
return self.users[userid]
return None
[docs] def get_by_username(self, username):
"""Retrieve user by username"""
res = [x for x in list(self.users.values()) if x.username == username]
if len(res) > 0:
return res[0]
return None
[docs] def set(self, user):
"""
Adds a user object to the user manager
user - a SlackUser object
"""
self.log.debug("Loading user information for %s/%s", user.id, user.username)
self.load_user_info(user)
self.log.debug("Loading user rights for %s/%s", user.id, user.username)
self.load_user_rights(user)
self._add_user_to_cache(user)
return user
def _add_user_to_cache(self, user):
if user.id not in list(self.users.keys()):
self.users[user.id] = user
self.log.debug("Added user: %s/%s", user.id, user.username)
[docs] def load_user_info(self, user):
"""Loads additional user information and stores in user object"""
# We have no additional information to load, but a child plugin
# might want to override this
pass
[docs] def load_user_rights(self, user):
"""Sets permissions on user object"""
if user.username in self.admins:
user.set_admin(True)
user.set_admin(False)