Telegraf 机器人动作倍增

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

请告诉我是否可以一次跟踪多个动作

bot.action(MULTIPLE ACTIONS, (ctx) => {
    ctx.reply(ctx.callbackQuery.data)
});
node.js bots telegram action telegraf
2个回答
0
投票

是的,通过使用 Telegraf 的中间件和上下文对象,可以在一个 Telegraf 机器人动作中跟踪多个动作。

Telegraf 的中间件允许您在消息被机器人处理之前拦截和修改消息。您可以使用中间件来跟踪用户操作并相应地更新上下文对象。上下文对象是 Telegraf 上下文的一个属性,可用于在与用户对话的整个生命周期中存储和访问数据。

这是一个示例,说明如何在一个 Telegraf 机器人操作中跟踪多个操作:

javascript
Copy code
const Telegraf = require('telegraf')
const bot = new Telegraf(process.env.BOT_TOKEN)

// Define middleware to track user actions
bot.use((ctx, next) => {
  // Retrieve context object
  const context = ctx.context || {}

  // Check if user has performed an action
  if (ctx.update.message) {
    const message = ctx.update.message.text

    // Track the action in the context object
    if (message === '/start') {
      context.action = 'start'
    } else if (message === '/help') {
      context.action = 'help'
    }
  }

  // Update context object
  ctx.context = context

  // Call next middleware
  return next()
})

// Define action to handle multiple user actions
bot.action(['start', 'help'], (ctx) => {
  // Retrieve context object
  const context = ctx.context || {}

  // Handle user action based on context object
  if (context.action === 'start') {
    ctx.reply('Welcome to my bot!')
  } else if (context.action === 'help') {
    ctx.reply('Here are some instructions on how to use my bot...')
  }
})

bot.launch()

在此示例中,中间件拦截所有传入消息并检查用户是否执行了操作(即发送“/start”或“/help”命令)。如果检测到某个动作,则会在上下文对象中对其进行跟踪。然后在机器人动作中处理该动作,该动作检索上下文对象并相应地做出响应。


0
投票

是的,查看Telegraf(bot)方法,我们看到

action
方法的第一个参数定义如下:

action(triggers: Triggers, ...fns: MatchedMiddleware): Telegraf

参数

  • ...
  • 触发器:
    Triggers<C>

复数表示可以传递一个

Triggers
的列表。


所以你的代码变成了这样的:

bot.action(['action1', 'action2'], (ctx) => {
    // Do something
});
© www.soinside.com 2019 - 2024. All rights reserved.