自己部署一个google search for yhchat

24 年 10 月 5 日 星期六 (已编辑)
753 字
4 分钟

前言

此bot可以在云湖上使用Google搜索

访问链接使用云湖机器人【Google】 https://yhfx.jwznb.com/share?key=nUNgDBS8LmFJ&ts=1728116702 机器人ID: 39049819

已开源,项目地址:butlanys/google-search-yhchat (github.com)

可帮助小白快速解决问题

并且此项目支持无服务器部署!!!

简单快速易上手

申请api

在这里申请一个api key:Custom Search JSON API | Programmable Search Engine | Google for Developers

https://github.hqycloud.top/https://raw.githubusercontent.com/hqycloud/blog-images/main/hexo-images/24/10/image_d497113754baca605f005e2b5cd5d051.png

如果没有项目则需要先创建

然后在cloudflare面板中创建一个worker项目

然后将下面的代码覆盖到原来的示例代码中:

javascript
addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request));
});

async function handleRequest(request) {
  if (request.method !== 'POST') {
    return new Response('', { status: 200 });
  }

  try {
    const json = await request.json();
    const { content, chatId, chatType } = json.event.message;
    const { senderId } = json.event.sender;
    const { text } = content;
    const commandId = json.event.message.commandId;
    const botCommandId = parseInt(BOT_COMMAND_ID);

    let searchQuery = '';
    let recvId = '';
    let recvType = '';

    if (chatType === 'group' && commandId === botCommandId) {
      searchQuery = text;
      recvId = chatId;
      recvType = 'group';
    } else if (chatType !== 'group') {
      searchQuery = text;
      recvId = senderId;
      recvType = 'user';
    }

    if (searchQuery) {
      try {
        const encodedQuery = encodeURIComponent(searchQuery);
        const googleApiUrl = `https://www.googleapis.com/customsearch/v1?key=${GOOGLE_API_KEY}&cx=${GOOGLE_CX}&q=${encodedQuery}`;
        const response = await fetch(googleApiUrl);
        const data = await response.json();

        let message = '';
        if (data.items && data.items.length > 0) {
          for (let i = 0; i < Math.min(data.items.length, 8); i++) {
            const item = data.items[i];
            message += `<a href="${item.link}">${item.title}</a><br>${item.snippet}<br><br>`;
          }
        } else {
          message = "未找到结果。";
        }
        await sendMessage(recvId, message, data.items && data.items.length > 0 ? "html" : "text", recvType);
      } catch (e) {}
    }

  } catch (e) {}

  return new Response('', { status: 200 });
}

async function sendMessage(recvId, content, contentType, recvType) {
  try {
    const token = YHCHAT_TOKEN;
    const url = `https://chat-go.jwzhd.com/open-apis/v1/bot/send?token=${token}`;
    const bodyContent = JSON.stringify({ recvId, recvType, contentType, content: { text: content } });
    const headers = { 'Content-Type': 'application/json' };
    await fetch(url, { method: 'POST', headers, body: bodyContent });
  } catch (e) {}
}

点击部署

环境变量

完成后返回刚创建的worker项目主页,点击设置,在下面找到环境与变量

YHCHAT_TOKEN = 在云湖官网控制台中创建机器人后得到的token

BOT_COMMAND_ID = 创建一个控制台中创建一个普通按钮后得到的按钮id

GOOGLE_API_KEY = 上面在谷歌那申请到的api key

GOOGLE_CX = 根据Google描述,这个叫可编程搜索引擎 ID ,要在可编程搜索 - 所有搜索引擎 (google.com) 中创建,创建好后就可以在概览中看到搜索引擎 ID

设置好这四个环境变量后,就需要返回部署页面中点一下部署

设置解析

接着需要在设置中设置一个自定义域(云湖服务器在国内,而worker域名早已被封禁)

域和路由中点击添加选择路由,区域选任意一个域名,然后输入域名+/* (例如yhchat.aaa.com/*)

然后去dns解析中为这个域名添加一个记录,可以cname到dns-cf.hqycloud.top(相比较于cf原来分配的IP,此优选IP可以提升响应速度)

然后将这条域名添加到云湖控制台的配置消息订阅接口(例如:https://yhchat.aaa.com)

接着就可以到云湖中测试此机器人是否可以正常搜索

效果:

  • 群组https://github.hqycloud.top/https://raw.githubusercontent.com/hqycloud/blog-images/main/hexo-images/24/10/image_373ed3e31f7c87e894c1b1d54e2d2600.png
  • 私聊https://github.hqycloud.top/https://raw.githubusercontent.com/hqycloud/blog-images/main/hexo-images/24/10/image_0befb1605bdfe0631ee13f4155d9e81c.png

一些表情包

文章标题:自己部署一个google search for yhchat

文章作者:butlanys

文章链接:https://blog.butlanys.de/posts/47372[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。