Exemplo n.º 1
0
    async def purge_notifications(context):
        """
        Purge notify notifications of any users who aren't in ths server any more.
        @return:
        """
        db = Database.instance()
        count = 0
        notify = db.get_all('user_settings', {
            'guild': context.guild.id,
            'setting': 'sprint_notify',
            'value': 1
        })
        notify_ids = [int(row['user']) for row in notify]
        if notify_ids:

            members = await context.guild.query_members(limit=100,
                                                        cache=False,
                                                        user_ids=notify_ids)

            # Create a sub method to find a user in the members list by their id
            def find_member(id):
                for m in members:
                    if m.id == id:
                        return m
                return None

            # Go through the users who want notifications and delete any which aren't in the server now.
            for row in notify:
                if not find_member(int(row['user'])):
                    db.delete('user_settings', {'id': row['id']})
                    count += 1

        return count
Exemplo n.º 2
0
 def create(params):
     """
     Create a reminder in the database
     @return:
     """
     db = Database.instance()
     return db.insert('reminders', params)
Exemplo n.º 3
0
    def __init__(self, id):
        self.__db = Database.instance()
        self.__bot = None
        self.__context = None

        self.id = None
        self.guild = None
        self.channel = None
        self.title = None
        self.description = None
        self.img = None
        self.colour = None
        self.startdate = None
        self.enddate = None
        self.started = None
        self.ended = None

        record = self.__db.get('events', {'id': id})
        if record:
            self.id = record['id']
            self.guild = record['guild']
            self.channel = record['channel']
            self.title = record['title']
            self.description = record['description']
            self.img = record['img']
            self.colour = record['colour']
            self.startdate = record['startdate']
            self.enddate = record['enddate']
            self.started = record['started']
            self.ended = record['ended']
Exemplo n.º 4
0
    def create(guild, channel, start, end, end_reference, length, createdby, created):

        # Insert the record into the database
        db = Database.instance()
        db.insert('sprints', {'guild': guild, 'channel': channel, 'start': start, 'end': end, 'end_reference': end_reference, 'length': length, 'createdby': createdby, 'created': created})

        # Return the new object using this guild id
        return Sprint(guild)
Exemplo n.º 5
0
    def __init__(self, guild):

        # Initialise the database instance
        self.__db = Database.instance()
        self._guild = guild
        self._id = guild.id
        self._members = [member.id for member in self._guild.members]
        self._settings = None
Exemplo n.º 6
0
 def get(user, shortname):
     """
     Try to get a project with a given shortname, for a given user
     :param user:
     :param shortname:
     :return:
     """
     db = Database.instance()
     record = db.get('projects', {'user': user, 'shortname': shortname})
     return Project(record['id']) if record else None
Exemplo n.º 7
0
 def get(type, object, object_id):
     """
     Check to see if a task of this type and object_id already exists
     :return:
     """
     db = Database.instance()
     return db.get('tasks', {
         'type': type,
         'object': object,
         'objectid': object_id
     })
Exemplo n.º 8
0
 def __init__(self, bot):
     self.bot = bot
     self.__db = Database.instance()
     self._arguments = [{
         'key': 'option',
         'prompt': 'goal:argument:option',
         'required': True
     }, {
         'key': 'value',
         'required': False
     }]
Exemplo n.º 9
0
    def __init__(self, id):

        self.__db = Database.instance()

        record = self.__db.get('projects', {'id': id})
        if record:
            self._id = record['id']
            self._user = record['user']
            self._name = record['name']
            self._shortname = record['shortname']
            self._words = record['words']
            self._completed = record['completed']
Exemplo n.º 10
0
 def __init__(self, bot):
     self.bot = bot
     self.__db = Database.instance()
     self._arguments = [{
         'key': 'flag',
         'prompt': 'challenge:argument:flag',
         'required': False,
         'error': 'challenge:argument:flag'
     }, {
         'key': 'flag2',
         'required': False
     }]
Exemplo n.º 11
0
 def __init__(self, bot):
     self.bot = bot
     self.__db = Database.instance()
     self._arguments = [{
         'key': 'option',
         'prompt': 'goal:argument:option',
         'required': True
     }, {
         'key': 'value',
         'required': False
     }]
     self.types = ['daily', 'weekly', 'monthly', 'yearly']
Exemplo n.º 12
0
 def create(user, shortname, name):
     """
     Create a new project
     :param name:
     :return:
     """
     db = Database.instance()
     return db.insert('projects', {
         'user': user,
         'shortname': shortname,
         'name': name
     })
Exemplo n.º 13
0
def get_lang(guild_id):
    """
    Check which language file the guild is using
    @param guild_id: The guild ID
    @return string: The language code
    """
    db = Database.instance()
    result = db.get('guild_settings', {'guild': guild_id, 'setting': 'lang'})

    if result and is_supported_language(result['value']):
        return result['value']
    else:
        return 'en'
Exemplo n.º 14
0
 def __init__(self, bot):
     self.bot = bot
     self.__db = Database.instance()
     self._supported_commands = ['create', 'rename', 'desc', 'description', 'img', 'image', 'delete', 'schedule', 'unschedule', 'start', 'end', 'time', 'left', 'update', 'me', 'top', 'leaderboard', 'info']
     self._arguments = [
         {
             'key': 'cmd',
             'prompt': 'event:argument:cmd',
             'required': True,
             'check': lambda content : content in self._supported_commands,
             'error': 'event:err:argument:cmd'
         }
     ]
Exemplo n.º 15
0
    def __init__(self, id=None):
        self.__db = Database.instance()
        self.id = None
        self.user = None
        self.guild = None
        self.time = None
        self.channel = None
        self.message = None
        self.intervaltime = None

        record = self.__db.get('reminders', {'id': id})
        if record:
            self.load(record)
Exemplo n.º 16
0
 def __init__(self, bot):
     self.bot = bot
     self.__db = Database.instance()
     self._arguments = [{
         'key': 'amount',
         'prompt': 'wrote:argument:amount',
         'required': True,
         'type': int,
         'error': 'wrote:err:type'
     }, {
         'key': 'shortname',
         'required': False
     }]
Exemplo n.º 17
0
    async def execute_all(bot):
        """
        Execute a pass of the scheduled tasks that are currently pending
        :return:
        """
        now = int(time.time())
        db = Database.instance()

        pending = db.get_all_sql(
            'SELECT id FROM tasks WHERE time <= %s ORDER BY id ASC', [now])
        for row in pending:
            task = Task(row['id'])
            if task.is_valid():
                result = await task.run(bot)
Exemplo n.º 18
0
 def create(guild, channel, title):
     """
     Create a new event
     :param guild:
     :param channel:
     :param title:
     :return:
     """
     db = Database.instance()
     return db.insert('events', {
         'guild': guild,
         'channel': channel,
         'title': title
     })
Exemplo n.º 19
0
    def __init__(self, id, guild, context=None, name=None, bot=None, channel=None):

        # Initialise the database instance
        self.__db = Database.instance()
        self.__context = context
        self.__bot = bot
        self.__channel = channel
        self._id = int(id)
        self._guild = int(guild)
        self._name = name
        self._xp = None
        self._stats = None
        self._settings = None
        self._records = None
Exemplo n.º 20
0
 def get(id):
     """
     Get a sprint object by its id
     :return: Sprint
     """
     db = Database.instance()
     record = db.get('sprints', {'id': id})
     if record is not None:
         sprint = Sprint(None)
         sprint.set_id(id)
         sprint.load('id')
         return sprint
     else:
         return None
Exemplo n.º 21
0
 def all(user=None, guild=None):
     """
     Get all reminders for the user/guild
     @return:
     """
     db = Database.instance()
     reminders = []
     records = db.get_all('reminders', {
         'user': user,
         'guild': guild
     },
                          sort=['id ASC'])
     for record in records:
         reminders.append(Reminder(record['id']))
     return reminders
Exemplo n.º 22
0
    def all(user):
        """
        Get an array of Projects for a given user
        :param user:
        :return:
        """
        db = Database.instance()
        records = db.get_all('projects', {'user': user}, ['id'],
                             ['completed', 'name', 'shortname', 'words'])
        projects = []

        for record in records:
            projects.append(Project(record['id']))

        return projects
Exemplo n.º 23
0
    def cancel(object, object_id, type=None):
        """
        Cancel all tasks related to a specific object
        :param object:
        :param object_id:
        :param type:
        :return:
        """
        db = Database.instance()

        params = {'object': object, 'objectid': object_id}
        if type is not None:
            params['type'] = type

        return db.delete('tasks', params)
Exemplo n.º 24
0
    def __init__(self, id):

        self.__db = Database.instance()

        record = self.__db.get('projects', {'id': id})
        if record:
            self._id = record['id']
            self._user = record['user']
            self._name = record['name']
            self._shortname = record['shortname']
            self._words = record['words']
            self._status = record['status']
            self._genre = record['genre']
            self._description = record['description']
            self._link = record['link']
            self._image = record['image']
            self._completed = record['completed']
Exemplo n.º 25
0
    def __init__(self, id):
        """
        Load a Task object by its ID
        :param id:
        """
        self.__db = Database.instance()
        self.id = None

        record = self.__db.get('tasks', {'id': id})
        if record:
            self.id = record['id']
            self.type = record['type']
            self.time = record['time']
            self.object = record['object']
            self.object_id = record['objectid']
            self.processing = record['processing']
            self.recurring = record['recurring']
            self.run_every_seconds = record['runeveryseconds']
Exemplo n.º 26
0
    def get_by_guild(guild_id, include_ended=False):
        """
        Get the event currently running on the specified guild
        :param guild_id:
        :param ended:
        :return:
        """
        db = Database.instance()

        # If we are including ones which have ended, just try and get the last one
        if include_ended:
            record = db.get('events', {'guild': guild_id}, ['id'], ['id DESC'])
        else:
            record = db.get('events', {'guild': guild_id, 'ended': 0})

        if record:
            return Event(record['id'])
        else:
            return None
Exemplo n.º 27
0
    def schedule(type, time, object, object_id):
        """
        Schedule the task in the database
        :return:
        """
        db = Database.instance()

        # If this task already exists, just update its time.
        record = Task.get(type, object, object_id)
        if record:
            return db.update('tasks', {'time': time}, {'id': record['id']})
        else:
            # Otherwise, create one.
            return db.insert(
                'tasks', {
                    'type': type,
                    'time': time,
                    'object': object,
                    'objectid': object_id
                })
Exemplo n.º 28
0
    def all(user, filter_by=None, filter=None):
        """
        Get an array of Projects for a given user, matching any optional filter passed through
        @param filter_by:
        @param filter:
        @return:
        """
        db = Database.instance()

        params = {'user': user}
        if filter_by is not None and filter is not None:
            params[filter_by] = filter

        records = db.get_all('projects', params, ['id'],
                             ['name', 'shortname', 'words'])
        projects = []

        for record in records:
            projects.append(Project(record['id']))

        return projects
Exemplo n.º 29
0
    def __init__(self, guild_id, bot=None):

        # Initialise the database instance and bot (if supplied)
        self.__db = Database.instance()
        self.bot = bot

        # Initialise the variables to match the database record
        self._id = None
        self._guild = guild_id
        self._channel = None
        self._start = None
        self._end = None
        self._end_reference = None
        self._length = None
        self._createdby = None
        self._created = None
        self._completed = None

        # Try and load the sprint on this server, if there is one running.
        if self._guild is not None:
            self.load()
Exemplo n.º 30
0
 def __init__(self):
     self.__db = Database.instance()
     pass