buzzk 1.1.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,9 +1,9 @@
1
- <img src="https://github.com/Emin-G/Img/blob/main/buzzk/buzzk_pamplet.gif?raw=true" alt="BuzzkThumb" width="100%">
1
+ <img src="https://github.com/Emin-G/Img/blob/main/buzzk/buzzk_pamplet.gif?raw=true" alt="BuzzkThumb" width="100%">
2
2
 
3
3
  # 뿌지직
4
4
 
5
5
  <p align="center">
6
- <img src="https://github.com/Emin-G/Img/blob/main/buzzk/buzzk_favi-min.png?raw=true" alt="BUZZK" width="30%">
6
+ <img src="https://github.com/Emin-G/Img/blob/main/buzzk/buzzk_favi-min.png?raw=true" alt="BUZZK" width="30%">
7
7
  </p>
8
8
 
9
9
  <p align="center">
@@ -15,8 +15,20 @@
15
15
 
16
16
  ---
17
17
 
18
- ## 업데이트 내역
18
+ ## 📖 업데이트 내역
19
19
 
20
+ - 함수 이름 수정
21
+
22
+ **하단의 1.3.0 마이그레이션 가이드 참고**
23
+
24
+ >
25
+
26
+ - channelID로 채널 정보 가져오기 함수 추가
27
+ - ws 라이브러리 종속성 추가
28
+
29
+ >
30
+
31
+ - 자동완성 기능 지원
20
32
  - 팔로우 / 언팔로우 기능 추가
21
33
  - live.getLiveDetail의 Return 값에 chatLimit 추가 (팔로우 대상 채팅 등...)
22
34
  - 폴링 함수 추가 (chatID 변경 감지)
@@ -24,12 +36,75 @@
24
36
  - chat.disconnect 함수 보완
25
37
  - 버전 체크 함수 추가
26
38
 
27
- ## 설치
39
+ ## ✒️ 마이그레이션 가이드 (v.1.3.0)
40
+
41
+ <details>
42
+ <summary>펼쳐보기</summary>
43
+
44
+ buzzk.channel
45
+
46
+ | <img src="https://github.com/Emin-G/Img/blob/main/tags/tag_change-min.png?raw=true" alt="BUZZK" width="70"> | buzzk.channel.getChannel |
47
+ |--|--|
48
+ | | buzzk.channel.search |
49
+
50
+ ---
51
+
52
+ | <img src="https://github.com/Emin-G/Img/blob/main/tags/tag_change-min.png?raw=true" alt="BUZZK" width="70"> | buzzk.channel.followChannel |
53
+ |--|--|
54
+ | | buzzk.channel.follow |
55
+
56
+ ---
57
+
58
+ | <img src="https://github.com/Emin-G/Img/blob/main/tags/tag_change-min.png?raw=true" alt="BUZZK" width="70"> | buzzk.channel.unFollowChannel |
59
+ |--|--|
60
+ | | buzzk.channel.unFollow |
61
+
62
+ ---
63
+
64
+ buzzk.live
65
+
66
+ | <img src="https://github.com/Emin-G/Img/blob/main/tags/tag_change-min.png?raw=true" alt="BUZZK" width="70"> | buzzk.live.getLiveDetail |
67
+ |--|--|
68
+ | | buzzk.live.getDetail |
69
+
70
+ ---
71
+
72
+ | <img src="https://github.com/Emin-G/Img/blob/main/tags/tag_change-min.png?raw=true" alt="BUZZK" width="70"> | buzzk.live.getLiveStatus |
73
+ |--|--|
74
+ | | buzzk.live.getStatus |
75
+
76
+ ---
77
+
78
+ buzzk.live.getDetail (getLiveDetail)
79
+
80
+ | <img src="https://github.com/Emin-G/Img/blob/main/tags/tag_change-min.png?raw=true" alt="BUZZK" width="70"> | (return).channel.channelName |
81
+ |--|--|
82
+ | | (return).channel.name |
83
+
84
+ ---
85
+
86
+ | <img src="https://github.com/Emin-G/Img/blob/main/tags/tag_change-min.png?raw=true" alt="BUZZK" width="70"> | (return).channel.channelImageUrl |
87
+ |--|--|
88
+ | | (return).channel.imageURL |
89
+
90
+ ---
91
+
92
+ | <img src="https://github.com/Emin-G/Img/blob/main/tags/tag_delete-min.png?raw=true" alt="BUZZK" width="70"> | (return).channel.channelId |
93
+ |--|--|
94
+
95
+ ---
96
+
97
+ | <img src="https://github.com/Emin-G/Img/blob/main/tags/tag_delete-min.png?raw=true" alt="BUZZK" width="70"> | (return).channel.verifiedMark |
98
+ |--|--|
99
+
100
+ </details>
101
+
102
+ ## 👋 설치
28
103
 
29
104
  1. `npm install buzzk`
30
105
  2. `const buzzk = require("buzzk");`
31
106
 
32
- ## 빠른. 시작.
107
+ ## 🔥 빠른. 시작.
33
108
 
34
109
  const buzzk = require("buzzk");
35
110
  buzzk.login("NID_AUT 쿠키 값", "NID_SES 쿠키 값");
@@ -38,11 +113,11 @@
38
113
 
39
114
  async function test () {
40
115
 
41
- let chSearch = await buzzk.channel.getChannel("녹두로로"); //채널 검색
116
+ let chSearch = await buzzk.channel.search("녹두로로"); //채널 검색
42
117
 
43
118
  let channel = chSearch[0]; //검색 결과 첫번째 채널
44
119
 
45
- const lvDetail = await buzzk.live.getLiveDetail(channel.channelID); //현재 방송 정보
120
+ const lvDetail = await buzzk.live.getDetail(channel.channelID); //현재 방송 정보
46
121
 
47
122
  let chat = new buzzkChat(channel.channelID);
48
123
  await chat.connect(); //채팅창 연결
@@ -50,7 +125,7 @@
50
125
  let recentChat = await chat.getRecentChat(); //최근 채팅 가져오기 (기본값 50개)
51
126
  console.log(recentChat);
52
127
 
53
- chat.onMessage((data) => { //채팅이 왔을 때
128
+ chat.onMessage(async (data) => { //채팅이 왔을 때
54
129
  for (let o in data) {
55
130
  console.log(data[o].message);
56
131
 
@@ -63,9 +138,9 @@
63
138
 
64
139
  test();
65
140
 
66
- ## 사용법
141
+ ## 🎀 사용법
67
142
 
68
- > login
143
+ ### login
69
144
 
70
145
  buzzk.login("NID_AUT 쿠키 값", "NID_SES 쿠키 값");
71
146
 
@@ -75,13 +150,34 @@ dotenv와 함께 사용하는 것을 매우 권장합니다.
75
150
 
76
151
  ---
77
152
 
78
- > channel
153
+ ### channel
79
154
 
80
- let chSearch = await buzzk.channel.getChannel("녹두로로");
155
+ let chSearch = await buzzk.channel.search("녹두로로");
81
156
  console.log(chSearch);
82
157
 
83
158
  <details>
84
- <summary>Return 값 보기</summary>
159
+ <summary>return</summary>
160
+
161
+ - Return
162
+ - 0
163
+ - channelID
164
+ - name
165
+ - description
166
+ - follower
167
+ - imageURL
168
+ - isLive
169
+ - 1
170
+ - 2
171
+ - 3
172
+ - ...
173
+
174
+ </details>
175
+
176
+ let channel = await buzzk.channel.get("channelID 값");
177
+ console.log(channel);
178
+
179
+ <details>
180
+ <summary>return</summary>
85
181
 
86
182
  - Return
87
183
  - channelID
@@ -93,25 +189,27 @@ dotenv와 함께 사용하는 것을 매우 권장합니다.
93
189
 
94
190
  </details>
95
191
 
96
- await buzzk.channel.followChannel("channelID 값");
192
+ await buzzk.channel.follow("channelID 값");
97
193
 
98
194
  >
99
195
 
100
- await buzzk.channel.unFollowChannel("channelID 값");
196
+ await buzzk.channel.unFollow("channelID 값");
101
197
 
102
198
  ---
103
199
 
104
- > live
200
+ ### live
105
201
 
106
- const lvDetail = await buzzk.live.getLiveDetail("channelID 값");
202
+ const lvDetail = await buzzk.live.getDetail("channelID 값");
107
203
  console.log(lvDetail);
108
204
 
109
205
  <details>
110
- <summary>Return 값 보기</summary>
206
+ <summary>return</summary>
111
207
 
112
208
  - Return
113
209
  - channelID
114
210
  - channel
211
+ - name
212
+ - imageURL
115
213
  - chatID
116
214
  - chatLimit //팔로워 전용 채팅 등...
117
215
  - userCount
@@ -125,11 +223,11 @@ dotenv와 함께 사용하는 것을 매우 권장합니다.
125
223
 
126
224
  </details>
127
225
 
128
- const lvStatus = await buzzk.live.getLiveStatus("channelID 값");
226
+ const lvStatus = await buzzk.live.getStatus("channelID 값");
129
227
  console.log(lvStatus);
130
228
 
131
229
  <details>
132
- <summary>Return 값 보기</summary>
230
+ <summary>return</summary>
133
231
 
134
232
  - Return
135
233
  - channelID
@@ -145,7 +243,7 @@ dotenv와 함께 사용하는 것을 매우 권장합니다.
145
243
 
146
244
  ---
147
245
 
148
- > chat
246
+ ### chat
149
247
 
150
248
  const buzzkChat = buzzk.chat;
151
249
  let chat = new buzzkChat("channelID 값");
@@ -157,7 +255,7 @@ dotenv와 함께 사용하는 것을 매우 권장합니다.
157
255
  console.log(recentChat);
158
256
 
159
257
  <details>
160
- <summary>Return 값 보기</summary>
258
+ <summary>return</summary>
161
259
 
162
260
  - Return
163
261
  - 0
@@ -183,7 +281,7 @@ dotenv와 함께 사용하는 것을 매우 권장합니다.
183
281
  });
184
282
 
185
283
  <details>
186
- <summary>Return 값 보기</summary>
284
+ <summary>callback</summary>
187
285
 
188
286
  - Return
189
287
  - 0
package/lib/channel.js CHANGED
@@ -11,7 +11,25 @@ class chzzkChannel {
11
11
  }
12
12
  }
13
13
 
14
- async function getChannel (keyword) {
14
+ /**
15
+ * @typedef {Object.<number, chzzkChannel>} chzzkChannels
16
+ */
17
+
18
+ /**
19
+ * @typedef {Object} chzzkChannel
20
+ * @property {string} channelID
21
+ * @property {string} name
22
+ * @property {string} description
23
+ * @property {string} follower
24
+ * @property {string} imageURL
25
+ * @property {boolean} isLive
26
+ */
27
+
28
+ /**
29
+ * @param {string} keyword
30
+ * @returns {Promise<chzzkChannels>}
31
+ */
32
+ async function search (keyword) {
15
33
  return new Promise(async (resolve, reject) => {
16
34
 
17
35
  let chSearch = await reqChzzk("service/v1/search/channels?keyword=" + keyword + "&offset=0&size=13&withFirstChannelContent=false");
@@ -32,7 +50,30 @@ async function getChannel (keyword) {
32
50
  });
33
51
  }
34
52
 
35
- async function followChannel (channelID) {
53
+
54
+ /**
55
+ * @param {string} channelID
56
+ * @returns {Promise<chzzkChannel>}
57
+ */
58
+ async function get (channelID) {
59
+ return new Promise(async (resolve, reject) => {
60
+
61
+ let chGet = await reqChzzk("service/v1/channels/" + channelID);
62
+ if (chGet.code != 200) return resolve(null);
63
+ chGet = chGet.content;
64
+
65
+ let chRes = new chzzkChannel(chGet.channelId, chGet.channelName, chGet.channelDescription, chGet.followerCount, chGet.channelImageUrl, chGet.openLive);
66
+
67
+ return resolve(chRes);
68
+
69
+ });
70
+ }
71
+
72
+ /**
73
+ * @param {string} channelID
74
+ * @returns {Promise<boolean>}
75
+ */
76
+ async function follow (channelID) {
36
77
  return new Promise(async (resolve, reject) => {
37
78
 
38
79
  let flRes = await exChzzk("POST", "service/v1/channels/" + channelID + "/follow");
@@ -42,7 +83,11 @@ async function followChannel (channelID) {
42
83
  });
43
84
  }
44
85
 
45
- async function unFollowChannel (channelID) {
86
+ /**
87
+ * @param {string} channelID
88
+ * @returns {Promise<boolean>}
89
+ */
90
+ async function unFollow (channelID) {
46
91
  return new Promise(async (resolve, reject) => {
47
92
 
48
93
  let flRes = await exChzzk("DELETE", "service/v1/channels/" + channelID + "/follow");
@@ -53,7 +98,8 @@ async function unFollowChannel (channelID) {
53
98
  }
54
99
 
55
100
  module.exports = {
56
- getChannel: getChannel,
57
- followChannel: followChannel,
58
- unFollowChannel: unFollowChannel
101
+ search: search,
102
+ get: get,
103
+ follow: follow,
104
+ unFollow: unFollow
59
105
  }
package/lib/chat.js CHANGED
@@ -1,4 +1,4 @@
1
- const { getLiveStatus } = require("./live.js");
1
+ const { getStatus } = require("./live.js");
2
2
  const { reqGame } = require("./tool.js");
3
3
 
4
4
  const { WebSocket } = require("ws");
@@ -19,12 +19,15 @@ class chzzkChat {
19
19
  #pollingStatus = false;
20
20
  //Private
21
21
 
22
+ /**
23
+ * @returns {Promise<boolean>}
24
+ */
22
25
  connect() {
23
26
  return new Promise(async (resolve, reject) => {
24
27
  if (this.#ws) return resolve(null);
25
28
 
26
29
  //Get ChatID
27
- let cidRes = await getLiveStatus(this.channelID);
30
+ let cidRes = await getStatus(this.channelID);
28
31
  this.#chatID = cidRes.chatID;
29
32
  //Get ChatID
30
33
 
@@ -105,6 +108,10 @@ class chzzkChat {
105
108
  });
106
109
  }
107
110
 
111
+ /**
112
+ * @param {string} message
113
+ * @returns {Promise<boolean>}
114
+ */
108
115
  send(message) {
109
116
  return new Promise(async (resolve, reject) => {
110
117
  if (!this.#ws) return resolve(null);
@@ -143,6 +150,27 @@ class chzzkChat {
143
150
  });
144
151
  }
145
152
 
153
+ /**
154
+ * @typedef {Object.<number, chzzkMessage>} chzzkMessages
155
+ */
156
+
157
+ /**
158
+ * @typedef {Object} chzzkMessage
159
+ * @property {chzzkMessageAuthor} author
160
+ * @property {string} message
161
+ * @property {number} time
162
+ */
163
+
164
+ /**
165
+ * @typedef {Object} chzzkMessageAuthor
166
+ * @property {string} id
167
+ * @property {string} name
168
+ * @property {string} imageURL
169
+ */
170
+
171
+ /**
172
+ * @param {function(chzzkMessages)} callback
173
+ */
146
174
  onMessage(callback) {
147
175
  if (!this.#ws) return callback(null);
148
176
 
@@ -174,6 +202,10 @@ class chzzkChat {
174
202
  });
175
203
  }
176
204
 
205
+ /**
206
+ * @param {?number} size
207
+ * @return {Promise<chzzkMessages>}
208
+ */
177
209
  getRecentChat(size) {
178
210
  return new Promise(async (resolve, reject) => {
179
211
  if (!this.#ws) return resolve(null);
@@ -221,6 +253,9 @@ class chzzkChat {
221
253
  });
222
254
  }
223
255
 
256
+ /**
257
+ * @returns {Promise<boolean>}
258
+ */
224
259
  async disconnect() {
225
260
  return new Promise(async (resolve, reject) => {
226
261
  if (!this.#ws) return resolve(null);
@@ -236,7 +271,7 @@ class chzzkChat {
236
271
  this.#pollingStatus = true;
237
272
 
238
273
  //Get ChatID
239
- let cidRes = await getLiveStatus(this.channelID);
274
+ let cidRes = await getStatus(this.channelID);
240
275
  this.#chatID = cidRes.chatID;
241
276
  //Get ChatID
242
277
 
package/lib/live.js CHANGED
@@ -1,6 +1,37 @@
1
1
  const { reqChzzk } = require("./tool.js");
2
2
 
3
- async function getLiveDetail (channelID) {
3
+ /**
4
+ * @typedef {Object} chzzkLiveDetail
5
+ * @property {string} channelID
6
+ * @property {channelInfo} channel
7
+ * @property {string} chatID
8
+ * @property {string} chatLimit
9
+ * @property {userCount} userCount
10
+ * @property {string} title
11
+ * @property {string} startOn
12
+ * @property {string} closeOn
13
+ * @property {string} status
14
+ * @property {Object} polling
15
+ *
16
+ */
17
+
18
+ /**
19
+ * @typedef {Object} channelInfo
20
+ * @property {string} name
21
+ * @property {string} imageURL
22
+ */
23
+
24
+ /**
25
+ * @typedef {Object} userCount
26
+ * @property {number} now
27
+ * @property {number} total
28
+ */
29
+
30
+ /**
31
+ * @param {string} channelID
32
+ * @returns {Promise<chzzkLiveDetail>}
33
+ */
34
+ async function getDetail (channelID) {
4
35
  return new Promise(async (resolve, reject) => {
5
36
 
6
37
  let res = await reqChzzk("service/v2/channels/" + channelID + "/live-detail");
@@ -9,7 +40,7 @@ async function getLiveDetail (channelID) {
9
40
 
10
41
  let lvDetail = {
11
42
  channelID: res.channel.channelId,
12
- channel: res.channel,
43
+ channel: { name: res.channel.channelName, imageURL: res.channel.channelImageUrl },
13
44
  chatID: res.chatChannelId,
14
45
  chatLimit: res.chatAvailableGroup,
15
46
  userCount: { now: res.concurrentUserCount, total: res.accumulateCount },
@@ -25,7 +56,22 @@ async function getLiveDetail (channelID) {
25
56
  });
26
57
  }
27
58
 
28
- async function getLiveStatus (channelID) {
59
+ /**
60
+ * @typedef {Object} chzzkLiveStatus
61
+ * @property {string} channelID
62
+ * @property {string} chatID
63
+ * @property {userCount} userCount
64
+ * @property {string} title
65
+ * @property {string} status
66
+ * @property {Object} polling
67
+ *
68
+ */
69
+
70
+ /**
71
+ * @param {string} channelID
72
+ * @returns {Promise<chzzkLiveStatus>}
73
+ */
74
+ async function getStatus (channelID) {
29
75
  return new Promise(async (resolve, reject) => {
30
76
 
31
77
  let res = await reqChzzk("polling/v2/channels/" + channelID + "/live-status");
@@ -47,6 +93,6 @@ async function getLiveStatus (channelID) {
47
93
  }
48
94
 
49
95
  module.exports = {
50
- getLiveDetail: getLiveDetail,
51
- getLiveStatus: getLiveStatus
96
+ getDetail: getDetail,
97
+ getStatus: getStatus
52
98
  }
package/lib/val.js CHANGED
@@ -6,6 +6,10 @@ let NID = {
6
6
  SES: null
7
7
  }
8
8
 
9
+ /**
10
+ * @param {string} NID_AUT
11
+ * @param {string} NID_SES
12
+ */
9
13
  function login (NID_AUT, NID_SES) {
10
14
  NID.AUT = NID_AUT;
11
15
  NID.SES = NID_SES;
package/lib/vm.js CHANGED
@@ -11,7 +11,7 @@ async function check () {
11
11
  remotePkg = String(remotePkg.version).split(".");
12
12
 
13
13
  for (let v in remotePkg) {
14
- if (parseInt(remotePkg[v]) > parseInt(localPkg[v])) return console.log("[BUZZK] 새로운 버전을 찾았습니다! ( 현재 버전 : " + localPkg.join(".") + " / 새로운 버전 : " + remotePkg.join(".") + " )");
14
+ if (parseInt(remotePkg[v]) > parseInt(localPkg[v])) return console.log("[BUZZK] 새로운 버전을 찾았습니다! ( npm install buzzk@" + remotePkg.join(".") + " )");
15
15
  }
16
16
  }
17
17
 
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "buzzk",
3
3
  "displayName": "BUZZK",
4
- "version": "1.1.0",
4
+ "version": "1.3.0",
5
5
  "description": "뿌지직 (BUZZK) - 치지직(CHZZK) 챗봇을 더욱 쉽게 개발할 수 있도록 돕는 비공식 라이브러리.",
6
6
  "main": "lib/index.js",
7
+ "type": "commonjs",
7
8
  "directories": {
8
9
  "lib": "lib"
9
10
  },
@@ -23,5 +24,13 @@
23
24
  "url": "https://github.com/Emin-G/buzzk/issues"
24
25
  },
25
26
  "homepage": "https://github.com/Emin-G/buzzk",
26
- "keywords": ["chzzk", "buzzk", "치지직", "뿌지직"]
27
+ "keywords": [
28
+ "chzzk",
29
+ "buzzk",
30
+ "치지직",
31
+ "뿌지직"
32
+ ],
33
+ "dependencies": {
34
+ "ws": "^8.16.0"
35
+ }
27
36
  }