Example #1
0
async def silence_on(name, t=1.0, force=False):
    """
    :param name: string
    :param t: float
    :param force: bool
    :rtype: C.Types.Member
    """
    s = C.prm_server
    user = other.find_member(s, name)
    if not user:
        return None

    if user.top_role >= s.me.top_role and not force:
        return 'top_role'

    if other.has_roles(user, C.roles['protege']):
        return 'protege'

    t = max(t, 0.02)
    if user.id in ram.silence_users:
        check = ram.silence_users[user.id]['check']
    else:
        check = await turn_silence(user, turn=True, force=force)
    ram.silence_users[user.id] = {'time': other.get_sec_total() + t * 3600 - 1, 'check': tuple(check)}
    if not C.is_test:
        add_roles = [other.find(s.roles, id=C.roles['Silence'])]
        other.add_roles(user, add_roles, 'silence_on')
    log.I('Silence on for ', user, ' at ', other.t2s(), ' on ', t, 'h.')
    return user
Example #2
0
async def do_check_and_embrace(name, clan_name=None):
    user = other.find_member(C.vtm_server, name)
    roles = set(role.id for role in user.roles).difference(C.other_roles)
    if len(roles) == 1:
        await just_embrace(user, clan_name=clan_name)
        # just_embrace_say(user, clan_name)
        # text = await do_embrace(user, clan_name=clan_name)
        # com.write_msg(C.main_ch, text)
    else:
        log.D('<do_check_and_embrace> Will not embrace, there are other roles.')
Example #3
0
def _check_once_in_day():
    if not C.is_test:
        check_t = 7776000  # 90 * 24 * 3600
        for uid, usr in people.usrs.items():
            t_off = usr.offtime()
            if t_off > check_t:
                m = other.find_member(C.vtm_server, uid)
                if not other.has_roles(
                        m, C.roles_not_for_mortals) and not m.bot and len(
                            m.roles) > 1:
                    other.add_roles(m,
                                    C.roles['Mortal'],
                                    '_check_once_in_day',
                                    by_id=True,
                                    server_roles=C.vtm_server.roles)
                    log.I("{} go to Mortal (food)!".format(m))
    else:
        log.I("It's test mode, pass _check_once_in_day")
Example #4
0
 def comeback(self, memb=None, res=False):
     global usrs
     nm = self.name
     m = memb or other.find_member(C.vtm_server, self.id)
     if m:
         nm = other.uname(m)
         # if self.role != '0':
         #     role = other.find(C.vtm_server.roles, id=self.role)
         #     if role:
         #         other.add_roles(m, role, 'comeback', 5)
     self.status = 'del'
     usr = Usr(self.id,
               name=nm,
               karma=self.karma,
               status='add',
               last_m=other.get_sec_total())
     if res:
         return usr
     else:
         usrs[self.id] = usr
Example #5
0
async def silence_off(name):
    """
    :param name: string
    :rtype: C.Types.Member
    """
    s = C.prm_server
    user = other.find_member(s, name)
    if not user:
        ram.silence_users.pop(name, 0)
        return None

    s_user = ram.silence_users.pop(user.id, False)
    if s_user:
        await turn_silence(user, turn=False, check=s_user['check'])
        if not C.is_test:
            rem_roles = [other.find(s.roles, id=C.roles['Silence'])]
            other.rem_roles(user, rem_roles, 'silence_off')
        log.I('Silence off for ', user, ' at ', other.t2s())
        return user
    else:
        return False
Example #6
0
async def format_mess(msg, time=False, date=False, dbase=None):
    """
    :type msg: C.Types.Message
    :type time: Bool
    :type date: Bool
    :type dbase: dict
    :rtype: str
    """
    try:
        t_m = other.t2s(msg.timestamp)
        t_n = other.t2s()
        s_time = ('(from {0})'.format(t_m) if
                  (time or (t_n[:-1] != t_m[:-1]) or
                   (int(t_n[-1]) - int(t_m[-1]) > 1)) else '')

        if msg.channel.is_private:
            ch_name = '@#' + str(msg.channel.user)
        else:
            every_prm = msg.channel.overwrites_for(msg.server.default_role)
            if msg.server.id == C.vtm_server.id and every_prm.read_messages is False:
                ch_name = '##' + str(msg.channel.name)
            else:
                ch_name = '#' + str(msg.channel.name)

        t = ('(from {0})'.format(other.t2s(msg.timestamp, '%d|%m|%y %T'))
             if date else s_time)
        cont = msg.content or (
            ('≤System≥ ' + msg.system_content) if msg.system_content else '')
        cont = cont.replace('\n', '\n\t')  # type: str
        db = dbase if dbase is not None else {}  # we need a=={} if it is
        if msg.author.id not in db:
            db[msg.author.id] = msg.author
        if msg.raw_mentions:
            for uid in msg.raw_mentions:
                if uid in db:
                    usr = db[uid]
                else:
                    usr = other.find_member(msg.server,
                                            uid) or other.find_user(uid)
                    if not usr:
                        usr = await C.client.get_user_info(uid)
                    if usr:
                        db[uid] = usr
                    else:
                        continue
                usr_name = other.uname(usr)
                cont = cont.replace('<@' + usr.id + '>',
                                    usr_name).replace('<@!' + usr.id + '>',
                                                      usr_name)
        if msg.raw_channel_mentions:
            for chid in msg.raw_channel_mentions:
                ch = C.client.get_channel(chid)
                if ch:
                    cont = cont.replace('<#' + ch.id + '>', '#' + str(ch))
        if msg.raw_role_mentions and msg.server:
            for role_id in msg.raw_role_mentions:
                role = other.find(msg.server.roles, id=role_id)
                if not role:
                    for s in C.client.servers:
                        if s.id == msg.server.id:
                            continue
                        role = other.find(s.roles, id=role_id)
                        if role:
                            break
                if role:
                    cont = cont.replace('<@&' + role.id + '>', '&' + str(role))
        a_n = other.uname(msg.author)
        return '{t}<{ch}> {author}: {cont}'.format(t=t,
                                                   ch=ch_name,
                                                   author=a_n,
                                                   cont=cont)
    except Exception as e:
        other.pr_error(e, 'log.format_mess', 'format_mess[253] error')
        return '<format error> ' + (msg.content or (
            ('≤System≥ ' + msg.system_content) if msg.system_content else ''))
Example #7
0
 def find_member(self, i):
     return other.find_member(self.cmd_server, i)