前言

此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项目

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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

一些表情包