From 9d7f82d117a55a2128cc247574dc67f265324a77 Mon Sep 17 00:00:00 2001 From: na2na <49822810+na2na-p@users.noreply.github.com> Date: Sat, 12 Feb 2022 13:23:38 +0900 Subject: [PATCH] =?UTF-8?q?=E3=81=94=E3=81=AF=E3=82=93=E3=81=95=E3=83=BC?= =?UTF-8?q?=E3=81=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 4 +++ src/index.ts | 2 ++ src/modules/menu/index.ts | 62 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 src/modules/menu/index.ts diff --git a/package.json b/package.json index 84db823..49d11c9 100644 --- a/package.json +++ b/package.json @@ -20,10 +20,12 @@ "autobind-decorator": "2.4.0", "canvas": "2.8.0", "chalk": "4.1.1", + "jsdom": "19.0.0", "lokijs": "1.5.12", "memory-streams": "0.1.3", "misskey-reversi": "0.0.5", "module-alias": "2.2.2", + "node-fetch": "2.6.7", "promise-retry": "2.0.1", "random-seed": "0.3.0", "reconnecting-websocket": "4.4.0", @@ -40,8 +42,10 @@ "devDependencies": { "@koa/router": "9.4.0", "@types/jest": "26.0.23", + "@types/jsdom": "16.2.14", "@types/koa": "2.13.1", "@types/koa__router": "8.0.4", + "@types/node-fetch": "3.0.3", "@types/websocket": "1.0.2", "jest": "26.6.3", "koa": "2.13.1", diff --git a/src/index.ts b/src/index.ts index 96c5c8b..5ecb258 100644 --- a/src/index.ts +++ b/src/index.ts @@ -35,6 +35,7 @@ import NotingModule from './modules/noting'; import PollModule from './modules/poll'; import ReminderModule from './modules/reminder'; import DicModule from './modules/dic'; +import menuModule from './modules/menu'; import GetColorModule from './modules/color'; console.log(' __ ____ _____ ___ '); @@ -91,6 +92,7 @@ promiseRetry(retry => { new PollModule(), new ReminderModule(), new DicModule(), + new menuModule(), new GetColorModule(), ]); }).catch(e => { diff --git a/src/modules/menu/index.ts b/src/modules/menu/index.ts new file mode 100644 index 0000000..42b950f --- /dev/null +++ b/src/modules/menu/index.ts @@ -0,0 +1,62 @@ +import autobind from 'autobind-decorator'; +import Module from '@/module'; +import Message from '@/message'; +import fetch from 'node-fetch'; +import { JSDOM } from 'jsdom'; +import { title } from 'process'; + +export default class extends Module { + public readonly name = 'menu'; + + @autobind + public install() { + return { + mentionHook: this.mentionHook + }; + } + + @autobind + private async mentionHook(msg: Message) { + if (msg.text && msg.text.includes('ごはん')) { + // 1~2535111の適当な数字を取得 + const random_number = Math.floor(Math.random() * 2535111) + 1; + const url = `https://cookpad.com/recipe/${random_number}`; + //testUrlして、200以外なら再取得 + const res = await fetch(url); + if (res.status !== 200) { + return this.mentionHook(msg); + } else { + //jsdomを利用してレシピのタイトルを取得 + const dom = new JSDOM(await res.text()); + //@ts-ignore + let title = dom.window.document.querySelector('h1.recipe-title').textContent; + // titleから改行を除去 + title = title!.replace(/\n/g, ''); + msg.reply(`こんなのどう?> [${title}](${url})`, { + immediate: true + }); + return true; + } + } else { + return false; + } + } +} + +function testUrl(url: string) { + return new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest() + xhr.open('GET', url) + xhr.onload = () => { + if (xhr.status === 200) { + resolve(true) + } else { + reject(false) + } + } + xhr.onerror = () => { + reject(false) + } + xhr.send() + }) +} \ No newline at end of file