Пример #1
0
 def do_add_mine(update: Update, _: CallbackContext) -> None:
     query = update.callback_query
     query.answer()
     query.delete_message()
     code = query.data
     info("用户" + update.effective_user.name + "添加了一条自选,代码为:" + code)
     user_id = update.effective_user.id
     session = requests.session()
     session.get("https://xueqiu.com/k?q=" + code, headers=header)
     res = session.get(
         "https://stock.xueqiu.com/v5/stock/batch/quote.json?symbol=" +
         code,
         headers=header)
     json_str = res.json()
     name = json_str['data']['items'][0]['quote']['name']
     if sql_funcs.sql_insert_mine(user_id, code, name):
         user = update.effective_user.name + ":\n"
         info("用户" + update.effective_user.name + "添加了一条自选成功,代码为:" + code)
         query.bot.send_message(chat_id=update.effective_chat.id,
                                text=user + "添加成功")
     else:
         user = update.effective_user.name + ":\n"
         warning("用户" + update.effective_user.name + "添加自选失败,代码为:" + code)
         query.bot.send_message(
             chat_id=update.effective_chat.id,
             text=user +
             "添加失败,您可能已经添加该股票或您已经达到自选添加上限。(上限为%s)" % max_mine_stock)
     return ConversationHandler.END
Пример #2
0
 def bili(update, context):
     try:
         try:
             index = str(random.randint(1, 50))
             res = requests.get(
                 "https://api.bilibili.com/x/web-interface/popular?ps=1&pn="
                 + index)
             json_res = json.loads(res.text)
             title = json_res["data"]["list"][0]["title"]
             pic = json_res["data"]["list"][0]["pic"]
             up = json_res["data"]["list"][0]["owner"]["name"]
             link = json_res["data"]["list"][0]["short_link"]
             bv = json_res["data"]["list"][0]["bvid"]
             localtime = time.asctime(time.localtime(time.time()))
             user = update.effective_user.name + ":\n"
             text = user + '北京时间:' + localtime + "\n哔哩哔哩随机热门第" + index + ":" \
                    + "\n视频标题:" + title \
                    + "\nUP主:" + up \
                    + "\nBV号:" + bv \
                    + "\n视频链接:" + link
             context.bot.send_message(chat_id=update.effective_chat.id,
                                      text=text)
             info("bili模块:" + text)
             context.bot.send_photo(chat_id=update.effective_chat.id,
                                    photo=pic)
             info("bili模块:" + user + pic)
         except Exception as e:
             user = update.effective_user.name + ":\n"
             text = user + "服务器错误,错误原因:" + str(e)
             context.bot.send_message(chat_id=update.effective_chat.id,
                                      text=text)
             error("bili模块:" + text)
     except:
         error("bili模块异常")
Пример #3
0
 def sentence_input(update: Update, _: CallbackContext) -> int:
     try:
         keyboard = [[
             InlineKeyboardButton("动画", callback_data='a'),
             InlineKeyboardButton("漫画", callback_data='b'),
             InlineKeyboardButton("游戏", callback_data='c'),
             InlineKeyboardButton("文学", callback_data='d'),
         ],
                     [
                         InlineKeyboardButton("原创", callback_data='e'),
                         InlineKeyboardButton("网络", callback_data='f'),
                         InlineKeyboardButton("其他", callback_data='g'),
                         InlineKeyboardButton("影视", callback_data='h'),
                     ],
                     [
                         InlineKeyboardButton("诗词", callback_data='i'),
                         InlineKeyboardButton("网易云", callback_data='j'),
                         InlineKeyboardButton("哲学", callback_data='k'),
                         InlineKeyboardButton("抖机灵", callback_data='l'),
                     ]]
         reply_markup = InlineKeyboardMarkup(keyboard)
         user = update.effective_user.name + ":\n"
         text = user + '请选择类型'
         info("一言模块:" + text)
         update.message.reply_text(
             text,
             reply_markup=reply_markup,
         )
     except:
         error("一言模块-类型选择器异常")
     return SENTENCE
Пример #4
0
 def stock_func(update: Update, _: CallbackContext) -> int:
     try:
         query = update.callback_query
         query.answer()
         query.delete_message()
         if query.data == "自选":
             info("股票模块-功能选择器:" + update.effective_user.name + "选择了自选功能")
             keyboard = [[
                 InlineKeyboardButton("添加自选", callback_data='添加自选'),
                 InlineKeyboardButton("删除自选", callback_data='删除自选'),
             ], [InlineKeyboardButton("查看自选", callback_data='查看自选')],
                         [
                             InlineKeyboardButton("列出全部自选",
                                                  callback_data='列出全部自选')
                         ]]
             reply_markup = InlineKeyboardMarkup(keyboard)
             user = update.effective_user.name + ":\n"
             query.bot.send_message(
                 chat_id=update.effective_chat.id,
                 text=user + "请选择功能",
                 reply_markup=reply_markup,
             )
             return STOCK_MINE
         elif query.data == "搜索":
             user = update.effective_user.name + ":\n"
             info("股票模块-功能选择器:" + update.effective_user.name + "选择了搜索功能")
             query.bot.send_message(chat_id=update.effective_chat.id,
                                    text=user + "请输入搜索词")
             return STOCK_SEARCH
     except:
         error("股票模块-自选功能选择器异常")
         return ConversationHandler.END
Пример #5
0
 def start(update: Update, context):
     try:
         user = update.effective_user.name + ":\n"
         info("用户:" + update.effective_user.name + "开始了与机器人的交流")
         context.bot.send_message(chat_id=update.effective_chat.id,
                                  text=user +
                                  "欢迎使用Utopia机器人,请使用 /help 查看全部指令")
     except:
         error("无法发送开始信息,请检查网络")
Пример #6
0
 def get_me(update, context):
     try:
         user_id = update.effective_user.id
         user_name = update.effective_user.name
         info("用户名为" + user_name + "的用户获取了他的ID:" + str(user_id))
         text = user_name + ":\n" + "您的ID为" + str(user_id)
         context.bot.send_message(chat_id=update.effective_chat.id,
                                  text=text)
     except Exception as e:
         error("获取ID模块异常:" + str(e))
Пример #7
0
 def stock_input(update: Update, _: CallbackContext) -> int:
     try:
         keyboard = [[
             InlineKeyboardButton("自选", callback_data='自选'),
             InlineKeyboardButton("搜索", callback_data='搜索'),
         ]]
         reply_markup = InlineKeyboardMarkup(keyboard)
         user = update.effective_user.name + ":\n"
         info("股票模块-方法选择器:" + update.effective_user.name + "开始了股票功能")
         update.message.reply_text(
             user + '请选择方法',
             reply_markup=reply_markup,
         )
     except:
         error("股票模块-方法选择器异常")
     return STOCK_FUNC
Пример #8
0
 def setu_input(update: Update, _: CallbackContext):
     try:
         keyboard = [[
             InlineKeyboardButton("R18", callback_data='R18'),
             InlineKeyboardButton("非R18", callback_data='非R18'),
         ]]
         reply_markup = InlineKeyboardMarkup(keyboard)
         user = update.effective_user.name + ":\n"
         text = user + '请选择您需要的是R18还是非R18涩图'
         info("涩图模块:" + text)
         update.message.reply_text(
             text,
             reply_markup=reply_markup,
         )
     except:
         error("涩图模块-R18选择器异常")
     return SETU
Пример #9
0
    def admin(update: Update, _: CallbackContext) -> None:
        try:
            query = update.callback_query
            query.answer()
            query.delete_message()
            type = query.data
            if type == "数据库":
                keyboard = [[
                    InlineKeyboardButton("获取数据库信息", callback_data='获取数据库信息')
                ], [InlineKeyboardButton("重置数据库", callback_data='重置数据库')]]
                reply_markup = InlineKeyboardMarkup(keyboard)
                user = update.effective_user.name
                text = user + ":\n" + '请选择数据库管理功能'
                info("管理员模块:一名管理员" + user + "选择了数据库管理功能")
                query.bot.send_message(
                    chat_id=update.effective_chat.id,
                    text=text,
                    reply_markup=reply_markup,
                )
                return DATABASE
            elif type == "日志":
                keyboard = [
                    [InlineKeyboardButton("完整日志", callback_data='完整日志')],
                    [InlineKeyboardButton("信息日志", callback_data='信息日志')],
                    [InlineKeyboardButton("警告日志", callback_data='警告日志')],
                    [InlineKeyboardButton("错误日志", callback_data='错误日志')]
                ]
                reply_markup = InlineKeyboardMarkup(keyboard)
                user = update.effective_user.name
                text = user + ":\n" + '请选择日志类型功能'
                info("管理员模块:一名管理员" + user + "选择了日志管理功能")
                query.bot.send_message(
                    chat_id=update.effective_chat.id,
                    text=text,
                    reply_markup=reply_markup,
                )
                return LOG

        except Exception as e:
            error("管理员模块异常:" + str(e))
            return ConversationHandler.END
Пример #10
0
 def setu(update: Update, _: CallbackContext) -> None:
     try:
         query = update.callback_query
         query.answer()
         query.delete_message()
         url = ""
         r18 = 0
         if query.data == "R18":
             r18 = 1
             info("涩图模块:R18选择:是")
         else:
             info("涩图模块:R18选择:否")
         try:
             res = requests.get("https://api.lolicon.app/setu/?r18=" +
                                str(r18) + "&apikey=" + config.setu_Token)
             json_str = json.loads(res.text)
             if json_str['code'] == 401:
                 user = update.effective_user.name + ":\n"
                 text = user + "API接口超过调用限制(每令牌每天限制300)或API令牌被封禁"
                 warning("涩图模块" + text)
                 query.bot.send_message(chat_id=update.effective_chat.id,
                                        text=text)
             url = json_str['data'][0]['url']
             author = json_str['data'][0]['author']
             pid = json_str['data'][0]['pid']
             title = json_str['data'][0]['title']
             is_r = "否"
             if r18 != 0:
                 is_r = "是"
             user = update.effective_user.name + ":\n"
             text = user + "图片信息:\n" \
                           "作者:" + str(author) \
                    + "\n图片PID:" + str(pid) \
                    + "\n图片标题:" + str(title) \
                    + "\n是否R18:" + is_r
             info("涩图模块:" + text)
             query.bot.send_message(chat_id=update.effective_chat.id,
                                    text=text)
             info("涩图模块:发送图片" + url)
             query.bot.send_photo(chat_id=update.effective_chat.id,
                                  photo=url)
         except Exception as e:
             user = update.effective_user.name + ":\n"
             text = user + "服务器错误,错误原因:" + str(e) + "\n请自行访问链接:" + url
             error("涩图模块:" + text)
             query.bot.send_message(chat_id=update.effective_chat.id,
                                    text=text)
     except:
         error("涩图模块-涩图发送方法异常")
     return ConversationHandler.END
Пример #11
0
 def sentence(update: Update, _: CallbackContext) -> None:
     try:
         query = update.callback_query
         query.answer()
         query.delete_message()
         type = query.data
         types = {
             "a": "动画",
             "b": "漫画",
             "c": "游戏",
             "d": "文学",
             "e": "原创",
             "f": "来自网络",
             "g": "其他",
             "h": "影视",
             "i": "诗词",
             "j": "网易云",
             "k": "哲学",
             "l": "抖机灵"
         }
         type_name = types[query.data]
         try:
             res = requests.get("https://v1.hitokoto.cn?c=" + type)
             json_res = json.loads(res.text)
             s = json_res['hitokoto']
             author = json_res['from_who']
             if author == "null" or author is None:
                 author = "匿名"
             user = update.effective_user.name + ":\n"
             text = user + "类型:" + type_name + "\n" + s + "\n作者:" + author
             info("一言模块:" + text)
             query.bot.send_message(chat_id=update.effective_chat.id,
                                    text=text)
         except Exception as e:
             user = update.effective_user.name + ":\n"
             query.bot.send_message(chat_id=update.effective_chat.id,
                                    text=user + "服务器错误,错误原因" + str(e))
     except:
         error("一言模块:发送方法异常")
     return ConversationHandler.END
Пример #12
0
 def zhihu(update, context):
     try:
         res = requests.get(
             "https://news-at.zhihu.com/api/3/stories/latest",
             headers=header)
         json_str = json.loads(res.text)
         index = random.randint(0, len(json_str["stories"]) - 1)
         title = json_str["stories"][index]["title"]
         url = json_str["stories"][index]["url"]
         localtime = time.asctime(time.localtime(time.time()))
         user = update.effective_user.name + ":\n"
         text = user + '北京时间:' + localtime + " 知乎日报" \
                + "\n文章标题:" + title \
                + "\n文章链接:" + url
         info("知乎日报模块:" + text)
         context.bot.send_message(chat_id=update.effective_chat.id,
                                  text=text)
     except Exception as e:
         user = update.effective_user.name + ":\n"
         error("知乎日报模块:服务器获取热搜异常或发送消息异常")
         context.bot.send_message(chat_id=update.effective_chat.id,
                                  text=user + "服务器错误,错误原因:" + str(e))
Пример #13
0
 def help(update, context):
     try:
         user = update.effective_user.name + ":\n"
         info("帮助模块:" + user + "获取帮助列表")
         context.bot.send_message(
             chat_id=update.effective_chat.id,
             text=user + "/start - 开始\n"
                         "/help - 获得全部指令帮助\n"
                         "/cancel - 终止当前进行中的任务(当机器人不响应的时候请选择)\n"
                         "/stock - 股票信息查询\n"
                         "/stock_mine - 快速查询自选股\n"
                         "/setu - 获取一张随机涩图\n"
                         "/sentence - 一言:获取随机一句名句\n"
                         "/weibo - 获取微博热搜\n"
                         "/zhihu - 随机获取一条知乎日报\n"
                         "/bili - 随机获取一条bilibili热榜视频\n"
                         "/english - 随机获取一条每日英语\n"
                         "/get_me - 获取自己的ID\n"
                         "/admin - 管理员功能"
         )
     except:
         error("帮助模块异常")
Пример #14
0
 def admin_select(update: Update, _: CallbackContext) -> int:
     try:
         id = update.effective_user.id
         if str(id) not in admin_id:
             user = update.effective_user.name
             warning("管理员模块:一名非管理员用户" + user + "请求访问管理功能")
             text = user + ":\n" + "您不是管理员,没有本指令权限!\n" \
                                   "如果您是管理员,请先将您的ID添加如配置文件"
             update.message.reply_text(text)
             return ConversationHandler.END
         keyboard = [[InlineKeyboardButton("数据库", callback_data='数据库')],
                     [InlineKeyboardButton("日志", callback_data='日志')]]
         reply_markup = InlineKeyboardMarkup(keyboard)
         user = update.effective_user.name
         text = user + ":\n" + '请选择管理功能'
         info("管理员模块:一名管理员" + user + "选择了管理员功能")
         update.message.reply_text(
             text,
             reply_markup=reply_markup,
         )
         return ADMIN_SELECT
     except Exception as e:
         error("管理员模块异常:" + str(e))
Пример #15
0
 def db_management_select(update: Update, _: CallbackContext):
     try:
         query = update.callback_query
         query.answer()
         query.delete_message()
         type = query.data
         if type == "获取数据库信息":
             user = update.effective_user.name
             info("一名管理员" + user + "获取了数据库信息")
             text = user + ":\n" + get_database_message()
             query.bot.send_message(chat_id=update.effective_chat.id,
                                    text=text)
             return ConversationHandler.END
         elif type == "重置数据库":
             user = update.effective_user.name
             info("一名管理员" + user + "选择了重置数据库,进入验证阶段")
             text = user + ":\n请输入您的ID来确认重置数据库"
             query.bot.send_message(chat_id=update.effective_chat.id,
                                    text=text)
         return DELETE_DATABASE
     except Exception as e:
         error("数据库管理模块-操作选择接收异常:" + str(e))
         return ConversationHandler.END
Пример #16
0
 def weibo(update, context):
     try:
         res = requests.get("https://s.weibo.com/top/summary")
         soup = BeautifulSoup(res.text)
         res = ""
         for i in range(len(soup.find_all("td", class_="td-02"))):
             if i == 0:
                 res += ("置顶热搜:" + soup.find_all("td", class_="td-02")[i].a.get_text() + '\n')
             else:
                 res += ("热搜第" + str(i) + ":" + soup.find_all("td", class_="td-02")[i].a.get_text() + '\n')
         localtime = time.asctime(time.localtime(time.time()))
         res += ('北京时间:' + localtime)
         user = update.effective_user.name+":\n"
         info("微博热搜模块:"+user+"获取了当前热搜")
         context.bot.send_message(
             chat_id=update.effective_chat.id,
             text=user + res)
     except Exception as e:
         user = update.effective_user.name+":\n"
         error("微博热搜模块:服务器获取热搜异常或发送消息异常")
         context.bot.send_message(
             chat_id=update.effective_chat.id,
             text=user + "服务器错误,错误原因:" + str(e)
         )
Пример #17
0
 def do_delete_mine(update: Update, _: CallbackContext) -> None:
     query = update.callback_query
     query.answer()
     query.delete_message()
     code = query.data
     info("用户" + update.effective_user.name + "删除了一条自选,代码为:" + code)
     user_id = update.effective_user.id
     if sql_funcs.sql_delete_mine(user_id, code):
         user = update.effective_user.name + ":\n"
         info("用户" + update.effective_user.name + "删除了一条自选成功,代码为:" + code)
         query.bot.send_message(chat_id=update.effective_chat.id,
                                text=user + "删除成功")
     else:
         user = update.effective_user.name + ":\n"
         info("用户" + update.effective_user.name + "删除了一条自选失败,代码为:" + code)
         query.bot.send_message(chat_id=update.effective_chat.id,
                                text=user + "删除失败")
     return ConversationHandler.END
Пример #18
0
 def english(update, context):
     try:
         end_time = datetime.datetime.now()
         start_time = datetime.datetime.now() + datetime.timedelta(
             days=-600)
         a1 = tuple(start_time.timetuple()[0:9])
         a2 = tuple(end_time.timetuple()[0:9])
         start = time.mktime(a1)
         end = time.mktime(a2)
         t = random.randint(int(start), int(end))
         date_touple = time.localtime(t)
         date = time.strftime("%Y-%m-%d", date_touple)
         res = requests.get(
             "http://sentence.iciba.com/index.php?c=dailysentence&m=getdetail&title="
             + date)
         json_str = json.loads(res.text)
         chinese = json_str["note"]
         english = json_str["content"]
         pic = json_str["picture2"]
         voice = json_str["tts"]
         user = update.effective_user.name + ":\n"
         text=user + "英文原文:" + english\
                  + "\n翻译:" + chinese\
                  + "\n封面:"
         info("每日英语模块:" + text)
         context.bot.send_message(chat_id=update.effective_chat.id,
                                  text=text)
         info("每日英语模块:发送图片" + pic)
         context.bot.send_photo(chat_id=update.effective_chat.id, photo=pic)
         info("每日英语模块:发送音频" + voice)
         context.bot.send_voice(chat_id=update.effective_chat.id,
                                voice=voice)
     except Exception as e:
         user = update.effective_user.name + ":\n"
         text = user + "服务器错误,错误原因:" + str(e)
         error("每日英语模块:" + text)
         context.bot.send_message(chat_id=update.effective_chat.id,
                                  text=text)
Пример #19
0
async def login(request: web.Request) -> web.Response:
    assert isinstance(request, web.Request)
    logger.info(f'{request.method} -> {request.path}')
    if request.method == 'POST':
        post_data = await request.post()
        login_form = LoginForm(post_data)
        if login_form.validate():
            logger.info('Форма валидна')
            response = web.HTTPFound('/')
            response.set_cookie(
                'hash', get_user_hash(login_form.login, login_form.password))
            return response

    else:
        login_form = LoginForm()

    logger.info(
        f'{(login_form.errors, login_form.login, login_form.password)}')

    return render_template('dutymanager/login.html', request, {
        'title': "Вход",
        "login_form": login_form
    })
Пример #20
0
async def index(request: web.Request) -> web.Response:
    assert isinstance(request, web.Request)
    logger.info(f'{request.method} -> {request.path}')
    return render_template('dutymanager/index.html', request,
                           {"title": "Главная"})
Пример #21
0
    def display_stock(code, update: Update):
        query = update.callback_query
        try:
            session = requests.session()
            session.get("https://xueqiu.com/k?q=" + code, headers=header)
            res = session.get(
                "https://stock.xueqiu.com/v5/stock/batch/quote.json?symbol=" +
                code,
                headers=header)
            json_str = res.json()
            # 地区
            region = json_str['data']['items'][0]['market']['region']
            # 交易状态
            status = json_str['data']['items'][0]['market']['status']
            # 时区
            time_zone = json_str['data']['items'][0]['market']['time_zone']
            # 交易市场
            exchange = json_str['data']['items'][0]['quote']['exchange']
            # 货币种类
            currency = json_str['data']['items'][0]['quote']['currency']
            # 股票名
            name = json_str['data']['items'][0]['quote']['name']
            # 数据时间
            dt = json_str['data']['items'][0]['quote']['time']
            if dt is not None:
                time_local = time.localtime(dt / 1000)
                dt = time.strftime("%Y-%m-%d %H:%M:%S", time_local)
            # 现价
            current = json_str['data']['items'][0]['quote']['current']
            # 今开
            start_price = json_str['data']['items'][0]['quote']['open']
            # 昨收
            end_price = json_str['data']['items'][0]['quote']['last_close']
            # 跌涨数
            cost = 0
            if current is not None and end_price is not None:
                cost = current - end_price
            # 跌涨率%
            rate = 0
            if cost is not None and end_price is not None and cost != 0:
                rate = cost / end_price

            cost = float(format(cost, ".2f"))
            if cost > 0:
                cost = "+" + str(cost)
            rate = float(format(rate * 100, ".2f"))
            if rate > 0:
                rate = "+" + str(rate)
            # 最高
            high = json_str['data']['items'][0]['quote']['high']
            # 最低
            low = json_str['data']['items'][0]['quote']['low']
            # 成交量(万手)
            deal = json_str['data']['items'][0]['quote']['volume']
            if deal is not None:
                deal = format(float(format(deal / 10000, ".2f")), ",")
            # 成交额(万元)
            amount = json_str['data']['items'][0]['quote']['amount']
            if amount is not None:
                amount = format(int(format(amount / 10000, ".0f")), ",")
            # 换手
            turnover_rate = json_str['data']['items'][0]['quote'][
                'turnover_rate']
            # 振幅
            amplitude = json_str['data']['items'][0]['quote']['amplitude']
            # 市值(万元)
            total_price = json_str['data']['items'][0]['quote'][
                'market_capital']
            if total_price is not None:
                total_price = format(int(format(total_price / 10000, ".0f")),
                                     ",")
            # 总股本(万元)
            total_shares = json_str['data']['items'][0]['quote'][
                'total_shares']
            if total_price is not None:
                total_shares = format(int(format(total_shares / 10000, ".0f")),
                                      ",")
            text = "股票名称:%s\n" % name
            text += "股票代码:%s\n" % code
            text += "地区:%s\n" % region
            text += "时区:%s\n" % time_zone
            text += "交易市场:%s\n" % exchange
            text += "货币种类:%s\n" % currency
            text += "交易状态:%s\n" % status
            text += "数据时间(当地):%s\n" % dt
            text += "现价:%s\n" % current
            text += "今开:%s\n" % start_price
            text += "昨收:%s\n" % end_price
            text += "跌涨:%s\n" % cost
            text += "跌涨率:%s%%\n" % rate
            text += "最高:%s\n" % high
            text += "最低:%s\n" % low
            text += "成交量:%s万手\n" % deal
            text += "成交额:%s万\n" % amount
            text += "换手:%s%%\n" % turnover_rate
            text += "振幅:%s%%\n" % amplitude
            text += "市值:%s万\n" % total_price
            text += "总股本:%s万" % total_shares
            user = update.effective_user.name + ":\n"
            info("股票模块-自选股-自选股具体信息:用户" + update.effective_user.name +
                 "打印了一条股票具体信息,股票代码:" + code)
            query.bot.send_message(chat_id=update.effective_chat.id,
                                   text=user + text)
        except Exception as e:
            user = update.effective_user.name + ":\n"
            text = user + "服务器错误,错误原因:" + str(e)
            error("股票模块-自选股-自选股具体信息:" + text)
            query.bot.send_message(chat_id=update.effective_chat.id, text=text)
Пример #22
0
    def fast_list_all_mine(update, context):
        try:
            stocks = sql_funcs.sql_select_all_mine(update.effective_user.id)
            if stocks is None:
                user = update.effective_user.name + ":\n"
                text = user + "数据库中没有您的自选信息"
                warning("股票模块-快速打印简报方法:" + text)
                context.bot.send_message(chat_id=update.effective_chat.id,
                                         text=text)
            else:
                text = ""
                for i in stocks:
                    try:
                        session = requests.session()
                        session.get("https://xueqiu.com/k?q=" + i[1],
                                    headers=header)
                        res = session.get(
                            "https://stock.xueqiu.com/v5/stock/batch/quote.json?symbol="
                            + i[1],
                            headers=header)
                        json_str = res.json()
                        # 股票名
                        name = json_str['data']['items'][0]['quote']['name']
                        # 数据时间
                        dt = json_str['data']['items'][0]['quote']['time']
                        if dt is not None:
                            time_local = time.localtime(dt / 1000)
                            dt = time.strftime("%Y-%m-%d %H:%M:%S", time_local)
                        # 交易状态
                        status = json_str['data']['items'][0]['market'][
                            'status']

                        # 现价
                        current = json_str['data']['items'][0]['quote'][
                            'current']
                        # 昨收
                        end_price = json_str['data']['items'][0]['quote'][
                            'last_close']
                        # 跌涨数
                        cost = 0
                        if current is not None and end_price is not None:
                            cost = current - end_price
                        # 跌涨率%
                        rate = 0
                        if cost is not None and end_price is not None and cost != 0:
                            rate = cost / end_price

                        cost = float(format(cost, ".2f"))
                        if cost > 0:
                            cost = "+" + str(cost)
                        rate = float(format(rate * 100, ".2f"))
                        if rate > 0:
                            rate = "+" + str(rate)

                        text += "%s" % dt
                        text += "(%s)\n" % status
                        text += "%s " % name
                        text += "(%s)\n" % i[1]
                        text += "现价:%s " % current
                        text += "(%s " % cost
                        text += ",%s%%)\n\n" % rate

                    except Exception as e:
                        user = update.effective_user.name + ":\n"
                        text = user + "服务器错误,错误原因:" + str(e)
                        error("股票模块-快速打印简报方法:" + text)
                        context.bot.send_message(
                            chat_id=update.effective_chat.id, text=text)
                        return
                info("股票模块-快速打印简报方法:成功获取用户" + update.effective_user.name +
                     "的" + str(len(stocks)) + "条股票数据")
                user = update.effective_user.name + ":\n"
                context.bot.send_message(chat_id=update.effective_chat.id,
                                         text=user + text)
        except:
            error("股票模块-快速打印简报方法异常")
Пример #23
0
    def stock_mine(update: Update, _: CallbackContext) -> int:
        try:
            query = update.callback_query
            query.answer()
            query.delete_message()
            if query.data == "添加自选":
                user = update.effective_user.name + ":\n"
                info("股票模块-自选股功能-自选股功能选择处理器:用户" + update.effective_user.name +
                     "选择添加一条自选")
                query.bot.send_message(chat_id=update.effective_chat.id,
                                       text=user + "请输入搜索词")
                return STOCK_ADD_MINE
            elif query.data == "删除自选":
                info("股票模块-自选股功能-自选股功能选择处理器:用户" + update.effective_user.name +
                     "选择删除一条自选")
                if not stock_list_mine(update):
                    return ConversationHandler.END
                else:
                    return STOCK_DELETE_MINE
            elif query.data == "查看自选":
                info("股票模块-自选股功能-自选股功能选择处理器:用户" + update.effective_user.name +
                     "选择查看全部自选")
                if not stock_list_mine(update):
                    return ConversationHandler.END
                else:
                    return STOCK_SELECT
            elif query.data == "列出全部自选":
                info("股票模块-自选股功能-自选股功能选择处理器:用户" + update.effective_user.name +
                     "选择列出全部自选简报")
                stocks = sql_funcs.sql_select_all_mine(
                    update.effective_user.id)
                if stocks is None:
                    user = update.effective_user.name + ":\n"

                    query.bot.send_message(chat_id=update.effective_chat.id,
                                           text=user + "数据库中没有您的自选信息")
                else:
                    stocks = sql_funcs.sql_select_all_mine(
                        update.effective_user.id)
                    if stocks is None:
                        user = update.effective_user.name + ":\n"

                        query.bot.send_message(
                            chat_id=update.effective_chat.id,
                            text=user + "数据库中没有您的自选信息")
                    else:
                        text = ""
                        for i in stocks:
                            try:
                                session = requests.session()
                                session.get("https://xueqiu.com/k?q=" + i[1],
                                            headers=header)
                                res = session.get(
                                    "https://stock.xueqiu.com/v5/stock/batch/quote.json?symbol="
                                    + i[1],
                                    headers=header)
                                json_str = res.json()
                                # 股票名
                                name = json_str['data']['items'][0]['quote'][
                                    'name']
                                # 数据时间
                                dt = json_str['data']['items'][0]['quote'][
                                    'time']
                                if dt is not None:
                                    time_local = time.localtime(dt / 1000)
                                    dt = time.strftime("%Y-%m-%d %H:%M:%S",
                                                       time_local)
                                # 交易状态
                                status = json_str['data']['items'][0][
                                    'market']['status']

                                # 现价
                                current = json_str['data']['items'][0][
                                    'quote']['current']
                                # 昨收
                                end_price = json_str['data']['items'][0][
                                    'quote']['last_close']
                                # 跌涨数
                                cost = 0
                                if current is not None and end_price is not None:
                                    cost = current - end_price
                                # 跌涨率%
                                rate = 0
                                if cost is not None and end_price is not None and cost != 0:
                                    rate = cost / end_price

                                cost = float(format(cost, ".2f"))
                                if cost > 0:
                                    cost = "+" + str(cost)
                                rate = float(format(rate * 100, ".2f"))
                                if rate > 0:
                                    rate = "+" + str(rate)

                                text += "%s" % dt
                                text += "(%s)\n" % status
                                text += "%s " % name
                                text += "(%s)\n" % i[1]
                                text += "现价:%s " % current
                                text += "(%s " % cost
                                text += ",%s%%)\n\n" % rate

                            except Exception as e:
                                user = update.effective_user.name + ":\n"

                                query.bot.send_message(
                                    chat_id=update.effective_chat.id,
                                    text=user + "服务器错误,错误原因:" + str(e))
                                return ConversationHandler.END

                        user = update.effective_user.name + ":\n"
                        query.bot.send_message(
                            chat_id=update.effective_chat.id, text=user + text)
                    return ConversationHandler.END
        except:
            error("股票模块-自选股功能-自选股功能选择处理器异常")
            return ConversationHandler.END
Пример #24
0
 def add_mine(update: Update, _: CallbackContext) -> int:
     info("用户" + update.effective_user.name + "选择了添加自选")
     search_func(update)
     return STOCK_DO_ADD_MINE
Пример #25
0
def recreate(data: dict = None):
    if data is None:
        data = default_data
    with open("settings.json", mode="w") as file:
        file.write(json.dumps(data, indent=2))
        logger.info("Recreated datafile \"settings.json\".")
Пример #26
0
# 加载模块
import module.stocks as stocks
import module.start as start
import module.help as help
import module.setu as setu
import module.sentence as sentence
import module.bili as bili
import module.weibo as weibo
import module.english as english
import module.zhihu as zhihu
import module.get_me as get_me
import module.admin as admin

logger_start_check()
info("主进程:日志文件检查完成")
info("主进程:开始进行数据库检查")
# 数据库与Token检查
if not sql_funcs.sql_start_check():
    error("主进程:数据库创建或读取错误,请检查")
    warning("主进程:程序由于异常导致退出")
    exit(1)
info("主进程:数据库检查完成")

if config.Token == "":
    error("主进程:配置文件错误,请先在config.py中输入对应Token后使用")
    warning("主进程:程序由于异常导致退出")
    exit(1)

if len(config.admin_id) == 0:
    warning("您未添加管理员,管理员功能将不可用")