You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将数据库查询结果拆分为每条含3条记录的多条聊天消息发送

数据库查询结果拆分多条消息发送实现方案
  • 第一步修改SQL语句,移除原有的LIMIT 3限制,拉取所有匹配的记录
  • 第二步对查询返回的记录数组做分片处理,每3条分为一组
  • 第三步遍历分片后的数组,依次调用发送消息接口推送每组内容
  • 注意:原代码直接拼接用户输入到SQL语句存在SQL注入风险,建议替换为sequelize的参数化查询写法

修改后的实现代码如下:

bot.on('message', async (message) => {
    const {text, chat} = message;
    const {id: chatId} = chat;

    try {
        // 参数化查询避免SQL注入,同时移除LIMIT限制拉取所有匹配记录
        const [rows] = await sequelize.query(
            `SELECT book FROM books t WHERE (t.*)::text LIKE ?`,
            {replacements: [`%${text}%`]}
        );

        if (rows.length) {
            // 数组分片:每3条分为一组
            const chunkSize = 3;
            const recordChunks = [];
            for (let i = 0; i < rows.length; i += chunkSize) {
                recordChunks.push(rows.slice(i, i + chunkSize));
            }

            // 遍历分片依次发送消息,若要避免触发平台限流可在两次发送之间加延时
            for (const chunk of recordChunks) {
                const response = chunk.map(row => row.book).join("\n");
                await bot.sendMessage(chatId, response);
                // 可选:每次发送后等待500毫秒再发下一条,取消注释即可生效
                // await new Promise(resolve => setTimeout(resolve, 500));
            }
        } else {
            await bot.sendMessage(chatId, '未找到匹配的书籍');
        }
    } catch (error) {
        console.error(error.message);
        await bot.sendMessage(chatId, 'book not found');
    }
})

内容的提问来源于stack exchange,提问作者anonym

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 23:45:05