我做了什么:
我Telegram使用TelegrafJS框架开发了一个机器人。这个机器人允许用户订阅付费频道,这个频道是私有的。
所以支付完成后,机器人会发送邀请链接,让用户加入频道。
问题
现在假设付费用户将邀请链接发送给另一个用户(谁没有付费),非付费用户将获得对付费频道的访问,就像付费一样。
在想解决办法之前,有必要了解一下Telegram的邀请链接的限制:
我认为的解决方案
我想在一个内嵌按钮后面显示邀请链接,所以用户会看到点击这里按钮 3 秒钟,然后这将被撤销并创建另一个链接。这并没有消除无需付费订阅即可访问付费频道的问题,但它使不公平用户的生活变得更加困难。
可能的其他问题:当用户点击链接时:
抱歉,此频道似乎不存在。
这意味着该频道的邀请链接目前不稳定。它通常发生在连续多次单击“加入”之后,或者如果多个用户同时尝试加入。
尝试次数过多,请稍后再试
这意味着用户最近点击了太多无效的邀请链接。最有可能的是,他在此之前收到了很多消息“对不起,此频道似乎不存在”,或者连续加入了太多频道/群组。
结论
有没有更安全的方法来处理这个问题?
我正在使用 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 上该方法的描述。
我想使用 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 机器人,我将此机器人设置为频道管理员。现在,当新用户通常加入频道(而不是群组)时,频道上没有消息,我们也无法通过getUpdates方法获取消息。从技术上讲,是否可以发布一条消息说 \xe2\x80\x9cA 新用户已加入频道 \xe2\x80\x9d - 这会捕获 \xe2\x80\x9cnew member\xe2\x80\x9d 事件?让我知道。
telegram python-telegram-bot telegram-bot telegram-webhook node-telegram-bot-api
我有一个简单的用例。当用户点击下面的链接时,
T.me/MycompanynameBot?start=Microsoft
我想向他展示 3 个内联按钮,分别对应 Microsoft 内的 3 个 Telegram 频道。这可能吗?
关键是机器人必须能够从 URL 检索参数。
谢谢。
telegram python-telegram-bot telegram-bot telegram-webhook 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)
我正在使用 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)
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) 如何通过电报机器人获取用户位置纬度和经度?
模块:链接
代码:
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) 我只想用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) 所以,我实际上很厌倦找到任何有关此的问题......
我只需要在机器人问题之后才需要获取用户消息,而不是其他地方,例如:
机器人:你叫什么名字?
用户:奥列格
机器人:嗨,奥列格
我也在使用 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) 我有一个电报机器人,可以在群组中发送消息。我希望电报机器人不时更改其“名称” - 就像用户一样。这可能吗?这意味着当我看到来自机器人的消息时,它可以说“ABCbot”,但后来它可以说“DEFbot”。让我知道!
python-telegram-bot telegram-bot telegram-webhook node-telegram-bot-api