-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchatwork-el-ng.ts
65 lines (53 loc) · 1.54 KB
/
chatwork-el-ng.ts
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
import { get, post } from "./api.ts";
declare var lisp: any;
type Room = {
name: string;
id: number;
};
type Rooms = Room[];
const API_BASE_URL = "https://api.chatwork.com/v2";
function chatworkSelectRoom(rooms: Rooms) {
const selectedRoomName = lisp.completing_read(
"Room: ",
lisp.make.list(rooms.map((r) => r.name)),
);
const selectedRoom = rooms.find((r) => r.name === selectedRoomName);
if (!selectedRoom) {
throw new Error();
}
return selectedRoom.id;
}
async function chatworkPostMessage(
message: string,
roomId: number,
): Promise<void> {
const url = `${API_BASE_URL}/rooms/${roomId}/messages`;
const apiToken = lisp.eval(lisp.symbols["chatwork-ng-token"]) as string;
const data = {
body: message,
self_unread: "0",
};
await post(url, apiToken, data);
}
async function chatworkGetRooms() {
const url = `${API_BASE_URL}/rooms`;
const apiToken = lisp.eval(lisp.symbols["chatwork-ng-token"]) as string;
const res = await get(url, apiToken);
const roomsResponse = await res.json();
const rooms: Rooms = roomsResponse.map((roomResponse: any) => ({
name: roomResponse["name"],
id: roomResponse["room_id"],
}));
return rooms;
}
lisp.defvar(lisp.symbols["chatwork-ng-token"], "ChatWork API Token.");
lisp.defun({
name: "chatwork-ng-send-message",
interactive: true,
args: "sMessage: ",
func: async (message: string) => {
const rooms = await chatworkGetRooms();
const selectRoomId = chatworkSelectRoom(rooms);
await chatworkPostMessage(message, selectRoomId);
},
});