标签: node-telegram-bot-api

如何管理私人频道的邀请链接?

我做了什么:

Telegram使用TelegrafJS框架开发了一个机器人。这个机器人允许用户订阅付费频道,这个频道是私有的。

所以支付完成后,机器人会发送邀请链接,让用户加入频道。

问题

现在假设付费用户将邀请链接发送给另一个用户(谁没有付费),非付费用户将获得对付费频道的访问,就像付费一样。

在想解决办法之前,有必要了解一下Telegram的邀请链接的限制:

  • 如果没有邀请链接,则无法将用户添加到频道;
  • 无法创建一次性邀请链接;
  • 无法创建个人邀请链接(只有一个用户可以使用);
  • 邀请链接缓存在 Telegram 服务器上,如果您将它们重置得太快就会变得不稳定(尝试使用 Telegram 应用程序在 10 秒内重置链接 2-3 次——您会明白我的意思)。

我认为的解决方案

我想在一个内嵌按钮后面显示邀请链接,所以用户会看到点击这里按钮 3 秒钟,然后这将被撤销并创建另一个链接。这并没有消除无需付费订阅即可访问付费频道的问题,但它使不公平用户的生活变得更加困难。

可能的其他问题:当用户点击链接时:

抱歉,此频道似乎不存在。

这意味着该频道的邀请链接目前不稳定。它通常发生在连续多次单击“加入”之后,或者如果多个用户同时尝试加入。

尝试次数过多,请稍后再试

这意味着用户最近点击了太多无效的邀请链接。最有可能的是,他在此之前收到了很多消息“对不起,此频道似乎不存在”,或者连续加入了太多频道/群组。

结论

有没有更安全的方法来处理这个问题?

node.js telegram telegram-bot node-telegram-bot-api

6
推荐指数
1
解决办法
7984
查看次数

方法 editMessageReplyMarkup 删除内联键盘

我正在使用 node.js 和库制作一个电报机器人node-telegram-bot-api
我接听callback_query并想更改我的内嵌键盘。下面的代码显示了我如何尝试使用此方法,但是当我在电报中点击键盘时,它就消失了:

bot.on('callback_query', msg => {
    bot.editMessageReplyMarkup({
        reply_markup:  {
            inline_keyboard: [
                [
                    {
                        text: "text1",
                        callback_data: "data1"
                    }
                ],
                [
                    {
                        text: "text2",
                        callback_data: "data2"
                    }
                ]
            ]
        }
    }, {
        chat_id: msg.from.id, 
        message_id: msg.message.message_id
    });
})
Run Code Online (Sandbox Code Playgroud)

它发生时没有任何错误,我不明白为什么。有任何想法吗?
GitHub 上该方法的描述。

node.js telegram-bot node-telegram-bot-api

4
推荐指数
1
解决办法
7259
查看次数

Telegram 机器人发送消息问题。Parse_mode='HTML' 不起作用

我想使用 parse_mode 'HTML' 从 Telegram Bot 向用户发送消息。我将 node.js 与 telegram.bot.api 结合使用。但我有一个错误

我尝试编写没有 parse_mode='HTML' 的代码。它正在发挥作用。但如果我只添加 parse_mode=''(html 或 markdown) node.js 显示:“错误:[polling_error] {}”

错误代码:

   const chatId=msg.chat.id;
   if (msg.text=='test'){
       bot.sendMessage(chatId,'<b>TEST</b>', parse_mode='HTML');
       return;
      }
})
Run Code Online (Sandbox Code Playgroud)

工作代码

    const chatId=msg.chat.id;
    if (msg.text=='test'){
        bot.sendMessage(chatId,'<b>TEST</b>');
        return;
       }
})
Run Code Online (Sandbox Code Playgroud)

我找不到有关 parse_mode='HTML' 和“错误:[polling_error] {}”的任何解决方案和信息。

telegram-bot node-telegram-bot-api

4
推荐指数
1
解决办法
3万
查看次数

Telegram 机器人可以检测到加入频道活动的新成员吗?

我有一个 Telegram 机器人,我将此机器人设置为频道管理员。现在,当新用户通常加入频道(而不是群组)时,频道上没有消息,我们也无法通过getUpdates方法获取消息。从技术上讲,是否可以发布一条消息说 \xe2\x80\x9cA 新用户已加入频道 \xe2\x80\x9d - 这会捕获 \xe2\x80\x9cnew member\xe2\x80\x9d 事件?让我知道。

\n

telegram python-telegram-bot telegram-bot telegram-webhook node-telegram-bot-api

4
推荐指数
1
解决办法
2万
查看次数

深度链接到电报机器人

我有一个简单的用例。当用户点击下面的链接时,

T.me/MycompanynameBot?start=Microsoft

我想向他展示 3 个内联按钮,分别对应 Microsoft 内的 3 个 Telegram 频道。这可能吗?

关键是机器人必须能够从 URL 检索参数。

谢谢。

telegram python-telegram-bot telegram-bot telegram-webhook node-telegram-bot-api

4
推荐指数
1
解决办法
5773
查看次数

当我尝试编辑内联键盘 (node-telegram-bot-api) 时,为什么会收到 400 错误?

我正在使用简单的内联键盘发送消息。预期的结果是,当我单击按钮时,它会与消息文本一起更改。

但是按钮没有改变,我收到此错误:

TelegramError: ETELEGRAM: 400 Bad Request: message is not modified: specified new message content and reply markup are exactly the same as a current content and reply markup of the message
Run Code Online (Sandbox Code Playgroud)

我正在使用 node-telegram-bot-api 包。

必须更改我的键盘的代码是:

TelegramError: ETELEGRAM: 400 Bad Request: message is not modified: specified new message content and reply markup are exactly the same as a current content and reply markup of the message
Run Code Online (Sandbox Code Playgroud)

javascript node.js telegram-bot node-telegram-bot-api

4
推荐指数
1
解决办法
3985
查看次数

Telegeram Bot中`msg.chat.id`和`msg.from.id`的区别是什么?

Telegeram Bot msg.chat.id和之间的区别是什么msg.from.id显然,两者都是相同的并且返回用户ID.

bot.sendMessage(msg.chat.id, 'Hi', opts)
Run Code Online (Sandbox Code Playgroud)

bot.sendMessage(msg.from.id, 'Hi', opts)
Run Code Online (Sandbox Code Playgroud)

telegram-bot node-telegram-bot-api

3
推荐指数
1
解决办法
2256
查看次数

通过电报机器人获取用户位置经纬度

如何通过电报机器人获取用户位置纬度和经度?

模块:链接

代码:

bot.onText(/getLocation/, (msg) => {
  const opts = {
    reply_markup: JSON.stringify({
      keyboard: [
        [{text: 'Location', request_location: true}],
        [{text: 'Contact', request_contact: true}],
      ],
      resize_keyboard: true,
      one_time_keyboard: true,
    }),
  };
  bot.sendMessage(msg.chat.id, 'Contact and Location request', opts);
});
Run Code Online (Sandbox Code Playgroud)

javascript node.js telegram-bot node-telegram-bot-api

3
推荐指数
1
解决办法
8490
查看次数

我应该如何从 telegram api 下载收到的文件

我只想用nodejs 下载我的电报机器人收到的图像,但我不知道要使用的女巫方法。我正在使用node-telegram-bot-api并尝试了这段代码:

bot.on('message', (msg) => {
    const img = bot.getFileLink(msg.photo[0].file_id);

    console.log(img);
});
Run Code Online (Sandbox Code Playgroud)

这就是结果:

Promise [Object] {
  _bitField: 0,
  _fulfillmentHandler0: undefined,
  _rejectionHandler0: undefined,
  _promise0: undefined,
  _receiver0: undefined,
  _cancellationParent:
   Promise [Object] {
     _bitField: 1,
     _fulfillmentHandler0: [Function],
     _rejectionHandler0: undefined,
     _promise0: [Circular],
     _receiver0: undefined,
     _cancellationParent:
      Promise [Object] {
        _bitField: 1,
        _fulfillmentHandler0: undefined,
        _rejectionHandler0: [Function],
        _promise0: [Circular],
        _receiver0: undefined,
        _cancellationParent: [Promise],
        _branchesRemainingToCancel: 1 },
     _branchesRemainingToCancel: 1 } }
Run Code Online (Sandbox Code Playgroud)

node.js telegram telegram-bot node-telegram-bot-api

3
推荐指数
1
解决办法
8633
查看次数

node-telegram-bot-api / 如何获取有关问题的用户消息?

所以,我实际上很厌倦找到任何有关此的问题......

我只需要在机器人问题之后才需要获取用户消息,而不是其他地方,例如:

机器人:你叫什么名字?

用户:奥列格

机器人:嗨,奥列格

它应该如何运作

我也在使用 require 系统和 module.exports,所以我真的很困惑,如何处理我的问题

示例代码

const mw = require('./example_module');

bot.onText(/\/help/, async (data) => {
    try {
        mw.cout.userlog(data);
        await cw.help.main(bot, data);
    } catch (e) {
        mw.cout.err(e.name)
    }
});
Run Code Online (Sandbox Code Playgroud)

node.js node-telegram-bot-api

3
推荐指数
1
解决办法
5491
查看次数

即时更改电报机器人名称

我有一个电报机器人,可以在群组中发送消息。我希望电报机器人不时更改其“名称” - 就像用户一样。这可能吗?这意味着当我看到来自机器人的消息时,它可以说“ABCbot”,但后来它可以说“DEFbot”。让我知道!

python-telegram-bot telegram-bot telegram-webhook node-telegram-bot-api

2
推荐指数
1
解决办法
7742
查看次数