发送和接收信息
一旦你用 bot
启动你的 bot,grammY 将为你的监听器提供用户发送给你的 bot 的信息。 grammY 还提供了方便回复的方法。
接收信息
监听信息的最简单的方法,是这样:
bot.on("message", async (ctx) => {
const message = ctx.message; // 消息对象
});
2
3
当然,也有一些其他选择:
// 处理 commands, 比如 /start。
bot.command("start", async (ctx) => {/* ... */});
// 把信息文本与一个字符串或正则表达式相匹配。
bot.hears(/echo *+)?/, async (ctx) => {/* ... */});
2
3
4
5
你可以在你的代码编辑器中使用自动完成来查看所有可用的选项,或者查看 Composer
类的 所有方法。
了解更多 关于使用
bot
来筛选请求的内容。.on()
发送信息
Bot 可以使用的所有方法(重要的列表)都可以通过 bot
对象上使用。
// 向用户 12345 发送一条消息。
await bot.api.sendMessage(12345, "Hi!");
// 你也可以选择性地传入一个选项对象。
await bot.api.sendMessage(12345, "Hi!", {/* 其他选项 */});
// 检查已发送消息的消息对象。
const message = await bot.api.sendMessage(12345, "Hi!");
console.log(message.message_id);
// 获取有关 bot 本身的信息。
const me = await bot.api.getMe();
// 及其他
2
3
4
5
6
7
8
9
10
11
12
每个方法都接受一个可选的 Other
类型的选项对象,它允许你为你的 API 调用设置更多选项。 这些选项对象与上面列出的方法的选项对象完全对应。 你也可以在你的代码编辑器中使用自动完成来查看所有可用的选项,或者查看 Api
类的 所有方法。 本页的其余部分展示了一些相关示例。
同时,请看 下一节,以了解监听器的上下文对象如何使发送消息变得轻而易举!
发送带回复的信息
你可以使用 Telegram 的回复功能,使用 reply
指定要回复的信息标识符。
bot.hears("ping", async (ctx) => {
// `reply` 是同一聊天中 `sendMessage` 的别名(见下一节)。
await ctx.reply("pong", {
// `reply_parameters` 指定实际的回复哪一条信息。
reply_parameters: { message_id: ctx.msg.message_id },
});
});
2
3
4
5
6
7
注意,只通过
ctx
发送消息并不意味着你会自动回复任何东西。 相反,你应该为此指定.reply reply
。 函数_parameters ctx
只是.reply ctx
的一个别名,见 下一节。.api .send Message
回复参数还允许你回复其他聊天中的消息,以及引用消息的部分内容,甚至同时引用这两者! 请查看 Bot API 的 回复参数文档。
发送格式化的信息
查看 Telegram 团队编写的 Telegram Bot API 参考中的关于格式化选项的部分。
你可以通过 加粗 或 斜体 文字,使用超链接以及其他来发送消息。 有两种方法可以实现这一点,如 关于格式化选项的部分 所述,即 Markdown 和 HTML 。
Markdown
发送你的信息时,在文本中加入 markdown,并指定 parse
。
await bot.api.sendMessage(
12345,
"*Hi\\!* _Welcome_ to [grammY](https://grammy.dev)\\.",
{ parse_mode: "MarkdownV2" },
);
2
3
4
5
HTML
发送你的信息,文本中含有 HTML 元素,并指定 parse
。
await bot.api.sendMessage(
12345,
'<b>Hi!</b> <i>Welcome</i> to <a href="https://grammy.dev">grammY</a>.',
{ parse_mode: "HTML" },
);
2
3
4
5
发送文件
文件处理在 后面的章节 中有更深入的解释。
强行回复
如果你的 bot 在群聊中以 隐私模式 运行,这应该会很有用。
当你发送消息时,你可以让用户的 Telegram 客户端自动指定该消息为回复。 这意味着,用户会自动回复你 bot 的消息(除非他们手动删除回复)。 因此,即使在群聊中以 隐私模式 运行,你的 bot 也会收到用户的信息。
你可以像这样强行回复:
bot.command("start", async (ctx) => {
await ctx.reply("Hi! 我只能收到明确回复我的信息!", {
// 让 Telegram 客户端自动向用户显示回复界面。
reply_markup: { force_reply: true },
});
});
2
3
4
5
6