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("未查找到推文翻译")
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)
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)
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("未查找到推文翻译")
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, "错误,烤推服务异常!")
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)
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)
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