删除群组历史消息机器人 - google apps script

网友投稿
删除群组历史消息机器人 - google apps script

分享:

0

0 次

0

  • 资源详情
  • 用户评论

站长评测:简单,但实用,基于google apps script创建,无需服务器

/*

功能:

删除群内所有历史消息,包括进群、退群的服务消息。


使用方法:

注册一个google帐号,在google apps script中新建一个脚本,复制代码并webhook到机器人即可。

布署成功后,先向机器人运行init命令建立msgid属性。删除完成后也可以使用此命令复位消息ID。

然后把机器人拉进需要删除历史消息的群,设为管理员,运行"删除历史消息"命令即可。

此机器人在群内会自动删除所有新产生的进、退群消息。


运行逻辑

机器人在群中获取到"删除历史消息"命令后得到最后一条消息ID,然后循环从1开始删除消息,直到最后一条消息ID。

因为GAS脚本运行最长时间为6分钟,所以设置了5分钟停止,可自行调整。如果消息过多,则等待执行完成后,重复删除命令即可。

脚本考虑到API的请求限制,未采用并发进程,稍微慢一点,但胜在稳定不会被黑名单。


作者:@mangsile  需要订制机器人请与我联系。

*/

const botToken = "https://api.telegram.org/bot" + "bot token" + "/";

const scriptProperties = PropertiesService.getScriptProperties();

const adminname = "mangsile";  //管理员用户名,必改

data = {"method": "post","contentType": 'application/json',"muteHttpExceptions": true,"payload": ""};


function doGet(e) {

  return HtmlService.createHtmlOutput("Hello World!! No, this link should be hidden!!!");

}


function doPost(e) {

  var body = JSON.parse(e.postData.contents);

  preparePayload(body);

}


function Para_set(collection, data) {

  scriptProperties.setProperty(collection, data);

  return true;

}

function Para_get(collection) {

  var units = scriptProperties.getProperty(collection);

  return units;

}

function sendmsg (chatid,msg) {

  var payload = {

    "method": "sendMessage",

    "chat_id": chatid,

    "text": msg,

    "parse_mode": "Markdown",

    "disable_web_page_preview": false,

  }

  data.payload = JSON.stringify(payload);

  UrlFetchApp.fetch(botToken,data);

}

function delmsg_callback(chatid,msgid) {

  var payload = {

    "method": "deleteMessage",

    "chat_id": chatid,

    "message_id": msgid,

  }

  data.payload = JSON.stringify(payload);

  var response = UrlFetchApp.fetch(botToken,data);

  return response;

}


//接收开始

function preparePayload(body) {

  const username = body.message.from.username;

  const chatid = body.message.chat.id + '';

  const chatname = body.message.chat.username;

  const chattitle = body.message.chat.title;

  const chattype = body.message.chat.type;

  var msgid = body.message.message_id;

  if(body.message.text) var m = body.message.text.toLowerCase();


  if (body.message.new_chat_member) {

    delmsg(chatid,msgid);

  }

  if (body.message.left_chat_member) {

    delmsg(chatid,msgid);

  }



  if (username != adminname) return;


  if (m === "init") {

    scriptProperties.setProperty('msgid',1);

    sendmsg(chatid,"ID初始化成功");

    return

  }



  if (m === "删除历史消息") {

    sendmsg(chatid,"*脚本开始执行*");

    var delmsgid = Para_get("msgid");

    var starttime = new Date().getTime();


    for(let i = delmsgid; i < msgid; i++){

      var runtime =  new Date().getTime();

      if(runtime - starttime > 300000){

        Logger.log("脚本已运行5分钟,自动停止");

        sendmsg(chatid,"*脚本已运行5分钟,自动停止*");

        return

      }


      var response = JSON.parse(delmsg_callback(chatid,i));

      Para_set("msgid",i);  //写入执行msgid到参数


      if(response.ok == true){

        Logger.log("删除成功:" + i);

      }else{

        switch(response.error_code){

          case 400:

            Logger.log("删除失败,未找到ID:" + i);

            break;

          case 403:

            Logger.log("异常代码403:请求被禁止,停止执行");

            rsh.append("debug",[detime,chatid,i,403,response]);

            return;

          case 429:

            Logger.log("异常代码429:请求次数超出限制,等待10秒后执行");

            Utilities.sleep(10*1000);

            break;

          default:

            Logger.log("异常代码" + response.error_code + ":停止执行");

            sendmsg(chatid,"❗️ 异常,自动停止");

            return;

        }


      }

    }

  }

  return


}



  • 本站 电报机器人中文社区 的所有源码丶工具丶教程附件压缩包(如果文章没有特别说明解压密码的情况下)默认解压密码一律为:telegbor.org
1. 下载后遇到任何问题可以到:问答社区 发表帖子请求帮助
2. 本文章所属:机器人源码 > 删除群组历史消息机器人 - google apps script
<