Python TelegramBot JobQueue 不执行返回

问题描述 投票:0回答:1

update.message.reply_text 工作正常,但我无法执行返回函数,因为它无法正确提取 context.user_data,因此它每 10 秒发送相同的消息

async def matching(update: Update, context: CallbackContext):
    async def check_who_likes(context: CallbackContext):

        try:
            conn = connection_pool.get_connection()
            cursor = conn.cursor()
            user_id = update.message.from_user.id
            cursor.execute("SELECT LikeUserID FROM Likes WHERE LikedUserID = %s", (user_id,))
            likes = cursor.fetchall()
            result = len(likes)
            if len(likes) > 0:
                await update.message.reply_text(f"{len(likes)}")
                context.user_data['result'] = True
        except Exception as e:
            pass
        finally:
            cursor.close()
            conn.close()
            await asyncio.sleep(1)


    job = context.job_queue.run_repeating(check_who_likes, interval=10, first=0,data={'result': None})
    await job.run(context.application)
    result = job.data['result']
    if result:
        return SHOW_WHO_LIKES
python telegram telegram-bot python-telegram-bot
1个回答
0
投票

下面更正后的代码将数据拉出来并赋值为变量,但是这段代码的问题是它直接从SHOW_WHO_LIKES执行操作并返回到旧的匹配

注意:在SHOW_WHO_LIKES中,仅向用户发送一条消息,其中没有返回。

async def matching(update: Update, context: CallbackContext):
    async def check_who_likes(context: CallbackContext):

        try:
            conn = connection_pool.get_connection()
            cursor = conn.cursor()
            user_id = update.message.from_user.id
            cursor.execute("SELECT LikeUserID FROM Likes WHERE LikedUserID = %s", (user_id,))
            likes = cursor.fetchall()
            result = len(likes)
            if len(likes) > 0:
                await update.message.reply_text(f"{len(likes)}")
                context.job.data = True
        except Exception as e:
            pass
        finally:
            cursor.close()
            conn.close()
            await asyncio.sleep(1)

    job = context.job_queue.run_repeating(check_who_likes, interval=10, first=0, data=None)
    await job.run(context.application)
    result = job.data
    if result:
        return SHOW_WHO_LIKES
© www.soinside.com 2019 - 2024. All rights reserved.