唯一用户的电报会话?

Nat*_*shi 3 javascript telegram-bot telegraf

我正在构建一个钱包机器人,我想知道如何为唯一用户启动会话。例如,在此会话中,我需要一个包含唯一用户标识符、公钥和密钥的对象,以便他们可以在启动机器人后访问该对象。

我在想这样的事情:

var myWallet = (ctx) =>{
return{
  user: ctx.from.id,
  publicKey: wallet.public,
  secretKey: wallet.secret

}
}

bot.command('/myWallet', (ctx)=>{
   ctx.reply(myWallet.user);
   ctx.reply(myWallet.publicKey);
   ctx.reply(myWallet.secretKey);
})
Run Code Online (Sandbox Code Playgroud)

但是当我在我的机器人上输入 /myWallet 时没有任何反应,知道我做错了什么吗?

Bos*_*rot 8

可能有点晚了,但对于会话,您可以使用Telegrafs 内置会话管理。这里有一个例子:

const session = require('telegraf/session')

const bot = new Telegraf(process.env.BOT_TOKEN)
bot.use(session())
bot.on('text', (ctx) => {
    ctx.session.counter = ctx.session.counter || 0
    ctx.session.counter++
    return ctx.reply(`Message counter:${ctx.session.counter}`)
})
Run Code Online (Sandbox Code Playgroud)

基本上它就像上面的例子一样工作。您启动一个会话 ( bot.use(session());),然后当用户写入时,您使用返回的消息 ( ) 的上下文ctx,其中存储了所有用户数据(用户名、id、消息等),并从中调用会话 ( ctx.session)。您可以在其中存储常规变量数据。现在,正常会话处于活动状态,直到机器人关闭。当您想要持久会话时,只需导入文档中编写的第 3 方会话管理器。

总结一下:

const session = require('telegraf/session') // import session addon
ctx.session.walletData = 'some data' // store data in session
console.log(ctx.session.walletData) // show data
Run Code Online (Sandbox Code Playgroud)