-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy path2-2_react_to_keywords.js
67 lines (57 loc) · 1.95 KB
/
2-2_react_to_keywords.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import { currUnixtime, getCliArg } from "./utils.js";
import {
relayInit,
getPublicKey,
finishEvent
} from "nostr-tools";
import "websocket-polyfill";
/* Bot用の秘密鍵をここに設定 */
const BOT_PRIVATE_KEY_HEX = ???;
const relayUrl = "wss://relay-jp.nostr.wirednet.jp";
/**
* リアクションイベントを組み立てる
* @param {import("nostr-tools").Event} targetEvent リアクション対象のイベント
*/
const composeReaction = (targetEvent) => {
/* Q-1: リアクションイベントのフィールドを埋めよう */
const ev = {
kind: ???,
content: ???,
tags: ???,
created_at: currUnixtime(),
};
// イベントID(ハッシュ値)計算・署名
return finishEvent(ev, BOT_PRIVATE_KEY_HEX);
};
// リレーにイベントを送信
const publishToRelay = (relay, ev) => {
const pub = relay.publish(ev);
pub.on("ok", () => {
console.log("succeess!");
});
pub.on("failed", () => {
console.log("failed to send event");
});
};
const main = async (targetWord) => {
const relay = relayInit(relayUrl);
relay.on("error", () => {
console.error("failed to connect");
});
await relay.connect();
/* Q-2: すべてのテキスト投稿を購読しよう */
const sub = ???;
sub.on("event", (ev) => {
try {
/* Q-3: 「受信した投稿のcontentに対象の単語が含まれていたら、
その投稿イベントにリアクションする」ロジックを完成させよう */
// ヒント: ある文字列に指定の単語が含まれているかを判定するには、includes()メソッドを使うとよいでしょう
???;
} catch (err) {
console.error(err);
}
});
};
// コマンドライン引数をリアクション対象の単語とする
const targetWord = getCliArg("error: リアクション対象の単語をコマンドライン引数として設定してください");
main(targetWord).catch((e) => console.error(e));