Ejemplo n.º 1
0
async def morning_handle(event: GroupMessageEvent,
                         arg: Message = CommandArg()):
    args = arg.extract_plain_text()

    group_id = event.group_id

    if args == "today":
        await morning_cmd.finish(await get_moring_message())

    if args == "update":
        await HOLIDAYS_DATA.update()
        await morning_cmd.finish("节假日数据更新成功")

    if args and group_id:
        if strtobool(args):
            plugin_config.morning_group_id += [group_id]
            await morning_cmd.finish("已在本群开启每日早安功能")
        else:
            plugin_config.morning_group_id = [
                n for n in plugin_config.morning_group_id if n != group_id
            ]
            await morning_cmd.finish("已在本群关闭每日早安功能")
    else:
        if group_id in plugin_config.morning_group_id:
            await morning_cmd.finish("每日早安功能开启中")
        else:
            await morning_cmd.finish("每日早安功能关闭中")
Ejemplo n.º 2
0
async def _(bot: Bot, event: Event, state: dict):
    args = str(event.message).strip()

    group_id = event.group_id

    if args and group_id:
        if strtobool(args):
            plugin_config.push_news_group_id += [group_id]
            await news_cmd.finish('已开始新闻自动推送')
        else:
            plugin_config.push_news_group_id = [
                n for n in plugin_config.push_news_group_id if n != group_id
            ]
            await news_cmd.finish('已停止新闻自动推送')
    else:
        if group_id in plugin_config.push_news_group_id:
            await news_cmd.finish('新闻自动推送开启中')
        else:
            await news_cmd.finish('新闻自动推送关闭中')
Ejemplo n.º 3
0
async def hello_handle(event: GroupMessageEvent, arg: Message = CommandArg()):
    args = arg.extract_plain_text()

    group_id = event.group_id

    if args and group_id:
        if strtobool(args):
            plugin_config.hello_group_id += [group_id]
            await hello_cmd.finish("已在本群开启启动问候功能")
        else:
            plugin_config.hello_group_id = [
                n for n in plugin_config.hello_group_id if n != group_id
            ]
            await hello_cmd.finish("已在本群关闭启动问候功能")
    else:
        if group_id in plugin_config.hello_group_id:
            await hello_cmd.finish("启动问候功能开启中")
        else:
            await hello_cmd.finish("启动问候功能关闭中")
Ejemplo n.º 4
0
async def _(bot: Bot, event: Event, state: dict):
    args = str(event.message).strip()

    group_id = event.group_id

    if args and group_id:
        if strtobool(args):
            plugin_config.group_id += [group_id]
            await morning_cmd.finish('已在本群开启每日早安功能')
        else:
            plugin_config.group_id = [
                n for n in plugin_config.group_id if n != group_id
            ]
            await morning_cmd.finish('已在本群关闭每日早安功能')
    else:
        if group_id in plugin_config.group_id:
            await morning_cmd.finish('每日早安功能开启中')
        else:
            await morning_cmd.finish('每日早安功能关闭中')
Ejemplo n.º 5
0
async def repeat_handle(event: GroupMessageEvent, arg: Message = CommandArg()):
    args = arg.extract_plain_text()

    group_id = event.group_id

    if args and group_id:
        if strtobool(args):
            plugin_config.group_id += [group_id]
            recorder_obj.add_new_group()
            await repeat_cmd.finish("已在本群开启复读功能")
        else:
            plugin_config.group_id = [
                n for n in plugin_config.group_id if n != group_id
            ]
            await repeat_cmd.finish("已在本群关闭复读功能")
    else:
        if group_id in plugin_config.group_id:
            await repeat_cmd.finish("复读功能开启中")
        else:
            await repeat_cmd.finish("复读功能关闭中")
Ejemplo n.º 6
0
async def _(bot: Bot, event: Event, state: dict):
    args = str(event.message).strip()

    group_id = event.group_id

    if args and group_id:
        if strtobool(args):
            plugin_config.group_id += [group_id]
            recorder.add_new_group()
            await repeat_cmd.finish('已在本群开启复读功能')
        else:
            plugin_config.group_id = [
                n for n in plugin_config.group_id if n != group_id
            ]
            await repeat_cmd.finish('已在本群关闭复读功能')
    else:
        if group_id in plugin_config.group_id:
            await repeat_cmd.finish('复读功能开启中')
        else:
            await repeat_cmd.finish('复读功能关闭中')
Ejemplo n.º 7
0
async def _(bot: Bot, event: Event, state: dict):
    args = str(event.message).strip()

    group_id = event.group_id

    if args in ['status', '状态']:
        if group_id in plugin_config.push_calender_group_id:
            await news_cmd.finish('日程自动推送开启中')
        else:
            await news_cmd.finish('日程自动推送关闭中')
    elif args and group_id:
        if strtobool(args):
            plugin_config.push_calender_group_id += [group_id]
            await news_cmd.finish('已开始日程自动推送')
        else:
            plugin_config.push_calender_group_id = [
                n for n in plugin_config.push_calender_group_id
                if n != group_id
            ]
            await news_cmd.finish('已停止日程自动推送')
    else:
        await calender_cmd.finish(await calender.get_week_events())
Ejemplo n.º 8
0
async def _(bot: Bot, event: Event, state: dict):
    argv = str(event.message).strip().split()
    if not argv:
        await fflogs_cmd.finish(get_command_help('ff14.dps'))

    if not event.user_id:
        raise FinishedException
    user_id = event.user_id

    # 设置 Token
    if argv[0] == 'token' and len(argv) == 2:
        # 检查是否是超级用户
        if user_id not in bot.config.superusers:
            await fflogs_cmd.finish('抱歉,你没有权限修改 Token。')

        plugin_config.fflogs_token = argv[1]
        await fflogs_cmd.finish('Token 设置完成。')

    # 检查 Token 是否设置
    if not plugin_config.fflogs_token:
        await fflogs_cmd.finish(
            '对不起,Token 未设置,无法查询数据。\n请先使用命令\n/dps token <token>\n配置好 Token 后再尝试查询数据。'
        )

    if argv[0] == 'token' and len(argv) == 1:
        # 检查是否是超级用户
        if user_id not in bot.config.superusers:
            await fflogs_cmd.finish('抱歉,你没有权限查看 Token。')
        await fflogs_cmd.finish(f'当前的 Token 为 {plugin_config.fflogs_token}')

    # 缓存相关设置
    if argv[0] == 'cache':
        # 检查是否是超级用户
        if user_id not in bot.config.superusers:
            await fflogs_cmd.finish('抱歉,你没有权限设置缓存。')
        if len(argv) == 2:
            if strtobool(argv[1]):
                if not fflogs.is_cache_enabled:
                    fflogs.enable_cache()
                await fflogs_cmd.finish('已开始定时缓存')
            else:
                if fflogs.is_cache_enabled:
                    fflogs.disable_cache()
                await fflogs_cmd.finish('已停止定时缓存')
        else:
            if fflogs.is_cache_enabled:
                await fflogs_cmd.finish('定时缓存开启中')
            else:
                await fflogs_cmd.finish('定时缓存关闭中')

    if argv[0] == 'me' and len(argv) == 1:
        if user_id not in fflogs.characters:
            await fflogs_cmd.finish(
                '抱歉,你没有绑定最终幻想14的角色。\n请使用\n/dps me 角色名 服务器名\n绑定自己的角色。')
        await fflogs_cmd.finish(
            f'你当前绑定的角色:\n角色:{fflogs.characters[user_id][0]}\n服务器:{fflogs.characters[user_id][1]}'
        )

    if '[CQ:at,qq=' in argv[0] and len(argv) == 1:
        user_id = int(argv[0][10:-1])
        if user_id not in fflogs.characters:
            await fflogs_cmd.finish('抱歉,该用户没有绑定最终幻想14的角色。')
        await fflogs_cmd.finish(
            f'[CQ:at,qq={user_id}] 当前绑定的角色:\n角色:{fflogs.characters[user_id][0]}\n服务器:{fflogs.characters[user_id][1]}'
        )

    if argv[0] == 'me' and len(argv) == 3:
        fflogs.set_character(user_id, argv[1], argv[2])
        await fflogs_cmd.finish('角色绑定成功!')

    if argv[0] == 'classes' and len(argv) == 1:
        reply = await fflogs.classes()
        await fflogs_cmd.finish(str(reply))

    if argv[0] == 'zones' and len(argv) == 2:
        reply = await fflogs.zones()
        await fflogs_cmd.finish(str(reply[int(argv[1])]))

    # 判断查询排行是指个人还是特定职业
    if len(argv) == 2:
        # <BOSS名> me
        # <BOSS名> <@他人>
        # <BOSS名> <职业名>
        if argv[1].lower() == 'me':
            reply = await get_character_dps_by_user_id(argv[0], user_id)
        elif '[CQ:at,qq=' in argv[1]:
            # @他人的格式
            # [CQ:at,qq=12345678]
            user_id = int(argv[1][10:-1])
            reply = await get_character_dps_by_user_id(argv[0], user_id)
        else:
            reply = await fflogs.dps(*argv)  #type:ignore
        await fflogs_cmd.finish(reply)

    if len(argv) == 3:
        # <BOSS名> <职业名> <DPS种类>
        # <BOSS名> <角色名> <服务器名>
        argv[2] = argv[2].lower()
        if argv[2] in ['adps', 'rdps', 'pdps']:
            reply = await fflogs.dps(*argv)  #type:ignore
        else:
            reply = await fflogs.character_dps(*argv)  #type:ignore
        await fflogs_cmd.finish(reply)

    await fflogs_cmd.finish(get_command_help('ff14.dps'))
Ejemplo n.º 9
0
class Config(BaseSettings):
    # 新闻推送相关配置
    # 自动推送新闻的间隔,单位 分钟
    push_news_interval: int = int(
        DATA.get_config('ff14', 'push_news_interval', '30'))
    # 上次推送新闻的发布时间
    push_news_last_news_date: datetime = parse(
        DATA.get_config('ff14', 'push_news_last_news_date', '2000-01-01'))

    # 启用新闻推送的群
    push_news_group_id: List[int] = strtogroupid(
        DATA.get_config('ff14', 'push_news_group_id'))

    @validator('push_news_last_news_date', always=True)
    def push_news_last_news_date_validator(cls, v: datetime):
        """ 验证并保存配置 """
        DATA.set_config('ff14', 'push_news_last_news_date', v.isoformat())
        return v

    @validator('push_news_group_id', always=True)
    def push_news_group_id_validator(cls, v: List[int]):
        """ 验证并保存配置 """
        DATA.set_config('ff14', 'push_news_group_id', groupidtostr(v))
        return v

    # FFLogs 相关配置
    fflogs_token: str = DATA.get_config('fflogs', 'token')
    # 默认从两周的数据中计算排名百分比
    fflogs_range: int = int(DATA.get_config('fflogs', 'range', '14'))
    # 是否开启定时缓存
    fflogs_cache: bool = strtobool(
        DATA.get_config('fflogs', 'cache_enable', '0'))
    # 缓存的时间
    fflogs_cache_hour: int = int(
        DATA.get_config('fflogs', 'cache_hour', fallback='4'))
    fflogs_cache_minute: int = int(
        DATA.get_config('fflogs', 'cache_minute', fallback='30'))
    fflogs_cache_second: int = int(
        DATA.get_config('fflogs', 'cache_second', fallback='0'))
    # 需要缓存的副本
    fflogs_cache_boss: List[str] = DATA.get_config('fflogs',
                                                   'cache_boss').split()

    @validator('fflogs_token', always=True)
    def fflogs_token_validator(cls, v):
        """ 验证并保存配置 """
        DATA.set_config('fflogs', 'token', v)
        return v

    @validator('fflogs_cache', always=True)
    def fflogs_cache_validator(cls, v):
        """ 验证并保存配置 """
        if v:
            DATA.set_config('fflogs', 'cache_enable', '1')
        else:
            DATA.set_config('fflogs', 'cache_enable', '0')
        return v

    class Config:
        extra = 'ignore'
        validate_assignment = True
Ejemplo n.º 10
0
async def fflogs_handle(event: MessageEvent, arg: Message = CommandArg()):
    argv = arg.extract_plain_text().split()
    if not argv:
        await fflogs_cmd.finish(get_command_help("ff14.dps"))

    user_id = event.user_id

    # 设置 Token
    if argv[0] == "token" and len(argv) == 2:
        # 检查是否是超级用户
        if user_id not in global_config.superusers:
            await fflogs_cmd.finish("抱歉,你没有权限修改 Token。")

        plugin_config.fflogs_token = argv[1]
        await fflogs_cmd.finish("Token 设置完成。")

    # 检查 Token 是否设置
    if not plugin_config.fflogs_token:
        await fflogs_cmd.finish(
            "对不起,Token 未设置,无法查询数据。\n请先使用命令\n/dps token <token>\n配置好 Token 后再尝试查询数据。"
        )

    if argv[0] == "token" and len(argv) == 1:
        # 检查是否是超级用户
        if user_id not in global_config.superusers:
            await fflogs_cmd.finish("抱歉,你没有权限查看 Token。")
        await fflogs_cmd.finish(f"当前的 Token 为 {plugin_config.fflogs_token}")

    if argv[0] == "update" and len(argv) == 1:
        await FFLOGS_DATA.update()
        await fflogs_cmd.finish("副本数据更新成功")

    # 缓存相关设置
    if argv[0] == "cache":
        # 检查是否是超级用户
        if user_id not in global_config.superusers:
            await fflogs_cmd.finish("抱歉,你没有权限设置缓存。")
        if len(argv) == 2:
            if strtobool(argv[1]):
                if not fflogs.is_cache_enabled:
                    fflogs.enable_cache()
                await fflogs_cmd.finish("已开始定时缓存")
            else:
                if fflogs.is_cache_enabled:
                    fflogs.disable_cache()
                await fflogs_cmd.finish("已停止定时缓存")
        else:
            if fflogs.is_cache_enabled:
                await fflogs_cmd.finish("定时缓存开启中")
            else:
                await fflogs_cmd.finish("定时缓存关闭中")

    if argv[0] == "me" and len(argv) == 1:
        if user_id not in fflogs.characters:
            await fflogs_cmd.finish(
                "抱歉,你没有绑定最终幻想14的角色。\n请使用\n/dps me 角色名 服务器名\n绑定自己的角色。")
        await fflogs_cmd.finish(
            f"你当前绑定的角色:\n角色:{fflogs.characters[user_id][0]}\n服务器:{fflogs.characters[user_id][1]}"
        )

    if "[CQ:at,qq=" in argv[0] and len(argv) == 1:
        user_id = int(argv[0][10:-1])
        if user_id not in fflogs.characters:
            await fflogs_cmd.finish("抱歉,该用户没有绑定最终幻想14的角色。")
        await fflogs_cmd.finish(
            f"[CQ:at,qq={user_id}] 当前绑定的角色:\n角色:{fflogs.characters[user_id][0]}\n服务器:{fflogs.characters[user_id][1]}"
        )

    if argv[0] == "me" and len(argv) == 3:
        fflogs.set_character(user_id, argv[1], argv[2])
        await fflogs_cmd.finish("角色绑定成功!")

    if argv[0] == "classes" and len(argv) == 1:
        reply = await fflogs.classes()
        await fflogs_cmd.finish(str(reply))

    if argv[0] == "zones" and len(argv) == 2:
        reply = await fflogs.zones()
        if reply:
            await fflogs_cmd.finish(str(reply[int(argv[1])]))

    # 判断查询排行是指个人还是特定职业
    if len(argv) == 2:
        # <BOSS名> me
        # <BOSS名> <@他人>
        # <BOSS名> <职业名>
        if argv[1].lower() == "me":
            reply = await get_character_dps_by_user_id(argv[0], user_id)
        elif "[CQ:at,qq=" in argv[1]:
            # @他人的格式
            # [CQ:at,qq=12345678]
            user_id = int(argv[1][10:-1])
            reply = await get_character_dps_by_user_id(argv[0], user_id)
        else:
            reply = await fflogs.dps(*argv)  # type:ignore
        await fflogs_cmd.finish(reply)

    if len(argv) == 3:
        # <BOSS名> <职业名> <DPS种类>
        # <BOSS名> <角色名> <服务器名>
        argv[2] = argv[2].lower()
        if argv[2] in ["adps", "rdps", "pdps"]:
            reply = await fflogs.dps(*argv)  # type:ignore
        else:
            reply = await fflogs.character_dps(*argv)  # type:ignore
        await fflogs_cmd.finish(reply)

    await fflogs_cmd.finish(get_command_help("ff14.dps"))