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