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

在哪里放置async函数可使用await发送合并内容的单条Discord响应

问题根源

你当前的写法是在cells.map()遍历中每次都单独调用message.reply(),所以每一行数据都会触发一次消息发送,自然就会拆成多条消息。另外Google Sheets的API官方支持Promise写法,你可以结合async/await把异步逻辑写得更清晰,避免回调嵌套。


修正后代码

const { google } = require('googleapis');
const keys = require('../Data/client_secret.json');
const Command = require("../Structures/Command");

const gclient = new google.auth.JWT(
    keys.client_email, 
    null, 
    keys.private_key,
    ['https://www.googleapis.com/auth/spreadsheets']
);

module.exports = new Command({
    name: "freeagents",
    description: "Potential free agents for next season.",
    async run(message, args, client) {
        try {
            // 授权改成await写法
            await gclient.authorize();
            console.log("Connected!");
            await gsrun(gclient);
        } catch (err) {
            console.log(err);
            return message.reply("拉取数据失败,请稍后再试");
        }

        async function gsrun(cl) {
            const gsapi = google.sheets({version:'v4', auth: cl });
            // 把回调改成await获取API返回结果
            const res = await gsapi.spreadsheets.values.get({
                spreadsheetId: "11e5nFk50pDztDLngwTSmossJaNXNAGOaLqaGDEwrbQM",
                range: 'Keepers!C1:F',
            });
            const rows = res.data.values;
    
            if (rows.length) {
                const cells = rows.filter(cell => cell[3]);
                // 先把所有行拼接成一个完整的字符串,换行分隔
                const replyContent = cells.map(cell => `${cell[0]}, ${cell[1]}`).join('\n');
                // 只调用一次reply发送所有内容
                return message.reply(replyContent);
            } else {
                console.log('No data found.');
                return message.reply('没有找到对应的自由球员数据');
            }
        }
    }
});

核心修改点

  • 把原来的回调写法全部替换成async/await写法,避免回调嵌套,逻辑更清晰
  • 不再在遍历中单独发送消息,而是先把所有需要返回的内容用map+join拼接成一个完整的字符串,统一调用一次message.reply发送
  • 增加了异常捕获,出错时也会给用户返回提示,不会没有响应

如果单条消息内容超过Discord的2000字符限制,可以把内容拆分后用分页或者嵌入(Embed)的形式发送,当前逻辑下内容少的场景直接拼接完全够用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:30:03