Example #1
0
async def on_member_remove_u(member):
    # it's triggers on 'go away', kick and ban
    if not other.find(await C.client.get_bans(C.prm_server), id=member.id):
        people.Gn.check_new(member)
        log.pr_news('{0} ({0.mention}) go away!'.format(member))
        await C.client.send_message(
            C.main_ch, com.bye_msg(member.id, member.display_name))
Example #2
0
def just_embrace_say(user, clan_name, get_text=False):
    if not (user or clan_name):
        return False

    pander = (clan_name == 'Pander')
    sir = None
    if not pander:
        clan_users = set()
        not_sire_ids = {user.id}.union(C.not_sir).union(ram.embrace_not)
        for mem in C.client.get_all_members():
            if other.find(mem.roles, id=C.roles[clan_name]) and mem.id not in not_sire_ids:
                clan_users.add(mem.id)
        if clan_users:
            embr_first = [userid for userid in ram.embrace_first if userid in clan_users]
            if embr_first:
                sir = embr_first[0]
                ram.embrace_first.remove(sir)
            else:
                sir = other.choice(list(clan_users))
            text = com.get_t('embrace_msg', sir=f'<@{sir}>', child=f'<@{user.id}>')
        else:
            text = com.get_t('embrace_unic', clan=f'<@&{C.roles[clan_name]}>', child=f'<@{user.id}>')
    else:
        text = com.get_t('embrace_pander', child=f'<@{user.id}>')

    if clan_name in C.sabbat_clans and not pander:
        text += "\n" + com.get_t('embrace_sabbat')

    if get_text:
        return text
    else:
        com.write_msg(C.main_ch, text)
        return sir
Example #3
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 #4
0
async def just_embrace(user, clan_name=None):
    if not user:
        return False

    if not clan_name:
        for r in user.roles:
            if r.id in C.clan_ids:
                clan_name = C.role_by_id[r.id]
                break
    clan_name = clan_name or other.choice(C.clan_names)
    roles = [r for r in {other.find(C.vtm_server.roles, id=C.roles[clan_name])} if r]
    if clan_name in C.sabbat_clans:
        roles.append(other.find(C.vtm_server.roles, id=C.roles['Sabbat']))

    other.add_roles(user, roles, 'do_embrace')

    return clan_name
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 ''))