Example #1
0
def conne_worker(bot, message, names, full=False, sorter=None):
    """
    获取圆爹的进程worker.
    """
    file_name = 'conne' + str(int(time.time())) + '.png'
    full_path = os.path.join(config['cq_root_dir'], config['cq_image_dir'],
                             file_name)

    hidden_fields = [14, 15, 16, 20, 24]
    if full:
        hidden_fields = []
    try:
        inexistence, image = get_conne_pic(names, sorter, hidden_fields)
    except Exception as e:
        reply(bot, message, '汪汪汪? 可能是网络问题, 重试一下吧')
        raise e
        return
    if inexistence:
        # 有没找到的话提示哪些没找到ff
        reply(bot, message, '以下单位圆爹站好像没找到: {}'.format(', '.join(inexistence)))

    if not len(inexistence) == len(names):
        # 不是一个都没找到就行
        image.save(full_path)
        reply(bot, message, CQImage(file_name))
Example #2
0
def status_worker(bot, message, name, refresh):
    """
    获取属性图的进程worker.
    """
    full_path = os.path.join(config['cq_root_dir'], config['cq_image_dir'],
                             'unit', name + '.png')
    if not os.path.exists(
            os.path.join(config['cq_root_dir'], config['cq_image_dir'],
                         'unit')):
        os.mkdir(
            os.path.join(config['cq_root_dir'], config['cq_image_dir'],
                         'unit'))
    # 没有缓存或者要求刷新的情况
    if not os.path.exists(full_path) or refresh:
        try:
            image = get_status_pic(name)
        except UnitException as e:
            reply(bot, message, str(e))
            return
        except Exception as e:
            reply(bot, message, '汪汪汪? 可能是网络问题, 重试一下吧')
            raise e
            return
        image.save(full_path)
    reply(bot, message, str(CQImage(os.path.join("unit", name + ".png"))))
Example #3
0
    def __str__(self):
        for url in self.media:
            filename = os.path.basename(url)
            dir = os.path.join(config['cq_root_dir'], config['cq_image_dir'],
                               'twitter')
            path = os.path.join(dir, filename)
            # 没有twitter文件夹的话就新建一个
            if not os.path.exists(dir):
                os.mkdir(dir)
            # 下图
            if not os.path.exists(path):
                resp = requests.get(url,
                                    timeout=60,
                                    proxies=config.get('proxies'))
                with open(path, 'wb') as f:
                    f.write(resp.content)

        dt = self.date.astimezone(timezone(timedelta(hours=9)))
        ds = datetime.strftime(dt, '%Y-%m-%d %H:%M:%S JST')
        results = [
            ds,
        ]
        text = self.text
        text = text.replace('・',
                            '·').replace('✕',
                                         '×').replace('#千年戦争アイギス',
                                                      '').replace('♪', '')
        results.extend(['', text.strip()])
        results.extend([
            str(CQImage(os.path.join('twitter', os.path.basename(m))))
            for m in self.media
        ])
        return '\n'.join(results)
Example #4
0
def poster(bot, message):
    """#poster [-h] [-f]

    -h : 打印本帮助
    -f : 强制刷新
    """

    try:
        cmd, *args = shlex.split(message.text)
    except ValueError:
        return False
    if not cmd[0] in config['trigger']:
        return False
    if not cmd[1:] == 'poster':
        return False
    try:
        options, args = getopt.gnu_getopt(args, 'hf')
    except getopt.GetoptError:
        # 格式不对
        reply(bot, message, poster.__doc__)
        return True

    refresh = False

    # 拆参数
    for o, a in options:
        if o == '-h':
            # 帮助
            reply(bot, message, poster.__doc__)
            return True
        elif o == '-f':
            refresh = True

    weekday = datetime.now().weekday()
    if weekday >= 3:
        delta = timedelta(days=weekday - 3)
    else:
        delta = timedelta(days=7 + weekday - 3)

    thu_date = datetime.now().date() - delta
    url = '{}event{}.jpg'.format(BASE_URL, thu_date.strftime('%Y%m%d'))
    filename = os.path.basename(url)
    dir = os.path.join(config['cq_root_dir'], config['cq_image_dir'], 'poster')
    path = os.path.join(dir, filename)

    if not os.path.exists(dir):
        os.mkdir(dir)

    if not os.path.exists(path) or refresh:
        resp = requests.get(url, timeout=60, proxies=config.get('proxies'))
        if not resp.status_code == 200:
            reply(bot, message, '没找到海报...还没更新或者是网络问题?')
            return True
        with open(path, 'wb') as f:
            f.write(resp.content)

    reply(bot, message, CQImage(os.path.join('poster', filename)))
    return True
Example #5
0
def emoji_base(bot, message):
    """#emoji [-h] [-d 名称] [内容...]

    -h     : 打印本帮助
    -d 名称 : emoji的名称
    内容    : 要录入的内容, 可以有图片也可以有文字, 也可以是混合内容. 一个名称可以有多个内容. 当没有内容时将输出列表.

    例:
        #emoji -d 班长 班长!!!.jpg
        #emoji -d 我好菜啊 你是坏菜!
        #emoji  (将列出所有emoji列表)
        #emoji -d 班长  (将列出班长emoji的列表)
    """

    try:
        cmd, *args = shlex.split(message.text)
    except ValueError:
        return False
    if not cmd[0] in config['trigger']:
        return False
    if not cmd[1:] == 'emoji':
        return False
    try:
        options, args = getopt.gnu_getopt(args, 'hd:')
    except getopt.GetoptError:
        # 格式不对
        reply(bot, message, emoji_base.__doc__)
        return True

    name = None

    for o, a in options:
        if o == '-d':
            name = a
        elif o == '-h':
            # 帮助
            reply(bot, message, emoji_base.__doc__)
            return True

    # 没有内容的时候输出列表
    if not name:
        # 列出所有名字
        emojis = Emoji.objects()
        names = []
        for emoji in emojis:
            names.append('[' + ','.join(emoji.name) + ']')
        msg = '现在保存了以下内容: \n{}' .format(';'.join(names))
        reply(bot, message, msg)
        return True
    if not args:
        # 列出当前名字下的所有表情
        emoji = Emoji.objects(name=name).first()
        if not emoji:
            reply(bot, message, '没找到名字{}'.format(name))
            return True
        msg = '{}对应以下内容: \n'.format(emoji.name)
        msg_emojis = []
        for index, content in enumerate(emoji.emoji):
            msg_emojis.append('[{}] => [{}]'.format(index + 1, content))
        msg += ';'.join(msg_emojis)
        reply(bot, message, msg)
        return True

    # 内容
    content = ' '.join(args)

    # 有内容, 是增加
    emoji = Emoji.objects(name=name).first()
    if not emoji:
        emoji = Emoji()
        emoji.name.append(name)

    # 找图片
    files = CQImage.PATTERN.findall(content)
    # 遍历
    for filename in files:
        dir = os.path.join(config['cq_root_dir'], config['cq_image_dir'], 'emoji')
        path = os.path.join(dir, filename)
        if not os.path.exists(dir):
            os.mkdir(dir)
        cqimg = os.path.join(config['cq_root_dir'], config['cq_image_dir'], filename + '.cqimg')
        parser = ConfigParser()
        parser.read(cqimg)
        url = parser['image']['url']
        r = requests.get(url, timeout=30, proxies=config.get('proxies', {}))
        # 下载
        with open(path, 'wb') as f:
            f.write(r.content)

    content = CQImage.PATTERN.sub(str(CQImage('emoji/\\1')), content)
    emoji.emoji.append(content)
    emoji.save()

    if len(emoji.emoji) > 10:
        msg = '[{}]现在含有{}个emoji'.format(','.join(emoji.name),str(len(emoji.emoji)))
    else:
        msg = '[{}]现在对应以下内容: \n{}'.format(','.join(emoji.name), '[' + '];['.join(emoji.emoji) + ']')
    reply(bot, message, msg)