吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8208|回复: 294
上一主题 下一主题
收起左侧

[其他原创] 接【自用挪车二维码,免服务器,可微信通知,可拨打电话 】后续,加上自定义消息内容

    [复制链接]
跳转到指定楼层
楼主
似水流年小小 发表于 2024-11-11 19:56 回帖奖励
本帖最后由 似水流年小小 于 2024-11-12 19:15 编辑

已有大神出了教程,传送门:https://www.52pojie.cn/thread-1980798-1-1.html原帖地址:自用挪车二维码,免服务器,可微信通知,可拨打电话     https://www.52pojie.cn/thread-1979717-1-1.html
[JavaScript] 纯文本查看 复制代码
addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})
 
async function handleRequest(request) {
  const phone = '1*********' // 车主的手机号
  const wxpusherAppToken = 'AT_*******************' // Wxpusher APP Token
  const wxpusherUIDs = ['UID_**********************'] // 车主的UIDs
 
  const htmlContent = `
    <!DOCTYPE html>
    <html lang="zh-CN">
      <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>微信消息通知</title>
        <style>
          * { box-sizing: border-box; margin: 0; padding: 0; }
          body { font-family: Arial, sans-serif; display: flex; align-items: center; justify-content: center; height: 100vh; background: #f0f2f5; color: #333; }
          .container { text-align: center; padding: 20px; width: 100%; max-width: 400px; border-radius: 8px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); background: #fff; }
          h1 { font-size: 24px; margin-bottom: 20px; color: #007bff; }
          p { margin-bottom: 20px; font-size: 16px; color: #555; }
          button { 
            width: 100%; 
            padding: 15px; 
            margin: 10px 0; 
            font-size: 18px; 
            font-weight: bold; 
            color: #fff; 
            border: none; 
            border-radius: 6px; 
            cursor: pointer; 
            transition: background 0.3s; 
          }
          .notify-btn { background: #28a745; }
          .notify-btn:hover { background: #218838; }
          .call-btn { background: #17a2b8; }
          .call-btn:hover { background: #138496; }
        </style>
      </head>
      <body>
        <div class="container">
          <h1>微信消息通知</h1>
          <p>如需通知,请点击以下按钮</p>
          <button class="notify-btn">微信消息通知</button>
          <button class="call-btn">拨打电话通知</button>
        </div>
 
        <script>
          // 调用 Wxpusher API 来发送挪车通知
          function notifyOwner() {
            // 弹出提示框获取用户输入
            const userMessage = prompt("请输入需要通知的内容:", "您好,有人需要您挪车,请及时处理。");
            
            // 如果用户点击取消或没有输入内容,则返回
            if (!userMessage) {
                return;
            }
        
            fetch("https://wxpusher.zjiecode.com/api/send/message", {
                method: "POST",
                headers: {"Content-Type": "application/json"},
                body: JSON.stringify({
                    appToken: "${wxpusherAppToken}",
                    content: userMessage,  // 使用用户输入的内容
                    contentType: 1,
                    uids: ${JSON.stringify(wxpusherUIDs)}                 })
            })
            .then(response => response.json())
            .then(data => {
                if (data.code === 1000) {
                    alert("通知已发送!");
                } else {
                    alert("通知发送失败,请稍后重试。");
                }
            })
            .catch(error => {
                console.error("Error sending notification:", error);
                alert("通知发送出错,请检查网络连接。");
            });
        }
 
          // 拨打车主电话
          function callOwner() {
            window.location.href = "tel:${phone}";
          }
        </script>
      </body>
    </html>
  `
 
  return new Response(htmlContent, {
    headers: { 'Content-Type': 'text/html;charset=UTF-8' },
  })
}



增加了用户点击微信消息通知按钮后,弹出文字输入窗口,输入自定义通知内容。 食用方法见原贴。
切记,注意:因论坛的html代码插入有BUG,会自动过滤掉35、36行按钮代码,复制一下替换即可
       <button class="notify-btn" onclick="notifyOwner()">微信通知</button>
                             <button class="call-btn" onclick="callOwner()">电话通知</button>


效果如下:

QQ20241111-200224.png (55.27 KB, 下载次数: 27)

QQ20241111-200224.png

免费评分

参与人数 41吾爱币 +35 热心值 +33 收起 理由
a943922863 + 1 热心回复!
CHEN_zuhe + 1 + 1 我很赞同!
jiujian118 + 1 + 1 谢谢@Thanks!
wenye + 1 我很赞同!
哒劳德 + 1 + 1 我很赞同!
yaojianhao + 1 + 1 没那么简单,一键挪车码政府搞个,搁浅了。不能长久搞个P
kerrychu + 1 + 1 谢谢@Thanks!
LanJetmew + 1 + 1 我很赞同!
Clousa95 + 1 + 1 谢谢@Thanks!
zhaozhengliang + 1 用心讨论,共获提升!
Norma + 1 谢谢@Thanks!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
xipxiks + 1 谢谢@Thanks!
ck11790 + 1 厉害
春又来人已去 + 1 用心讨论,共获提升!
tianyalaike + 1 + 1 谢谢@Thanks!
luhuxixi + 1 尝试
wanghaha95 + 1 厉害
lgblgc + 1 聊了这么多天,就没有人出一个成品吗??
aa50138 + 1 + 1 感谢您的宝贵建议,我们会努力争取做得更好!
smilingk + 1 + 1 谢谢@Thanks!
wjms119 + 1 + 1 我很赞同!
OCEANTOWER + 1 + 1 回头定个亚克力牌子搞着玩&amp;amp;#128514;
FitContent + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
mrthirty + 1 我很赞同!
hmbgk12345 + 1 我很赞同!
huangmenjinohot + 1 热心回复!
chenguoxin19 + 1 支持楼主
ff1994ff + 1 谢谢@Thanks!
hutuutu + 1 用心讨论,共获提升!
qaazzz + 1 + 1 谢谢@Thanks!
zeng16888 + 1 很棒
gongzu1 + 1 + 1 非常好
BTCQAQ + 1 + 1 用心讨论,共获提升!
Mzhsy + 1 + 1 谢谢@Thanks!
lanqiansui + 1 + 1 热心回复!
qq2710086 + 1 支持老哥
xsq2121 + 1 用心讨论,共获提升!
lnds123456 + 1 + 1 厉害看
huangkang2297 + 1 + 1 太棒了
puyuancheng + 1 热心回复!大神怎么挂 cdn求教!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

来自 7#
xiaoshuimian 发表于 2024-11-11 20:27
本帖最后由 xiaoshuimian 于 2024-11-11 20:29 编辑
似水流年小小 发表于 2024-11-11 20:17
厉害,挂出源码吧。省的烧脑

[HTML] 纯文本查看 复制代码
    <!DOCTYPE html>
    <html lang="zh-CN">
      <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>通知车主挪车</title>
        <link rel="icon" href="${siteIconUrl}" type="image/x-icon">
        <style>
          * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
          }
          
          body {
            font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
            line-height: 1.6;
            background-color: #f8f9fa;
            color: #333;
          }
          
          .container {
            max-width: 600px;
            margin: 20px auto;
            padding: 20px;
            background: white;
            border-radius: 10px;
            box-shadow: 0 2px 4px rgba(0,0,0,0.1);
          }
          
          h1 {
            text-align: center;
            color: #2c3e50;
            margin-bottom: 20px;
            font-size: 24px;
          }
          
          .message-area {
            margin-bottom: 20px;
          }
          
          textarea {
            width: 100%;
            height: 120px;
            padding: 10px;
            border: 1px solid #ddd;
            border-radius: 5px;
            resize: none;
            font-size: 16px;
            margin-bottom: 5px;
          }
          
          .char-count {
            text-align: right;
            color: #666;
            font-size: 14px;
            margin-bottom: 10px;
          }
          
          .templates {
            margin-bottom: 20px;
          }
          
          .template-btn {
            background: #f8f9fa;
            border: 1px solid #ddd;
            border-radius: 5px;
            padding: 8px 15px;
            margin: 0 5px 5px 0;
            cursor: pointer;
            font-size: 14px;
            transition: all 0.3s ease;
          }
          
          .template-btn:hover {
            background: #e9ecef;
          }
          
          .action-buttons {
            display: flex;
            gap: 10px;
          }
          
          .btn {
            flex: 1;
            padding: 12px 20px;
            border: none;
            border-radius: 5px;
            cursor: pointer;
            font-size: 16px;
            font-weight: 500;
            transition: all 0.3s ease;
          }
          
          .notify-btn {
            background: #007bff;
            color: white;
          }
          
          .notify-btn:hover {
            background: #0056b3;
          }
          
          .notify-btn:disabled {
            background: #cccccc;
            cursor: not-allowed;
          }
          
          .call-btn {
            background: #28a745;
            color: white;
          }
          
          .call-btn:hover {
            background: #218838;
          }
          
          /* 模态框样式 */
          .modal {
            display: none;
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background-color: rgba(0,0,0,0.5);
            z-index: 1000;
          }
          
          .modal-content {
            position: relative;
            background-color: white;
            margin: 20% auto;
            padding: 20px;
            width: 90%;
            max-width: 400px;
            border-radius: 10px;
            text-align: center;
          }
          
          .modal-title {
            margin-bottom: 15px;
            font-size: 18px;
            color: #2c3e50;
          }
          
          .modal-phone {
            font-size: 24px;
            color: #007bff;
            margin-bottom: 20px;
          }
          
          .modal-buttons {
            display: flex;
            gap: 10px;
            justify-content: center;
          }
          
          .modal-btn {
            padding: 8px 20px;
            border: none;
            border-radius: 5px;
            cursor: pointer;
            font-size: 16px;
            transition: all 0.3s ease;
          }
          
          .confirm-btn {
            background: #28a745;
            color: white;
          }
          
          .confirm-btn:hover {
            background: #218838;
          }
          
          .cancel-btn {
            background: #dc3545;
            color: white;
          }
          
          .cancel-btn:hover {
            background: #c82333;
          }
        </style>
      </head>
      <body>
        <div class="container">
          <h1>通知车主挪车</h1>
          
          <div class="message-area">
            <textarea id="messageInput" placeholder="请输入通知内容"></textarea>
            <div id="charCount" class="char-count">0/200</div>
          </div>
          
          <div class="templates">
            <button class="template-btn">默认</button>
            <button class="template-btn">礼貌</button>
            <button class="template-btn">紧急</button>
            <button class="template-btn">关窗提示</button>
          </div>
          
          <div class="action-buttons">
            <button id="notifyBtn" class="btn notify-btn">发送通知</button>
            <button class="btn call-btn">拨打电话</button>
          </div>
        </div>

        <!-- 拨打电话确认模态框 -->
        <div id="callModal" class="modal">
          <div class="modal-content">
            <h2 class="modal-title">确认拨打车主电话?</h2>
            <div id="modalPhoneNumber" class="modal-phone"></div>
            <div class="modal-buttons">
              <button class="modal-btn confirm-btn">确认拨打</button>
              <button class="modal-btn cancel-btn">取消</button>
            </div>
          </div>
        </div>

        <script>
          // 在脚本开始处定义全局变量
          const phoneNumber = '13800138000';
          const webhookUrl = 'https://open.feishu.cn/open-apis/bot/v2/hook/***********';

          // 使用模板消息
          function useTemplate(template) {
            const messageInput = document.getElementById('messageInput');
            messageInput.value = template;
            updateCharCount();
          }

          // 更新字符计数
          function updateCharCount() {
            const messageInput = document.getElementById('messageInput');
            const charCount = document.getElementById('charCount');
            const notifyBtn = document.getElementById('notifyBtn');
            const currentLength = messageInput.value.length;
            
            charCount.textContent = currentLength + '/200';
            
            // 启用/禁用发送按钮
            notifyBtn.disabled = currentLength === 0 || currentLength > 200;
            
            // 改变字符计数颜色
            if (currentLength > 200) {
              charCount.style.color = '#dc3545';
            } else {
              charCount.style.color = '#666';
            }
          }

          // 格式化电话号码显示
          function formatPhoneNumber(phone) {
            return phone.replace(/(\d{3})(\d{4})(\d{4})/, '$1-$2-$3');
          }

          // 调用飞书 Webhook 发送通知
          function notifyOwner() {
            const messageInput = document.getElementById('messageInput');
            const message = messageInput.value.trim();
            
            if (!message) {
              alert('请输入通知内容');
              return;
            }
            
            if (message.length > 200) {
              alert('通知内容不能超过200字');
              return;
            }

            const notifyBtn = document.getElementById('notifyBtn');
            notifyBtn.disabled = true;
            notifyBtn.textContent = '发送中...';

            fetch(webhookUrl, {
              method: "POST",
              headers: { "Content-Type": "application/json" },
              body: JSON.stringify({
                "msg_type": "text",
                "content": {
                  "text": message
                }
              })
            })
            .then(response => response.json())
            .then(data => {
              console.log("通知发送成功", data);
              notifyBtn.textContent = '发送成功';
              messageInput.value = ''; // 清空输入框
              updateCharCount(); // 更新字符计数
              setTimeout(() => { 
                notifyBtn.textContent = '发送通知'; 
                notifyBtn.disabled = false; 
              }, 2000);
            })
            .catch(error => {
              console.error("发送通知失败", error);
              notifyBtn.textContent = '发送失败';
              setTimeout(() => { 
                notifyBtn.textContent = '发送通知'; 
                notifyBtn.disabled = false; 
              }, 2000);
            });
          }

          // 显示拨打电话的确认框
          function showCallModal() {
            const formattedNumber = formatPhoneNumber(phoneNumber);
            document.getElementById('modalPhoneNumber').textContent = formattedNumber;
            document.getElementById('callModal').style.display = 'block';
          }

          // 隐藏拨打电话的确认框
          function hideCallModal() {
            document.getElementById('callModal').style.display = 'none';
          }

          // 拨打车主电话
          function callOwner() {
            window.location.href = `tel:13800138000`;
            hideCallModal();
          }

          // 页面加载完成后初始化
          document.addEventListener('DOMContentLoaded', () => {
            useTemplate('您好,有人需要您挪车,请及时处理。');
          });

          // 点击模态框外部关闭模态框
          window.onclick = function(event) {
            const modal = document.getElementById('callModal');
            if (event.target === modal) {
              hideCallModal();
            }
          }
        </script>
      </body>
    </html>
来自 127#
xiaoshuimian 发表于 2024-11-12 17:13
我已经全部完成了,说说我我的步骤吧
1、我是用的125#楼大佬的二改,界面风格和自定义消息更适合我
2、用的飞书的Webhook,机器人搞群里,因为有时候不是我一个人开,所有把开车人拉群的,谁开的车,都能收到消息通知
3、通知也可以,电话也可以。
4、然后我是用的静态HTML代码部署的,把Token代码进行了加密,感觉没必要弄的太复杂,就扫码挪个车而已,应该不至于被别人破解代码乱用Token吧,也考虑后面加一个延时的代码,避免有人重复多次恶意发送通知
5、因为我自己有备案的域名,所有我用的CF的Pages,点Pages,点下面的上传资产,添加HTML代码,点部署站点。然后CF还提供了15年的TLS/SSL,把域名代{过}{滤}理到了CF,设置了dai理,绑定了子域名。然后把网址放到草料二维码设置了二维码,随便到图片找了模板,一张A4打印了6个挪车码。3个微信,3个飞书,留着备用。打印彩色A4只要2元,然后拼夕夕买了静电贴0.97元。一共花费2.97元。
6、我本身就有和多号的小号,用于购物的,顺便也可以用于挪车,一年36元。
说说优点吧:界面内容以及电话都可以自己修改,自定义。没有广告。也不用花太多钱。不受他人约束




推荐
 楼主| 似水流年小小 发表于 2024-11-12 07:10 |楼主
统计一下,如果不知道怎么操作的人比较多,我出个简易教程

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
乡间人 + 1 + 1 小白看来象天书,真心不懂,求个傻瓜程序
dadao815 + 1 + 1 真建议你出个傻瓜式程序更好

查看全部评分

推荐
DearBy 发表于 2024-11-12 07:07
本帖最后由 DearBy 于 2024-11-17 17:22 编辑

在上一个版本美化了一丢丢

https://wwsv.lanzoul.com/i3F8r2euqk8b
密码:covq

QQ截图20241112070635.png (147.87 KB, 下载次数: 3)

QQ截图20241112070635.png
推荐
xiaofei263 发表于 2024-11-13 16:06
在各位大佬的代码基础上,加入了车牌显示、自定义输入、脏话检测、提交限制,已经满足自己需求了
推荐
DearBy 发表于 2024-11-12 09:16
本帖最后由 DearBy 于 2024-11-12 09:23 编辑
happyxuexi 发表于 2024-11-12 08:35
你好,这个有源码吗?谢谢

https://wwsv.lanzoul.com/i3F8r2euqk8b
密码:covq

免费评分

参与人数 2吾爱币 +2 热心值 +1 收起 理由
ixcw52 + 1 我很赞同!
szair + 1 + 1 美化版也好看,谢谢分享

查看全部评分

推荐
xiaofei263 发表于 2024-11-14 22:53
xiaofei263 发表于 2024-11-13 16:06
在各位大佬的代码基础上,加入了车牌显示、自定义输入、脏话检测、提交限制,已经满足自己需求了

代码优化的不是很好,各位见谅,自行根据注释修改
[HTML] 纯文本查看 复制代码
<!DOCTYPE html>
    <html lang="zh-CN">
      <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>通知车主挪车</title>
        <style>
          * { box-sizing: border-box; margin: 0; padding: 0; }
          :root {
            --primary-color: #4776E6;
            --secondary-color: #8E54E9;
            --text-color: #2c3e50;
            --shadow-color: rgba(0, 0, 0, 0.1);
          }
          body { 
            font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
            display: flex; 
            align-items: center; 
            justify-content: center; 
            min-height: 100vh; 
            background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
            color: var(--text-color);
            padding: 20px;
            line-height: 1.6;
          }
          .container { 
            text-align: center; 
            padding: 40px 30px; 
            width: 100%; 
            max-width: 450px; 
            border-radius: 24px; 
            box-shadow: 0 10px 40px var(--shadow-color);
            background: rgba(255, 255, 255, 0.95);
            backdrop-filter: blur(10px);
            transform: translateY(0);
            transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
          }
          .container:hover {
            transform: translateY(-8px);
            box-shadow: 0 15px 50px rgba(0, 0, 0, 0.15);
          }
          h1 { 
            font-size: 20px; 
            margin-bottom: 25px; 
            background: linear-gradient(45deg, var(--primary-color), var(--secondary-color));
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            font-weight: 700;
          }
          .car-icon {
            font-size: 64px;
            margin-bottom: 5px;
            display: inline-block;
            animation: float 6s ease-in-out infinite;
          }
          p { 
            margin-bottom: 30px; 
            font-size: 18px; 
            color: #546e7a;
            line-height: 1.8;
          }
          .button-group {
            display: flex;
            flex-direction: column;
            gap: 15px;
          }
          button { 
            width: 100%; 
            padding: 16px 24px; 
            font-size: 18px; 
            font-weight: 600; 
            color: #fff; 
            border: none; 
            border-radius: 16px; 
            cursor: pointer; 
            transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
            display: flex;
            align-items: center;
            justify-content: center;
            gap: 10px;
          }
          button:active {
            transform: scale(0.98);
          }
          .notify-btn { 
            background: linear-gradient(45deg, var(--primary-color), var(--secondary-color));
            box-shadow: 0 4px 15px rgba(71, 118, 230, 0.2);
          }
          .call-btn { 
            background: linear-gradient(45deg, #00b09b, #96c93d);
            box-shadow: 0 4px 15px rgba(0, 176, 155, 0.2);
          }
          .call-btn:hover { 
            box-shadow: 0 6px 20px rgba(0, 176, 155, 0.3);
            transform: translateY(-2px);
          }
          @keyframes float {
            0% {
              transform: translateY(0px) rotate(0deg);
            }
            50% {
              transform: translateY(-20px) rotate(5deg);
            }
            100% {
              transform: translateY(0px) rotate(0deg);
            }
          }
          .loading {
            position: relative;
            pointer-events: none;
          }
          .loading::after {
            content: "";
            position: absolute;
            width: 20px;
            height: 20px;
            border: 3px solid #ffffff;
            border-radius: 50%;
            border-top-color: transparent;
            animation: spin 0.8s linear infinite;
            margin-left: 10px;
          }
          @keyframes spin {
            to {
              transform: rotate(360deg);
            }
          }
          .toast {
            position: fixed;
            bottom: 20px;
            left: 50%;
            transform: translateX(-50%);
            background: rgba(0, 0, 0, 0.8);
            color: white;
            padding: 12px 24px;
            border-radius: 50px;
            font-size: 16px;
            opacity: 0;
            transition: opacity 0.3s;
          }
          .toast.show {
            opacity: 1;
          }
      
            .message-area {
                margin-bottom: 20px;
            }
      
            .char-count {
        text-align: right;
        color: #666;
        font-size: 14px;
        margin-bottom: 10px;
      }
      
      textarea {
        width: 100%;
        height: 120px;
        padding: 10px;
        border: 1px solid #ddd;
        border-radius: 5px;
        resize: none;
        font-size: 16px;
        margin-bottom: 5px;
      }
      .char-count.error {
            color: red; /* 超过200字符时变红 */
        }
        .button-group {
            display: flex;
            justify-content: space-between;
        }
        .btn-disabled {
            background-color: lightgray; /* 禁用状态的按钮颜色 */
            cursor: not-allowed;
            box-shadow: 0 6px 20px rgba(71, 118, 230, 0.3);
            transform: translateY(-2px);
        }
        .templates {
            display: grid; /* 使用 Grid 布局 */
            grid-template-columns: repeat(4, 1fr); /* 创建 4 列,每列等分空间 */
            gap: 10px; /* 列之间的间隔 */
      }
      .template-btn {
        background: #f8f9fa;
        color: black; /* 白色文字 */
        border: 1px solid #ddd;
        border-radius: 5px;
        padding: 8px 15px;
        margin: 0 5px 5px 0;
        cursor: pointer;
        font-size: 14px;
        transition: all 0.3s ease;
      }
       
      .template-btn:hover {
        background: #e9ecef;
      }
        </style>
      </head>
      <body>
        <div class="container">
          <div class="car-icon">&#128663;</div>
          <br>
          <!--车牌使用GitHub开源项目生成:https://github.com/Pengfei8324/chinese_license_plate_generator-->
          <!--因法律法规,无法放出在线生成连接,各位自行生成-->
          <img width='30%' margin-bottom='10px' src='车牌图片连接'>
          <h1><p>不好意思阻碍到您的出行了<br>您可留言通知我,我会立即前来挪车</p></h1>
          <div class="message-area">
        <textarea id="messageInput" placeholder="请输入通知内容"></textarea>
        <div id="charCount" class="char-count">0/200</div>
        <div class="templates">
        <button class="template-btn" onc脱敏lick="useTemplate('您好,有人需要您挪车,请及时处理。')">挪车</button>
        <button class="template-btn" onc脱敏lick="useTemplate('车主,您爱车的车窗未关,请及时处理一下哦。')">未关窗</button>
        <button class="template-btn" onc脱敏lick="useTemplate('车主,您爱车的车灯未关,请及时处理一下哦。')">未关灯</button>
        <button class="template-btn" onc脱敏lick="useTemplate('交警来了!赶快开走!')">交警</button>
      </div>
      </div>
         
          <div class="button-group">
            <button id="notifyBtn" class="notify-btn" onclick="notifyOwner()">微信通知 &#128241;</button>
            <button class="call-btn" onclick="callOwner()">电话联系 &#128222;</button>
          </div>
        </div>
        <div id="toast" class="toast"></div>
        <script>
    const messageInput = document.getElementById('messageInput');
    const charCount = document.getElementById('charCount');
    const notifyBtn = document.getElementById('notifyBtn');
    // 在脚本开始处定义全局变量
      let submitCount = 0;
        const maxSubmissions = 5;
        const resetTime = 24 * 60 * 60 * 1000; // 24小时

        // 检查提交次数
        function checkSubmissions() {
            const lastSubmissionTime = localStorage.getItem('lastSubmissionTime');
            const currentTime = new Date().getTime();

            // 如果存在上次提交时间且在24小时内
            if (lastSubmissionTime && (currentTime - lastSubmissionTime < resetTime)) {
                submitCount = parseInt(localStorage.getItem('submitCount')) || 0;
            } else {
                // 超过24小时,重置次数
                submitCount = 0;
                localStorage.setItem('lastSubmissionTime', currentTime);
            }

            // 更新提交次数
            localStorage.setItem('submitCount', submitCount);
        }


    // 更新字符计数和按钮状态
    function updateCharCount() {
        const messageLength = messageInput.value.length;
        charCount.textContent = `${messageLength}/200`;

        if (messageLength > 200) {
            charCount.textContent = `内容过多!无法发送!`;
            charCount.classList.add('error'); // 超过200字符时变红
            notifyBtn.disabled = true; // 禁用发送通知按钮
            notifyBtn.classList.remove('notify-btn');
            notifyBtn.classList.add('btn-disabled');
        } else {
            charCount.classList.remove('error'); // 恢复颜色
            notifyBtn.disabled = false; // 启用发送通知按钮
            notifyBtn.classList.remove('btn-disabled');
            notifyBtn.classList.add('notify-btn');
        }
    }

    // 监听输入事件
    messageInput.addEventListener('input', updateCharCount);
    
      // 使用模板消息
      function useTemplate(template) {
        const messageInput = document.getElementById('messageInput');
        messageInput.value = template;
        updateCharCount();
      }
    // 调用飞书 Webhook 发送通知
      function notifyOwner() {
        const messageInput = document.getElementById('messageInput');
        const message = messageInput.value.trim();
        const badWords = ['11', '22', '33'];  /////脏话关键词
        
        if (!message) {
          alert('请输入通知内容');
          return;
        }
        // 检查消息中是否包含脏话
        const foundWords = badWords.filter(badWord => message.includes(badWord));

        if (foundWords.length > 0) {
            alert('请文明用语!');
            return;
        } 
        checkSubmissions();

            if (submitCount < maxSubmissions) {
                console.log('提交成功');
                submitCount++;
                localStorage.setItem('submitCount', submitCount);
            } else {
                alert('您今天已经提交了五次,无法再提交!');
                return;
            }

        const notifyBtn = document.getElementById('notifyBtn');
        notifyBtn.disabled = true;
        notifyBtn.textContent = '发送中...';
 
        fetch("https://wxpusher.zjiecode.com/api/send/message", {
              method: "POST",
              headers: { "Content-Type": "application/json" },
              body: JSON.stringify({
                  appToken:"AT_xxxxxxxxxxxxxxxxxxx", //appToken
                  topicIds:["12345"], //通知组号,可根据官方api更改推送个人
                  content:message,
                  contentType:1,
                  verifyPay:false
              })
            })
            .then(response => response.json())
            .then(data => {
              if (data.code === 1000) {
                alert("通知已发送!");
                console.log("通知发送成功", data);
                notifyBtn.textContent = '发送成功!';
                messageInput.value = ''; // 清空输入框
                updateCharCount(); // 更新字符计数
              } else {
                alert("通知发送失败,请稍后重试。");
                console.error("发送通知失败", error);
                notifyBtn.textContent = '发送失败!';
              }
            })
            .catch(error => {
              console.error("Error sending notification:", error);
              alert("通知发送出错,请检查网络连接。");
            });
      }
    
    // 使用模板消息
      function useTemplate(template) {
        const messageInput = document.getElementById('messageInput');
        messageInput.value = template;
        updateCharCount();
      }
    // 显示拨打电话的确认框
      function showCallModal() {
        const formattedNumber = formatPhoneNumber(phoneNumber);
        document.getElementById('modalPhoneNumber').textContent = formattedNumber;
        document.getElementById('callModal').style.display = 'block';
      }
 
      // 隐藏拨打电话的确认框
      function hideCallModal() {
        document.getElementById('callModal').style.display = 'none';
      }
 
      // 拨打车主电话
      function callOwner() {
        window.location.href = `tel:13800138000`;
        hideCallModal();
      }
 
      // 页面加载完成后初始化
      document.addEventListener('DOMContentLoaded', () => {
        useTemplate('您好,有人需要您挪车,请及时处理。');
      });
      // 页面加载时检查提交次数
        window.onload = checkSubmissions;
</script>
      </body>
    </html>
推荐
 楼主| 似水流年小小 发表于 2024-11-11 20:17 |楼主
xiaoshuimian 发表于 2024-11-11 20:15
感觉还是比较喜欢这种的,比较直接,风格也简洁,通用可以自定义。再单独弹出感觉有多了一个步骤,体验不好 ...

厉害,挂出源码吧。省的烧脑
推荐
xiaoshuimian 发表于 2024-11-11 20:15
感觉还是比较喜欢这种的,比较直接,风格也简洁,通用可以自定义。再单独弹出感觉有多了一个步骤,体验不好。
头像被屏蔽
推荐
蛋蛋蛋蛋小蛋蛋 发表于 2024-11-11 21:00
提示: 该帖被管理员或版主屏蔽
沙发
 楼主| 似水流年小小 发表于 2024-11-11 20:06 |楼主
cloudflare需要解决网络问题,有没有大神有新的方法
3#
784196449 发表于 2024-11-11 20:09
似水流年小小 发表于 2024-11-11 20:06
cloudflare需要解决网络问题,有没有大神有新的方法

你挂个CDN
4#
 楼主| 似水流年小小 发表于 2024-11-11 20:10 |楼主

免费的CDN怎么挂,求
8#
 楼主| 似水流年小小 发表于 2024-11-11 20:28 |楼主
xiaoshuimian 发表于 2024-11-11 20:27
[mw_shl_code=html,true]   
   
      

   给大神点赞
9#
xiaoshuimian 发表于 2024-11-11 20:30
本帖最后由 xiaoshuimian 于 2024-11-11 20:33 编辑
似水流年小小 发表于 2024-11-11 20:28
给大神点赞

这个是飞书的webhook的,也是上次的帖子,有个大佬的二改源码,我只是自己修改了一下而已
10#
提莫cris 发表于 2024-11-11 20:34
6666666,厉害了我的哥
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 14:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表