Ejemplo n.º 1
0
async def typeGettrans(session: CommandSession):
    if not headdeal(session):
        return
    message_type = session.event['message_type']
    #group_id = (session.event['group_id'] if message_type == 'group' else None)
    #user_id = session.event['user_id']
    if message_type != 'group':
        return
    if perm_check(session, '-switch', user=True):
        await session.send('操作被拒绝,权限不足(p)')
        return
    if not perm_check(session, 'trans'):
        await session.send('操作未授权')
        return
    logger.info(CQsessionToStr(session))
    arg = session.current_arg_text.strip()
    if arg == '':
        await session.send('缺少参数')
        return
    ttm = trans_tmemory.tm.copy()
    length = len(ttm)
    for i in range(length - 1, -1, -1):
        if ttm[i]['tasktype'] == arg:
            await session.send(trans_img_path + encode_b64(ttm[i]['group'],offset=0)+'-'+str(ttm[i]['tasktype']) + '.png' +"\n" + \
                    str('[CQ:image,timeout=' + config.img_time_out + \
                    ',file='+trans_img_path + encode_b64(ttm[i]['group'],offset=0)+'-'+str(ttm[i]['tasktype']) + '.png' + ']'))
            return
    await session.send("未查找到推文翻译")
Ejemplo n.º 2
0
async def encodetweetid(session: CommandSession):
    stripped_arg = session.current_arg_text.strip()
    if stripped_arg == '':
        return
    if not stripped_arg.isdecimal():
        await session.send("推特ID不正确")
        return
    res = tweetListener.encode_b64(int(stripped_arg))
    await session.send("推特ID缩写为:" + res)
Ejemplo n.º 3
0
async def encodetweetid(session: CommandSession):
    if not headdeal(session):
        return
    await asyncio.sleep(0.2)
    stripped_arg = session.current_arg_text.strip()
    if stripped_arg == '':
        return
    if not stripped_arg.isdecimal():
        await session.send("推特ID似乎搞错了呢( ̄▽ ̄)\"请仔细检查")
        return
    n = int(stripped_arg)
    if n < 1253881609540800000:
        await session.send("推特ID的值过小!")
        return
    res = encode_b64(n)
    logger.info(CQsessionToStr(session))
    await session.send("推特ID压缩好了(o゚▽゚)o请使用:" + res)
Ejemplo n.º 4
0
async def gettrans(session: CommandSession):
    if not headdeal(session):
        return
    message_type = session.event['message_type']
    #group_id = (session.event['group_id'] if message_type == 'group' else None)
    #user_id = session.event['user_id']
    if message_type != 'group':
        return
    if perm_check(session, '-switch', user=True):
        await session.send('操作被拒绝,权限不足(p)')
        return
    if not perm_check(session, 'trans'):
        await session.send('操作未授权')
        return
    logger.info(CQsessionToStr(session))

    def checkTweetId(a, ad):
        if a[:1] == '#':
            ta = a[1:]
            if not ta.isdecimal():
                return None
            res = mintweetID.find(lambda item, val: item[1] == val, int(ta))
            if res == None:
                return None
            return res[0]
        elif a.isdecimal() and int(a) > 1253881609540800000:
            return a
        else:
            res = decode_b64(a)
            if res == -1:
                return None
            return res

    arglimit = [{
        'name': 'tweet_id',  #参数名
        'des': '推特ID',  #参数错误描述
        'type':
        'int',  #参数类型int float str list dict (list与dict需要使用函数或正则表达式进行二次处理)
        'strip': True,  #是否strip
        'lower': False,  #是否转换为小写
        'default': None,  #默认值
        'func': checkTweetId,  #函数,当存在时使用函数进行二次处理
        're': None,  #正则表达式匹配(match函数)
        'vlimit': {
            #参数限制表(限制参数内容,空表则不限制),'*':''表示匹配任意字符串,值不为空时任意字符串将被转变为这个值
        }
    }]
    args = argDeal(session.current_arg_text.strip(), arglimit)
    if not args[0]:
        await session.send(args[1] + '=>' + args[2])
        return
    args = args[1]
    tweet_id = args['tweet_id']
    ttm = trans_tmemory.tm.copy()
    length = len(ttm)
    for i in range(length - 1, -1, -1):
        if ttm[i]['id'] == tweet_id:
            await session.send(trans_img_path + encode_b64(ttm[i]['group'],offset=0)+'-'+str(ttm[i]['tasktype']) + '.png' +"\n" + \
                    str('[CQ:image,timeout=' + config.img_time_out + \
                    ',file='+trans_img_path + encode_b64(ttm[i]['group'],offset=0)+'-'+str(ttm[i]['tasktype']) + '.png' + ']'))
            return
    await session.send("未查找到推文翻译")
Ejemplo n.º 5
0
def send_res(session: CommandSession, args):
    global transtemplate
    group_id = session.event['group_id']
    user_id = session.event['user_id']
    tweet_id = args['tweet_id']
    trans = args['trans']
    try:
        #使用64进制减少长度
        tasktype = encode_b64(int(time.time()), offset=0)
        type_html = transtemplate['0']
        if str(group_id) in transtemplate:
            type_html = transtemplate[str(group_id)]
        trans['type_html'] = type_html

        #检查推文缓存
        tweet_sname = 's'
        tweet = tweet_event_deal.tryGetTweet(tweet_id)
        if tweet != None:
            logger.info('检测到缓存:' + tweet['id_str'] + '(' +
                        tweet['user']['screen_name'] + ')')
            #logger.info(tweet)
            tweet_cache = tweet
            tweet_sname = tweet_cache['user']['screen_name']

        tt = TweetTrans()
        res = tt.getTransFromTweetID(
            str(tweet_id), args['trans'], tweet_sname,
            encode_b64(group_id, offset=0) + '-' + str(tasktype))
        if res[0]:
            time.sleep(1)
            if 'nickname' in session.event.sender:
                nick = session.event.sender['nickname']
            else:
                nick = str(user_id)

            trans_tmemory.join({
                'id':
                tweet_id,
                'group':
                group_id,
                'mintrans':
                trans['source'][0:15].replace("\n", " "),
                'tweetid':
                encode_b64(tweet_id),
                'tasktype':
                tasktype,
                'trans':
                trans,
                'op':
                user_id,
                'opnick':
                nick
            })
            send_msg(session,
                    trans_img_path + encode_b64(group_id,offset=0)+'-'+str(tasktype) + '.png' +"\n" + \
                    str('[CQ:image,timeout=' + config.img_time_out + \
                    ',file='+trans_img_path + encode_b64(group_id,offset=0)+'-'+str(tasktype) + '.png' + ']') + "\n"\
                    "使用 !tl 查看烤推历史"
                    )
        else:
            send_msg(session, "错误," + res[2])
        del tt
    except:
        s = traceback.format_exc(limit=10)
        logger.error(s)
        send_msg(session, "错误,烤推服务异常!")
Ejemplo n.º 6
0
async def gettweetlist(session: CommandSession):
    if not headdeal(session):
        return
    await asyncio.sleep(0.2)
    message_type = session.event['message_type']
    group_id = (session.event['group_id'] if message_type == 'group' else None)
    user_id = session.event['user_id']
    if perm_check(session, '-listener', user=True):
        await session.send('操作被拒绝,权限不足(p)')
        return
    sent_id = 0
    if message_type == 'private':
        sent_id = user_id
    elif message_type == 'group':
        if not perm_check(session, 'listener'):
            await session.send('操作被拒绝,权限不足(g)')
            return
        sent_id = group_id
    else:
        await session.send('未收录的消息类型:' + message_type)
        return
    logger.info(CQsessionToStr(session))

    #ID为空或者#号时尝试使用默认ID
    def tryget(a, ad):
        tweet_user_id = a
        if tweet_user_id == '' or tweet_user_id == '#':
            l = push_list.getLitsFromPushTo(message_type, sent_id)
            if l == []:
                return (False, '监听列表无成员,无法置入默认值')
            tweet_user_id = str(l[0]['tweet_user_id'])
        if tweet_user_id.isdecimal():
            res = tweetListener.tweet_event_deal.tryGetUserInfo(
                user_id=int(tweet_user_id))
            if res == {}:
                res = (False, '缓存中不存在此用户!')
            else:
                res = (True, res)
        else:
            res = tweetListener.tweet_event_deal.tryGetUserInfo(
                screen_name=tweet_user_id)
            if res == {}:
                res = (False, '缓存中不存在此用户!')
            else:
                res = (True, res)
        return res

    arglimit = [
        {
            'name': 'userinfo',  #参数名
            'des': '推特用户ID',  #参数错误描述
            'type':
            'dict',  #参数类型int float str list dict (list与dict需要使用函数或正则表达式进行二次处理)
            'strip': True,  #是否strip
            'lower': False,  #是否转换为小写
            'default': None,  #默认值
            'func': tryget,  #函数,当存在时使用函数进行二次处理
            'funcdealnull': True,  #函数是否处理空值(控制默认值)
            're': None,  #正则表达式匹配(match函数)
            're_error': '',
            'vlimit': {
                #参数限制表(限制参数内容,空表则不限制),'*':''表示匹配任意字符串,值不为空时任意字符串将被转变为这个值
            }
        },
        {
            'name': 'page',  #参数名
            'des': '页码',  #参数错误描述
            'type':
            'int',  #参数类型int float str list dict (list与dict需要使用函数或正则表达式进行二次处理)
            'strip': True,  #是否strip
            'lower': False,  #是否转换为小写
            'default': 1,  #默认值(不会进行二次类型转换)
            'func': None,  #函数,当存在时使用函数进行二次处理
            're': None,  #正则表达式匹配(match函数)
            'vlimit': {
                #参数限制表(限制参数内容,空表则不限制),'*':''表示匹配任意字符串,值不为空时任意字符串将被转变为这个值
            }
        },
    ]
    args = argDeal(session.current_arg_text.strip(), arglimit)
    if not args[0]:
        await session.send(args[1] + '=>' + args[2])
        return
    args = args[1]
    userinfo = args['userinfo']
    page = args['page']
    if page <= 0:
        await session.send("页码不正确!")
        return
    res = tweetListener.tweet_event_deal.getUserTSInCache(userinfo['id'])
    if res == None:
        await session.send("推文缓存中不存在此用户数据!")
        return
    tweets = res.tm
    ttr = {
        'none': '发推',
        'retweet': '转推',
        'quoted': '转评',
        'reply_to_status': '回复',
        'reply_to_user': '******'
    }
    msg = userinfo['name'] + "(" + userinfo['screen_name'] + ")的推文列表" + "\n"
    msg = msg + "推文缩写ID,标识,推文简写内容" + "\n"
    unit_cout = 0
    for i in range(len(tweets) - 1, -1, -1):
        if unit_cout >= (page - 1) * 5 and unit_cout < (page) * 5:
            msg = msg + ("被" if tweets[i]['trigger_remote'] else "") + ttr[
                tweets[i]['type']] + ',' + encode_b64(
                    tweets[i]['id']) + ',' + tweets[i]['text'][:20].replace(
                        "\n", " ") + "\n"
        unit_cout = unit_cout + 1
    totalpage = unit_cout // 5 + (0 if (unit_cout % 5 == 0) else 1)
    if unit_cout > 5 or page != 1:
        msg = msg + '页数:' + str(page) + '/' + str(totalpage) + ' '
    msg = msg + '总推文缓存数:' + str(unit_cout)
    await session.send(msg)
Ejemplo n.º 7
0
async def gettweettext(session: CommandSession):
    if not headdeal(session):
        return
    message_type = session.event['message_type']
    #group_id = (session.event['group_id'] if message_type == 'group' else None)
    #user_id = session.event['user_id']
    if perm_check(session, '-listener', user=True):
        await session.send('操作被拒绝,权限不足(p)')
        return
    if message_type == 'group' and not perm_check(session, 'listener'):
        await session.send('操作被拒绝,权限不足(g)')
        return
    logger.info(CQsessionToStr(session))

    def checkTweetId(a, ad):
        if a[:1] == '#':
            ta = a[1:]
            if not ta.isdecimal():
                return None
            res = mintweetID.find(lambda item, val: item[1] == val, int(ta))
            if res == None:
                return None
            return res[0]
        elif a.isdecimal() and int(a) > 1253881609540800000:
            return a
        else:
            res = decode_b64(a)
            if res == -1:
                return None
            return res

    arglimit = [{
        'name': 'tweet_id',  #参数名
        'des': '推特ID',  #参数错误描述
        'type':
        'int',  #参数类型int float str list dict (list与dict需要使用函数或正则表达式进行二次处理)
        'strip': True,  #是否strip
        'lower': False,  #是否转换为小写
        'default': None,  #默认值
        'func': checkTweetId,  #函数,当存在时使用函数进行二次处理
        're': None,  #正则表达式匹配(match函数)
        'vlimit': {
            #参数限制表(限制参数内容,空表则不限制),'*':''表示匹配任意字符串,值不为空时任意字符串将被转变为这个值
        }
    }]
    args = argDeal(session.current_arg_text.strip(), arglimit)
    if not args[0]:
        await session.send(args[1] + '=>' + args[2])
        return
    args = args[1]
    tweet_id = args['tweet_id']
    tweet = tweet_event_deal.tryGetTweet(tweet_id)
    if tweet == None:
        if ptwitter.ptwitterapps.hasApp():
            app = ptwitter.ptwitterapps.getAllow('statuses_lookup')
            if app == None:
                await session.send("速率限制,请稍后再试!")
                return
            res = app.statuses_lookup(id=tweet_id)
            if not res[0] or res[1] == []:
                await session.send("未查找到该推文!")
                return
            tweet = ptwitter.tweet_event_deal.deal_tweet(res[1][0])
        else:
            await session.send("未从缓存中查找到该推文!")
            return
    msg = "推文 " + encode_b64(tweet_id) + " 的内容如下:\n"
    msg = msg + tweet_event_deal.tweetToStr(tweet, '', 1, '')
    await session.send(msg)
Ejemplo n.º 8
0
    def tweetToStr(self,
                   tweetinfo,
                   nick,
                   upimg=config.pushunit_default_config['upimg'],
                   template_text=''):
        if nick == '':
            if tweetinfo['user']['name']:
                nick = tweetinfo['user']['name']
            else:
                nick = tweetinfo['user']['screen_name']
        temptweetID = mintweetID.find(lambda item, val: item[0] == val,
                                      tweetinfo['id'])
        #模版变量初始化
        template_value = {
            'tweet_id':
            tweetinfo['id_str'],  #推特ID
            'tweet_id_min':
            encode_b64(tweetinfo['id']),  #压缩推特id
            'tweet_id_temp': ('未生成' if temptweetID == None else
                              ('#' + str(temptweetID[1]))),  #临时推特id
            'tweet_nick':
            nick,  #操作人昵称
            'tweet_user_id':
            tweetinfo['user']['screen_name'],  #操作人ID
            'tweet_text':
            tweetinfo['text'],  #发送推特的完整内容
            'related_user_id':
            '当前模式不支持',  #关联用户ID
            'related_user_name':
            '当前模式不支持',  #关联用户昵称-昵称-昵称查询不到时为ID(被评论/被转发/被提及)
            'related_tweet_id':
            '当前模式不支持',  #关联推特ID(被评论/被转发)
            'related_tweet_id_min':
            '当前模式不支持',  #关联推特ID的压缩(被评论/被转发)
            'related_tweet_text':
            '当前模式不支持',  #关联推特内容(被转发或被转发并评论时存在)
            'media_img':
            '',  #媒体
        }

        #组装图片
        if upimg == 1:
            if 'extended_entities' in tweetinfo:
                mis = ''
                for media_unit in tweetinfo['extended_entities']:
                    #组装CQ码
                    #file_suffix = os.path.splitext(media_unit['media_url'])[1]
                    #s = s + '[CQ:image,timeout='+config.img_time_out+',file='+config.img_path+'tweet/' + media_unit['id_str'] + file_suffix + ']'
                    mis = mis + '[CQ:image,timeout=' + str(
                        config.img_time_out) + ',file=' + media_unit + ']'
                if mis != '':
                    mis = "\n媒体:" + str(len(
                        tweetinfo['extended_entities'])) + "个\n" + mis
            template_value['media_img'] = mis
        #生成模版类
        s = ""
        t = None
        if template_text == '':
            #默认模版
            if tweetinfo['type'] == 'none':
                deftemplate_none = "推特ID:$tweet_id_min,【$tweet_nick】发布了:\n$tweet_text\n$media_img\nhttps://twitter.com/$tweet_user_id/status/$tweet_id"
                deftemplate_none = deftemplate_none + "\n临时推文ID:$tweet_id_temp"
                t = tweetToStrTemplate(deftemplate_none)
            elif tweetinfo['type'] == 'retweet':
                deftemplate_another = "推特ID:$tweet_id_min,【$tweet_nick】转了推文:\n$tweet_text\n$media_img\nhttps://twitter.com/$tweet_user_id/status/$tweet_id"
                deftemplate_another = deftemplate_another + "\n临时推文ID:$tweet_id_temp"
                t = tweetToStrTemplate(deftemplate_another)
            elif tweetinfo['type'] == 'quoted':
                deftemplate_another = "推特ID:$tweet_id_min,【$tweet_nick】转发并评论了推文:\n$tweet_text\n====================\n$related_tweet_text\n$media_img\nhttps://twitter.com/$tweet_user_id/status/$tweet_id"
                deftemplate_another = deftemplate_another + "\n临时推文ID:$tweet_id_temp"
                t = tweetToStrTemplate(deftemplate_another)
            else:
                deftemplate_another = "推特ID:$tweet_id_min,【$tweet_nick】回复了推文:\n$tweet_text\n$media_img\nhttps://twitter.com/$tweet_user_id/status/$tweet_id"
                deftemplate_another = deftemplate_another + "\n临时推文ID:$tweet_id_temp"
                t = tweetToStrTemplate(deftemplate_another)
        else:
            #自定义模版
            template_text = template_text.replace("\\n", "\n")
            t = tweetToStrTemplate(template_text)

        #转换为字符串
        s = t.safe_substitute(template_value)
        return s