0

Soo... 我正在为 Node.JS 开发 Telegram Bot,在用户加入后,我的 bot 将欢迎他们:

function Welcome(e)
{
  console.log("Neuer Member");
  console.log(e); //Das ist der, der joint
  let markup = Extra.markup(
    Markup.inlineKeyboard([
      Markup.callbackButton('I read the rules and accept them!', 'AcceptRules'),
      Markup.urlButton('Read the rules here', 'https://t.me/MyBot')
    ])
  );
  bot.telegram.restrictChatMember(e.chat.id, e.from.id, {can_send_messages: false, can_send_media_messages: false, can_send_other_messages: false});
  e.reply(`Welcome to the chat @${e.message.from.username}, please make sure to read the rules https://t.me/MyBot\n\nYou will be able to chat in here once you read them :3\n\n If you have trouble you can use this button right here to accept AFTER you read them ;3`, markup, Extra.inReplyTo(e.update.message.message_id))
}

用户加入聊天时的消息

用户加入聊天后,可以点击消息附加的左侧按钮,到Callback.Button,触发这个功能:

bot.action('AcceptRules', e => {
  //if(e.update.callback_query.from.username == )
  let markup = Extra.markup(
    Markup.inlineKeyboard([
      Markup.urlButton('Read the rules here', 'https://t.me/VenWaifuBot')
    ])
  );
  //Das ist der, der akzeptiert
  allow(e);
  e.editMessageText(`✅Thank you ${e.update.callback_query.from.first_name} for reading the rules! I hope you have fun here ;3\n\nYou can always read the rules here, they will be updates from time to time`, markup);
  console.warn(e);
});

所以我的问题是......我怎么能确定只有加入的人 --> 用户在加入时触发 Welcome(e) 功能 --> 用户名在本地 e 变量中

e.update.message.from.username 来自加入的用户

e.update.callback_query.from.username 是点击按钮的用户

但两者都是局部变量......

如何将该变量从欢迎消息传递给 bot.action 事件?

我想制作一个临时的全局内存来存储用户名,但是如果另一个用户加入并干扰了怎么办……制作一个数组似乎也有点不对劲……有人有解决方案吗?

真诚的文

4

1 回答 1

0

一个Set将是一种自然的方式来做到这一点。

在顶层:

const usersWhoNeedToAcceptRules = new Set();

在欢迎中:

usersWhoNeedToAcceptRules.add(e.message.from.username);

在您的回调中:

if (usersWhoNeedToAcceptRules.has(e.update.callback_query.from.username)) {
    usersWhoNeedToAcceptRules.remove(e.update.callback_query.from.username);
    ...
于 2021-01-06T00:02:15.570 回答