今天试了下最近很火的chatgpot,让它将一段bash代码便乘javascript🤔
原始的bash代码是一段cgi-bin,用来在我这几天拖的kg0999或者gm23生成的maindb.txt
里检索请求的postid,并将对应的guilded drive链接的内容返回给请求方:
#!/bin/bash
echo "Content-type: text/plain"
echo ""
postid="QUERY_STRING"
wget -c -N "https://lumine.thonk/maindb.txt"
guildedlink=`cat maindb.txt | grep "postid|" | cut -f3 -d'|'`
curl "$guildedlink"
exit 0
我在尝试将其cloudflare worker化,也就意味着我需要想办法用javascript来实现它那段grep并cut的东西,但我自己想了半天都想不出来(悲🤔扔进chatgpt里,让它将其便乘javascript,它返回了如下代码:
var http = require("http");
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
var postid = request.query.string;
var download = require('download');
download('https://lumine.thonk/maindb.txt', '.').then(function(){
var fs = require('fs');
var content = fs.readFileSync('maindb.txt').toString();
var guildedlink = content.split("\n").filter(function(e){ return e.split("|")[0] == postid; })[0].split("|")[2];
var guildedContent = download(guildedlink).then(function(data){
response.end(data);
});
});
}).listen(8081);
console.log('Server running at http://127.0.0.1:8081/%27);
我直接惊呆了,这简直就是上述cgi-bin代码的完美再现(确信🤔它不仅准确地理解了我那段代码的意图,甚至连我原来代码里先保存成本地文件然后在本地文件里检索这个步骤都忠实地再现了,真的,我哭死(大嘘🤔
但这段代码最有用的部分其实是那段guildedlink = content.split("\n").filter(function(e){ return e.split("|")[0] == postid; })[0].split("|")[2]
,我算是懂了javascript里如何实现类似于bash里grep的玩意了:先用回车来对文件内容进行分割,将其便乘一个数组,然后用一个匿名函数来返回某一列(对数组元素进行二次分割)为指定内容的数组元素(也就是行🤔有意思的是我只是在grep的参数里加了一个|,它却能捕捉出我隐含的意思,就是postid一定是第一列,而且它的确如此(确信🤔这ai真にま高级🤔
我寻思如果原代码里grep的参数没有加|,即没有指定哪一列的话,它又会怎么写代码?🤔我就懒得再试一次了,八成是return e.includes(postid)
(确信🤔
现在既然我知道怎么对maindb.txt
进行检索了,那么cloudflare worker代码也不难写了,如下:
addEventListener("fetch", (event) => {
event.respondWith(
handleRequest(event).catch(
(err) => new Response(err.stack, { status: 500 })
)
);
});
async function handleRequest(event) {
const { request } = event;
const { pathname } = new URL(request.url);
const postid = pathname.split("/")[1].split(".")[0];
console.log(postid);
const response = await fetch("https://lumine.thonk/maindb.txt");
if (bruh.ok){
content = await response.text();
guildedlink = content.split("\n").filter(function(e){ return e.split("|")[0] == postid; })[0].split("|")[2];
return fetch(guildedlink);
} else {
return "wiebitte?";
}
}
现在请求比如https://kg0999.wiebitte.workers.dev/$postid
时,对应的guilded drive文件就会被返回🤔也许我应该移除响应里的content-disposition
头,但我懒得折腾了,反正现在这坨玩意加进guildedbitte的参数里,能自动开始下就是了(确信🤔
顺便附带一个bash本地函数版本(塞进~/.bashrc
里),用来在诸如cgi-bin的服务器或者cloudflare的玩意被墙时用:
alias guildedbitte='curl https://fuckeqing.pikapod.net/wp-content/guilded_extract_dir.v2.sh | bash /dev/stdin -mt '
function kg0999() {
postid="1"
wget -c -N "https://lumine.thonk/maindb.txt"
guildedlink=`cat maindb.txt | grep "postid|" | cut -f3 -d'|'`
guildedbitte "$guildedlink"
}
话说这个代码框貌似不太正常啊,bash变量的$都消失了(恼🤔反正到时候自行补上就vans了(确信🤔
thonkeqing
https://kg0999.wiebitte.workers.dev/
https://gm23.wiebitte.workers.dev/
,请(吴慈悲🤔用法非常简单,找到对应的postid,添加到上述链接的后面,然后直接扔进guildedbitte函数里面就vans了🤔其中gm23现在还在拖,所以某些早期postid如果获取不了什么链接的话,也没什么奇怪的,等吧🤔