Exemplo n.º 1
0
async def add_member(bot: NoneBot, ctx: Context_T, args: ParseResult):
    bm = BattleMaster(ctx['group_id'])
    clan = _check_clan(bm)
    uid = args['@'] or args.at or ctx['user_id']
    name = args['']
    if uid != ctx['user_id']:
        _check_admin(ctx, '才能添加其他人')
        try:  # 尝试获取群员信息,用以检查该成员是否在群中
            await bot.get_group_member_info(self_id=ctx['self_id'],
                                            group_id=bm.group,
                                            user_id=uid)
        except:
            raise NotFoundError(f'Error: 无法获取群员信息,请检查{uid}是否属于本群')
    if not name:
        m = await bot.get_group_member_info(self_id=ctx['self_id'],
                                            group_id=bm.group,
                                            user_id=uid)
        name = util.escape(m['card']) or util.escape(m['nickname']) or str(
            m['user_id'])

    mem = bm.get_member(uid, bm.group) or bm.get_member(uid, 0)  # 兼容cmdv1
    if mem:
        bm.mod_member(uid, mem['alt'], name, 1)
        await bot.send(ctx, f'成员{ms.at(uid)}昵称已修改为{name}')
    else:
        bm.add_member(uid, bm.group, name, 1)
        await bot.send(ctx, f"成员{ms.at(uid)}添加成功!欢迎{name}加入{clan['name']}")
Exemplo n.º 2
0
async def description_guess_group_ranking(bot, ev: CQEvent):
    ranking = gm.db.get_ranking(ev.group_id)
    msg = ["【猜角色小游戏排行榜】"]
    for i, item in enumerate(ranking):
        uid, count = item
        m = await bot.get_group_member_info(self_id=ev.self_id, group_id=ev.group_id, user_id=uid)
        name = util.escape(m["card"]) or util.escape(m["nickname"]) or str(uid)
        msg.append(f"第{i + 1}名:{name} 猜对{count}次")
    await bot.send(ev, "\n".join(msg))
Exemplo n.º 3
0
async def decherulize(bot, ev: CQEvent):
    s = ev.message.extract_plain_text()
    if len(s) > 1501:
        await bot.send(ev, '切、切噜太长切不动勒切噜噜...', at_sender=True)
        return
    msg = '的切噜噜是:\n' + util.filt_message(util.escape(cheru2str(s)))
    await bot.send(ev, msg, at_sender=True)
Exemplo n.º 4
0
async def whois(bot, ev: CQEvent):
    name = escape(ev.message.extract_plain_text().strip())
    if not name:
        return
    id_ = chara.name2id(name)
    confi = 100
    guess = False
    if id_ == chara.UNKNOWN:
        id_, guess_name, confi = chara.guess_id(name)
        guess = True
    c = chara.fromid(id_)

    if confi < 60:
        return

    uid = ev.user_id
    if not lmt.check(uid):
        await bot.finish(ev,
                         f'兰德索尔花名册冷却中(剩余 {int(lmt.left_time(uid)) + 1}秒)',
                         at_sender=True)

    lmt.start_cd(uid, 120 if guess else 0)
    if guess:
        msg = f'兰德索尔似乎没有叫"{name}"的人...\n角色别称补全计划: github.com/Ice-Cirno/HoshinoBot/issues/5'
        await bot.send(ev, msg)
        msg = f'您有{confi}%的可能在找{guess_name} {c.icon.cqcode} {c.name}'
        await bot.send(ev, msg)
    else:
        msg = f'{c.icon.cqcode} {c.name}'
        await bot.send(ev, msg, at_sender=True)
Exemplo n.º 5
0
async def switch_service(session: CommandSession, turn_on: bool):
    action_tip = '启用' if turn_on else '禁用'
    if session.ctx['message_type'] == 'group':
        names = session.current_arg_text.split()
        if not names:
            session.finish(f"空格后接要{action_tip}的服务名", at_sender=True)
        group_id = session.ctx['group_id']
        svs = Service.get_loaded_services()
        succ, notfound = [], []
        for name in names:
            if name in svs:
                sv = svs[name]
                u_priv = priv.get_user_priv(session.ctx)
                if u_priv >= sv.manage_priv:
                    sv.set_enable(group_id) if turn_on else sv.set_disable(
                        group_id)
                    succ.append(name)
                else:
                    try:
                        await session.send(
                            f'权限不足!{action_tip}{name}需要:{sv.manage_priv},您的:{u_priv}\n{PRIV_TIP}',
                            at_sender=True)
                    except:
                        pass
            else:
                notfound.append(util.escape(name))
        msg = []
        if succ:
            msg.append(f'已{action_tip}服务:' + ', '.join(succ))
        if notfound:
            msg.append('未找到服务:' + ', '.join(notfound))
        if msg:
            session.finish('\n'.join(msg), at_sender=True)

    else:
        if session.ctx['user_id'] not in session.bot.config.SUPERUSERS:
            return
        args = session.current_arg_text.split()
        if len(args) < 2:
            session.finish(
                'Usage: <service_name> <group_id1> [<group_id2>, ...]')
        name, *group_ids = args
        svs = Service.get_loaded_services()
        if name not in svs:
            session.finish(f'未找到服务:{name}')
        sv = svs[name]
        succ = []
        for gid in group_ids:
            try:
                gid = int(gid)
                sv.set_enable(gid) if turn_on else sv.set_disable(gid)
                succ.append(gid)
            except:
                try:
                    await session.send(f'非法群号:{gid}')
                except:
                    pass
        session.finish(f'服务{name}已于{len(succ)}个群内{action_tip}:{succ}')
Exemplo n.º 6
0
    def parse(self, args: List[str], message: Message) -> ParseResult:
        result = ParseResult()

        # 解析参数,以一个字符开头,或无前缀
        for arg in args:
            name, x = arg[0].upper(), arg[1:]
            if name in self.arg_dict:
                holder = self.arg_dict[name]
            elif '' in self.arg_dict:
                holder = self.arg_dict['']
                name, x = '', arg
            else:
                raise ParseError(f'命令含有未知参数', self.usage)

            try:
                if holder.type == str:
                    result.setdefault(name, escape(holder.type(x)))
                else:
                    result.setdefault(name, holder.type(x))  # 多个参数只取第1个
            except ParseError as e:
                e.append(self.usage)
                raise e
            except Exception:
                msg = f"请给出正确的{holder.tip or '参数'}"
                if name:
                    msg += f"以{name}开头"
                raise ParseError(msg, self.usage)

        # 检查所有参数是否以赋值
        for name, holder in self.arg_dict.items():
            if name not in result:
                if holder.default is None:  # 缺失必要参数 抛异常
                    msg = f"请给出{holder.tip or '缺少的参数'}"
                    if name:
                        msg += f"以{name}开头"
                    raise ParseError(msg, self.usage)
                else:
                    result[name] = holder.default

        # 解析Message内的at
        result['at'] = 0
        for seg in message:
            if seg.type == 'at':
                result['at'] = int(seg.data['qq'])

        return result
Exemplo n.º 7
0
async def kc_marriage(bot, ev: CQEvent):
    wife = escape(ev.message.extract_plain_text().strip())
    tip = f'与{wife}的ケッコンカッコカリ结果是:' if wife else '的ケッコンカッコカリ结果是:'
    await do_dice(bot, ev, 1, 3, 6, 1, 0, tip)
Exemplo n.º 8
0
async def guess(bot, ev: CQEvent):
    s = escape(ev.message.extract_plain_text().strip())
    msg = await query(s)
    if msg:
        await bot.send(ev, msg, at_sender=True)
Exemplo n.º 9
0
async def get_cqcode(session: CommandSession):
    await session.send(escape(str(session.current_arg)))