Files
tetsuya-kitayama b627224308 init
2026-05-18 10:19:19 +09:00

102 lines
3.3 KiB
JavaScript

const puppeteer = require('puppeteer');
// PushbulletのAPIキー
const ACCESS_TOKEN = 'o.3XaeWgYySjWXiDT5kRrKT6VOJ1nELHns'; // ここにPushbulletのAPIキーを入力
// 通知を送信する関数
async function sendPushbulletNotification(title, message) {
const url = 'https://api.pushbullet.com/v2/pushes';
const payload = {
type: 'note', // 通知のタイプ(note: 通常の通知)
title: title, // 通知のタイトル
body: message, // 通知の本文
};
try {
const response = await fetch(url, {
method: 'POST',
headers: {
'Access-Token': ACCESS_TOKEN,
'Content-Type': 'application/json',
},
body: JSON.stringify(payload),
});
if (!response.ok) {
throw new Error(`HTTPエラー: ${response.status}`);
}
const data = await response.json();
console.log('通知が送信されました:', data);
} catch (error) {
console.error('通知の送信中にエラーが発生しました:', error.message);
}
}
(async () => {
// ブラウザを起動
const browser = await puppeteer.launch({
headless: true,
executablePath: '/usr/bin/chromium-browser'
});
const page = await browser.newPage();
// チャットサイトにアクセス
await page.goto('https://chat.luvul.net/ChatRoom?room_id=401175');
//await page.goto('https://chat.luvul.net/ChatRoom?room_id=131694');
// チャットコンテナのセレクタ
const chatContainerSelector = '#chatlogarea'; // 適切なセレクタに置き換え
// チャットコンテナがロードされるまで待機
await page.waitForSelector(chatContainerSelector);
console.log('チャットの監視を開始します');
// 以前のメッセージを追跡するためのセット
const previousMessages = new Set();
// チャットの監視
await page.exposeFunction('onNewMessage', (message) => {
let r = message.search(/しました/);
console.log(r);
if (message.search(/しました/) !== -1) {
// 通知を送信
sendPushbulletNotification('通知タイトル', message);
}
console.log('新しいメッセージ:', message);
});
await page.evaluate((chatContainerSelector) => {
const chatContainer = document.querySelector(chatContainerSelector);
if (chatContainer) {
const previousMessages = new Set();
// MutationObserverを設定
const observer = new MutationObserver((mutationsList) => {
for (const mutation of mutationsList) {
if (mutation.type === 'childList') {
mutation.addedNodes.forEach((node) => {
if (node.nodeType === Node.ELEMENT_NODE) {
const messageText = node.textContent.trim();
if (!previousMessages.has(messageText)) {
previousMessages.add(messageText);
window.onNewMessage(messageText); // 新しいメッセージを通知
}
}
});
}
}
});
// 監視を開始
observer.observe(chatContainer, { childList: true, subtree: true });
}
}, chatContainerSelector);
// スクリプトを終了しないように待機
await new Promise(() => {});
})();