如果只是向上一篇一样最後会有各种错误
因为 telegram bot 会将加入群组等都传送过来所以需要再加一个判断来防范
主要是 receiveTelegram 这个函式
main.js
const { sendBotMessage } = require("./telegramItem");
function receiveTelegram(data) {
// 确保只有 message 讯息可以被处理
if (data.message){
if ("media_group_id" in data.message) {
multitudeForwardHandler(data);
} else {
data = parseDataToTelegram(data);
sendBotMessage(data);
}
}
}
/**
* @description 用来分析与转换对应的讯息类型
*
* @param {*} estringa
* @return {*}
*/
function parseDataToTelegram(estringa) {
var payload = {};
if (estringa.message.text) {
payload = {
method: "sendMessage",
text: estringa.message.text,
};
} else if (estringa.message.sticker) {
payload = {
method: "sendSticker",
sticker: estringa.message.sticker.file_id,
};
} else if (estringa.message.photo) {
array = estringa.message.photo;
text = array[1];
payload = {
method: "sendPhoto",
photo: text.file_id,
caption: estringa.message.caption ? estringa.message.caption : "",
};
} else if (estringa.message.video) {
vidoe = estringa.message.video;
payload = {
method: "sendVideo",
video: vidoe.file_id,
caption: estringa.message.caption ? estringa.message.caption : "",
};
} else if (estringa.message.animation) {
animation = estringa.message.animation;
payload = {
method: "sendAnimation",
animation: animation.file_id,
caption: estringa.message.caption ? estringa.message.caption : "",
};
}
payload.chat_id = estringa.message.chat.id;
return payload;
}
// 用来存放多个 media 用的
let multitudeSendData = {};
/**
* @description 多个 media 讯息会以这种形式传送
*
* @param {*} estringa
*/
function multitudeForwardHandler(estringa) {
let object = {
type: checkTelegramMessageType(estringa.message),
media:
estringa.message.video?.file_id || estringa.message?.photo[1].file_id,
caption: estringa.message.caption ? estringa.message.caption : "",
};
// 当不同 group id 传来就 reset
if (!multitudeSendData[estringa.message.media_group_id]) {
multitudeSendData[estringa.message.media_group_id] = {
timeout: null,
data: [],
};
}
multitudeSendData[estringa.message.media_group_id].data.push(object);
clearTimeout(multitudeSendData[estringa.message.media_group_id].timeout);
multitudeSendData[estringa.message.media_group_id].timeout = setTimeout(
() => {
sendBotMessage({
chat_id: estringa.message.chat.id,
method: "sendMediaGroup",
media: JSON.stringify(
multitudeSendData[estringa.message.media_group_id].data
),
});
},
1000
);
}
/**
* @description 用来分影片和照片
*
* @param {*} message
* @return {*}
*/
function checkTelegramMessageType(message) {
let type;
if (message.photo) {
type = "photo";
} else if (message.video) {
type = "video";
}
return type;
}
module.exports = {
receiveTelegram,
};
机器人的部分在这边就结束了
他可以有各种延伸
即便不回声也可以直接传讯息给别人
因为接受 telegram 的请求只是一个触发的方式
<<: Day 24 - Rancher Fleet 玩转第一个 GitOps
>>: [Tableau Public] day 24:台湾姓氏分布分析-2
大家好,昨天我们把图片抓下来之後也标记完了(我个人是用了10000张图片),接下来就是丢进模型训练啦...
前言 这次预计用这30天,来执行一轮乱七八糟的HomeLab,内容将会涵盖许多不同领域的范畴但不会探...
一、整理变数重声明与重名变数的描述。 变数重声明,对已经声明过的变数,再次声明。 前提条件如下: 变...
按照之前的进度制作,现在按下▶Player应该会魔性地扭动起来,但就没有其他效果了,接下来就改造Pl...
课程目标 课程前半段主要让学员建立Angular开发框架相关基本观念,并透过Angular CLI建...