서버리스 기능이 있는 웹후크
11694 단어 discordbotserverlesswebhook
소개
Habitica는 좋은 습관을 기르고 생산성을 높일 수 있는 훌륭한 플랫폼입니다. 그것의 사회적 측면은 또한 그것의 주요 특징 중 하나입니다. 사용자는 서로에게 책임을 묻기 위해 당사자를 구성할 수 있습니다. 모든 파티에는 사용자가 토론할 수 있고 시스템 메시지(사용된 기술, 처리된 손상, 시작된 퀘스트 등)가 게시되는 간단한 채팅 페이지가 있습니다. 그러나 채팅과 대화를 위한 소셜 공간을 만드는 데 있어 Discord는 현재 최고의 무료 솔루션입니다. 그래서 저희 일행과 저는 Discord 서버로 옮겼습니다. 문제는 시스템 메시지가 여전히 Habitica에 게시된다는 것입니다.
그래서 해당 메시지를 전용 Discord 채널에 자동으로 다시 게시하는 방법을 찾았습니다. 그리고 Discord와 Habitica 모두에서 제공하는 유연한 웹후크 덕분에 설정이 매우 쉽다는 것이 밝혀졌습니다.
1단계: Discord 봇 만들기
발신자 Discord's official instructions:
2단계: 서버리스 함수 만들기
Habitica는 Discord에 직접 게시할 수 없습니다. 우리는 중간자가 필요합니다. Zapier와 같은 코드 없는 솔루션은 깔끔하지만 여기서는 원하는 방식으로 메시지 형식을 지정하기 위해 요청에 대한 보다 세분화된 제어가 필요하며 서버리스 기능은 이 사용 사례에 이상적입니다.
다양한 클라우드 기능 제공업체가 있지만 이 프로젝트에서는 Cloudflare Workers을 사용해 보고 싶었습니다. Cloudflare Workers는 다른 공급자에 비해 두 가지 중요한 이점이 있습니다. 매우 저렴하고 시작 시간(콜드 스타트)이 거의 즉각적이므로 현재 프로젝트에 이러한 기능이 필요하지 않습니다.
Cloudflare는 서버리스 기능을 코딩할 수 있는 간단하면서도 편리한 온라인 코드 편집기도 제공합니다. 코드가 복잡하지 않기 때문에 온라인 편집기 내에서 직접 함수를 작성할 것입니다. 전체 코드는 다음과 같습니다.
async function handleRequest(request) {
try {
// See below the structure of the data object
const data = await request.json()
// Only repost system messages
if(data.chat.uuid === "system") {
// Discord expects a JSON payload that looks like this { content: 'hello world'}
const content = { "content": data.chat.text }
await fetch(DISCORD_WEBHOOK_URL, {
body: JSON.stringify(content),
method: "POST",
headers: { "Content-Type": "application/json" },
})
}
return new Response('OK')
} catch(error) {
console.error(error)
// Habitica always expects a 200 response, otherwise it will disable the webhook
return new Response('OK')
}
}
Habitica webhook에서 오는 게시물 요청의 본문은 다음과 같습니다.
{
"group": {
"id": "XXXXX-c888-4dbf-aa0e-fc317c9c8f8c",
"name": "super_squad "
},
"chat": {
"flagCount": 0,
"flags": {},
"_id": "03e9b0d6-XXX-442a-9659-fde24aec2842",
"id": "03e4b0d6-XXX-442a-9659-fde24aec2841",
"text": "mornir casts Earthquake for the party.",
"unformattedText": "mornir casts Earthquake for the party.",
"info": {
"type": "spell_cast_party",
"user": "mornir",
"class": "wizard",
"spell": "earth"
},
"timestamp": "2021-03-10T17:00:40.141Z",
"likes": {},
"uuid": "system",
"groupId": "5f38dbe06649-555-aa0e-fc317c9cbf8c"
},
"webhookType": "groupChatReceived",
"user": { "_id": "5454544ea-134d-4e37-XXX-310351b35729" }
}
DISCORD_WEBHOOK_URL
는 1단계에서 얻은 Webhook URL이며 여기에 환경 변수로 저장됩니다.3단계: Habitica 웹후크 생성
webhook 생성을 위한 공식 UI인 on the settings page 은 what is available on the Habitica API 에 비해 약간 부족합니다. URL 추가 및 삭제만 가능하지만 우리의 경우 특정 대화방에서 발생하는 특정 이벤트를 듣고 싶습니다. 그렇기 때문에 Habitica 웹후크용 대체 편집기를 사용했는데, 여기에는 메인 사이트에 없는 모든 웹후크 옵션이 포함되어 있습니다.
웹사이트: https://robwhitaker.com/habitica-webhook-editor/
문서: https://habitica.fandom.com/wiki/Habitica_Webhook_Editor
그러면 새로 생성된 후크가 우리의 Habitica account settings page에 나타납니다.
결과
짜잔! 이제 시스템 메시지를 다시 게시하는 작동하는 Habitica 봇이 있습니다!
물론 우리가 할 수 있는 일은 훨씬 더 많습니다! 다음은 몇 가지 아이디어입니다.
Cloudflare Workers를 사용하면 store data inside a database . 함수 호출 사이에 지속되는 정보가 있으면 새롭고 흥미로운 가능성이 열립니다!
Reference
이 문제에 관하여(서버리스 기능이 있는 웹후크), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mornir/webhooks-with-serverless-function-2h5k텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)