当前位置: 首页 > news >正文

一级a做爰片365网站北京做网站的公司哪家好

一级a做爰片365网站,北京做网站的公司哪家好,如何用ai给网站做logo,中国最好的公司排名业务描述: 需要监听aws的存储中的最新消息,发送新的消息推送到指定tg的频道。 主要流程: 1.上传消息到s3存储桶(不做具体描述) 2.通过aws的lambda监听s3存储桶的最新消息(txt文件) 3.将txt文件…

业务描述:

   需要监听aws的存储中的最新消息,发送新的消息推送到指定tg的频道。

主要流程:

1.上传消息到s3存储桶(不做具体描述)
2.通过aws的lambda监听s3存储桶的最新消息(txt文件)
3.将txt文件内容处理后推送到tg频道中

具体流程:

一、准备工作
1.创建bot
2.在频道中添加bot作为管理员
3.获取bot的token和频道的channel id

二、监听s3消息并推送到指定的tg频道中
1.创建函数
在这里插入图片描述
2.上传代码到lambda中
注:建议使用zip上传
在这里插入图片描述代码源中必须包含package和node_modules,需要项目的完整环境
注: 代码如下,可以根据自己的业务调整。我的业务tg频道的channel id是从txt中解析获取。
注: 需要注意parse_mode的选择
注: 在lambda中发送完消息之后是无法获取状态的,也就是代码中response是没法获取状态的,不管成功失败。这也就导致了会存在消息丢失的情况

const TelegramBot = require('node-telegram-bot-api');
const AWS = require('aws-sdk');const s3 = new AWS.S3();
const TELEGRAM_BOT_TOKEN = '你的tg bot token'; // Telegram Bot Token
const TARGET_BUCKET_NAME = '你需要监听的存储桶的名称'; // 监听的目标存储桶名称// Initialize the Telegram bot
const bot = new TelegramBot(TELEGRAM_BOT_TOKEN);// AWS Lambda Handler
exports.handler = async (event, context) => {const functionName = context.functionName; // 获取 Lambda 函数的名称// tg-bot-test:测试环境   tg-bot:生产const [TEXT_NAME, MEDIA_NAME] = functionName === 'tg-bot-test' ? ['text-output-test', 'media-test'] : ['text-output', 'media'];try {const currentTime = new Date();for (const record of event.Records) {const bucket = record.s3.bucket.name; // 存储桶名称const key = decodeURIComponent(record.s3.object.key.replace(/\+/g, ' ')); // 对象键const eventName = record.eventName;// 仅处理指定存储桶的事件(新增)if (bucket === TARGET_BUCKET_NAME && eventName.startsWith('ObjectCreated:Put')) {console.log(`New file uploaded: ${key} to bucket: ${bucket}`);// 获取对象的元数据const metadata = await getObjectMetadata(bucket, key);const creationTime = metadata.LastModified; // 获取创建时间const timeDiffInSeconds = (currentTime - creationTime) / 1000; // 计算时间差(秒)console.log(`File creation time: ${creationTime}, Time difference: ${timeDiffInSeconds} seconds`);// 若创建时间超过 60 秒,则不再继续执行if (timeDiffInSeconds > 60) {console.log(`File ${key} creation time exceeds 60 seconds, stopping execution...`);return; // 结束 Lambda 函数的执行}// 检查文件是否在指定的文件夹中if (key.startsWith(`${TEXT_NAME}/`)) {// 从 S3 获取文本文件内容const textContent = await getFileContentFromS3(bucket, key);console.log(`Updated file: ${key}`); // 打印更新文件的名称console.log(`textContent: ${textContent}`);// 获取第三行内容并转换为数字let numberValue = 0;const lines = textContent.split('\n');let captionContent = "";let channelId = "";if (lines.length >= 3) {channelId = lines[0].trim();  // 获取发送到的频道的idconsole.log("channelId:", channelId);const thirdLine = lines[2].trim(); // 获取第三行并去除多余空格numberValue = parseFloat(thirdLine); // 转换为数字console.log(`Third line as number: ${numberValue}`); // 打印数字值captionContent = lines.slice(3).join('\n').trim(); // 从第三行之后的所有内容} else {console.error('The file does not contain enough lines.');return;}// 提取文件名(去除文件夹和后缀)const fileName = key.split('/').pop().split('.').slice(0, -1).join('.');console.log(`File name without folder and extension: ${fileName}`); // 打印文件名// 生成所有图片的名称let allImage = [];for (let index = 0; index < numberValue; index++) {allImage.push(`${fileName}.img${index}.jpg`);}console.log(`All images: ${allImage}`);// 收集图片的 URLconst imageUrls = allImage.map(image => `https://${bucket}.s3.us-east-1.amazonaws.com/${MEDIA_NAME}/${image}`);// 发送所有图片作为一条消息await sendPhotosToTelegram(imageUrls, captionContent, channelId);}}}} catch (error) {console.error("error message:", error);}
};const getObjectMetadata = async (bucket, key) => {const params = {Bucket: bucket,Key: key};const metadata = await s3.headObject(params).promise();return metadata; // 返回对象的元数据
};const getFileContentFromS3 = async (bucket, key) => {const params = {Bucket: bucket,Key: key};const data = await s3.getObject(params).promise();return data.Body.toString('utf-8'); // 返回文件内容,假设是文本文件
};const sendPhotosToTelegram = async (imageUrls, captionContent, channelId) => {const media = imageUrls.map((url) => ({type: 'photo',media: url,}));// 如果有需要,可以为第一张图片添加 captionif (captionContent) {media[0].caption = captionContent;media[0].parse_mode = 'Markdown'; 	//注意此处的选择,Markdown是支持多图和超链接文本的,但是MarkdownV2是不支持超链接文本的,而且也不支持特殊字符}try {console.log("request==================start");const response = await bot.sendMediaGroup(`@${channelId}`, media);console.log("request==================end");console.log('Response from Telegram:', response); // 打印 Telegram 的响应(lambda没有效果)return response;} catch (error) {console.error('Error sending photos to Telegram:', error.response ? error.response.data : error.message);throw error;}
};

其他

1.在没有解决消息丢失的情况下建议不要使用lambda推送重要消息
2.可以使用mq来完成消息的监听和发送,这样response也可以监听到状态,也不会存在消息丢失情况,即使丢失也可以通过状态控制。

http://www.yayakq.cn/news/326636/

相关文章:

  • 淘客网站seo怎么做工业设计网站哪个好用
  • 网站建设过程中要注意的事项安徽网站备案要多少时间
  • 深圳建站服务公司手机网站排行榜
  • 网站的原型图网站建设属于商标哪个类
  • 网站做快照怎么做网络营销软文范例300字
  • 网站建设及安全制度用ps如何做短视频网站
  • 网站负责人核验现场拍摄照片电子件怎么做网站演示
  • 安徽网站设计方案贸易平台有哪些
  • 德国 网站 后缀大连优化网站
  • 网站建设用net后缀如何番禺本地网站
  • 舒城县建设局官方网站河源市建设厅网站
  • 怎样做淘宝券网站云浮市做网站的公司
  • centos做网站服务器吗WordPress cosy 主题
  • 外贸如何推广公司网站成都本地网站
  • html静态网站开发自我介绍北京免费做网站
  • 建网站的公司德阳建网站的公司asp网站 没有数据库 管理员密码
  • 大连海外网站建设wordpress接入qq互联
  • 门户类网站建立有哪些构成中信建设有限责任公司海外法务
  • 网站建设与网页的区别业网站建设
  • 社交网站源代码网站设计分析怎么写
  • 毕业设计网站建设网站开发视频百度云
  • 做网站 就上微赞网seo策略主要包括
  • 网站备案 流程p2p网站做牛
  • 无锡哪里有建设网站广告sem是什么意思
  • 微网站微商城建设缪斯设计官网
  • 网站建设朱宁旅游网页设计模板源代码
  • linux网站建设模板做网站有什么好书籍
  • 山东企业网站建设报价深圳买门的网站建设
  • 山西省住房和城乡建设厅网站网站建设的技术路线
  • 名律汇网站建设设计哪个推广网站好