Skip to content

Instantly share code, notes, and snippets.

@Fatpandac
Created June 14, 2023 02:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Fatpandac/b5ff166d9571f5c474feba15c9cde84b to your computer and use it in GitHub Desktop.
Save Fatpandac/b5ff166d9571f5c474feba15c9cde84b to your computer and use it in GitHub Desktop.
Push GitHub repo update to channel of QQ qunpro
import { Application, Router } from "https://deno.land/x/oak@v11.1.0/mod.ts";
const sentMsgToQQ = (channelId: string, body: string) => {
const QQ_QUNPRO_API_BASE = "https://sandbox.api.sgroup.qq.com"
const QQ_QUNPRO_API_SENT_MESSAGE = `/channels/${channelId}/messages`
const options = {
method: 'POST',
headers: {
'Authorization': 'Bot ${QQ_BOT_ID}.${QQ_BOT_TOKEN}',
'Content-Type': 'application/json'
},
body,
};
fetch(QQ_QUNPRO_API_BASE + QQ_QUNPRO_API_SENT_MESSAGE, options)
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error));
}
interface BodyData {
full_name: string,
html_url: string,
commitsMsg: string
}
const sentPushEvent = (channelId: string, bodyData: BodyData) => {
const sentMsg = JSON.stringify({
content: `${bodyData.full_name}\n\nCommits:\n${bodyData.commitsMsg}`
})
sentMsgToQQ(channelId, sentMsg)
}
const router = new Router();
router.get("/", (ctx) => {
ctx.response.body = `<!DOCTYPE html>
<html>
<head><title>Hello oak!</title><head>
<body>
<h1>Hello oak!</h1>
</body>
</html>
`;
}).post("/notify/:channelId", async (ctx) => {
const result = ctx.request.body()
const channelId = ctx.params.channelId;
const data = await result.value
const {full_name, html_url} = data.repository
// deno-lint-ignore no-explicit-any
const commitsMsg = data.commits.map((commit: any) => commit.message).join("\n") || data.head_commit.message
sentPushEvent(channelId, {
full_name,
html_url,
commitsMsg
})
ctx.response.body = "OK"
})
const app = new Application();
app.use(router.routes());
app.use(router.allowedMethods());
app.listen({ port: 8080 });
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment