@@ -32,7 +32,8 @@ void on_cycle(struct discord *client) {
32
32
}
33
33
34
34
void on_text (void * data , struct websockets * ws , struct ws_info * info , const char * text , size_t len ) {
35
- (void ) ws ; (void ) info ;
35
+ (void )ws ; (void )info ;
36
+ printf ("%s\n" , text );
36
37
37
38
jsmn_parser parser ;
38
39
jsmntok_t tokens [1024 ];
@@ -106,39 +107,224 @@ void on_text(void *data, struct websockets *ws, struct ws_info *info, const char
106
107
}
107
108
return ;
108
109
} else {
109
- struct discord_embed embed [] = {
110
- {
111
- .description = "The music has ended." ,
112
- .image =
113
- & (struct discord_embed_image ){
114
- .url = "https://raw.githubusercontent.com/Cogmasters/concord/master/docs/static/social-preview.png" ,
115
- },
116
- .footer =
117
- & (struct discord_embed_footer ){
118
- .text = "Powered by Concord" ,
119
- .icon_url = "https://raw.githubusercontent.com/Cogmasters/concord/master/docs/static/concord-small.png" ,
110
+ long long channelID = sqlite3_column_int64 (stmt , 0 );
111
+
112
+ if (sqlite3_finalize (stmt ) != SQLITE_OK ) {
113
+ log_fatal ("[SQLITE] Error while executing function sqlite3_finalize." );
114
+ return ;
115
+ }
116
+
117
+ query = sqlite3_mprintf ("SELECT array FROM guild_queue WHERE guild_id = %.*s;" , (int )guildId -> v .len , text + guildId -> v .pos );
118
+ rc = sqlite3_prepare_v2 (db , query , -1 , & stmt , NULL );
119
+
120
+ sqlite3_free (query );
121
+
122
+ (rc = sqlite3_step (stmt ));
123
+
124
+ log_warn ("%s\n" , sqlite3_column_text (stmt , 0 ));
125
+
126
+ if (rc == SQLITE_ROW ) {
127
+ char json [1024 ];
128
+ snprintf (json , sizeof (json ), "%s" , sqlite3_column_text (stmt , 0 ));
129
+
130
+ jsmn_parser parser ;
131
+ jsmntok_t tokens [1024 ];
132
+
133
+ jsmn_init (& parser );
134
+ int r = jsmn_parse (& parser , json , sizeof (json ), tokens , sizeof (tokens ));
135
+
136
+ if (r < 0 ) {
137
+ log_error ("[JSMNF] Failed to parse JSON." );
138
+ return ;
139
+ }
140
+
141
+ jsmnf_loader loader ;
142
+ jsmnf_pair pairs [1024 ];
143
+
144
+ jsmnf_init (& loader );
145
+ r = jsmnf_load (& loader , json , tokens , parser .toknext , pairs , 1024 );
146
+
147
+ if (r < 0 ) {
148
+ log_error ("[JSMNF] Failed to load JSMNF." );
149
+ return ;
150
+ }
151
+
152
+ if (sqlite3_finalize (stmt ) != SQLITE_OK ) {
153
+ log_fatal ("[SQLITE] Error while executing function sqlite3_finalize." );
154
+ return ;
155
+ }
156
+
157
+ jsmnf_pair * nTrack = & pairs -> fields [1 ];
158
+
159
+ char pJ [1024 ];
160
+ snprintf (pJ , sizeof (pJ ), "{\"op\":\"play\",\"guildId\":\"%.*s\",\"track\":\"%.*s\",\"noReplace\":false,\"pause\":false}" , (int )guildId -> v .len , text + guildId -> v .pos , (int )nTrack -> v .len , json + nTrack -> v .pos );
161
+
162
+ sendPayload (pJ , "play" );
163
+
164
+ jsonb b ;
165
+ char qbuf [1024 ];
166
+
167
+ jsonb_init (& b );
168
+ jsonb_array (& b , qbuf , sizeof (qbuf ));
169
+
170
+ if (pairs -> size == 1 ) {
171
+ char * msgErr = NULL ;
172
+
173
+ query = sqlite3_mprintf ("DELETE FROM guild_queue WHERE guild_id = %.*s;" , (int )guildId -> v .len , text + guildId -> v .pos );
174
+ rc = sqlite3_exec (db , query , NULL , NULL , & msgErr );
175
+
176
+ sqlite3_free (query );
177
+
178
+ if (rc != SQLITE_OK ) {
179
+ log_fatal ("[SYSTEM] Something went wrong while deleting guild_queue table from guild_id. [%s]" , msgErr );
180
+ if (sqlite3_close (db ) != SQLITE_OK ) {
181
+ log_fatal ("[SQLITE] Failed to close sqlite db. [%s]" , sqlite3_errmsg (db ));
182
+ }
183
+ return ;
184
+ } else {
185
+ log_debug ("[SYSTEM] Deleted guild_queue where guild_id = %.*s." , (int )guildId -> v .len , text + guildId -> v .pos );
186
+ }
187
+
188
+ if (sqlite3_close (db ) != SQLITE_OK ) {
189
+ log_fatal ("[SQLITE] Failed to close sqlite db. [%s]" , sqlite3_errmsg (db ));
190
+ }
191
+
192
+ struct discord_embed embed [] = {
193
+ {
194
+ .description = "The music has ended." ,
195
+ .image =
196
+ & (struct discord_embed_image ){
197
+ .url = "https://raw.githubusercontent.com/Cogmasters/concord/master/docs/static/social-preview.png" ,
198
+ },
199
+ .footer =
200
+ & (struct discord_embed_footer ){
201
+ .text = "Powered by Concord" ,
202
+ .icon_url = "https://raw.githubusercontent.com/Cogmasters/concord/master/docs/static/concord-small.png" ,
203
+ },
204
+ .timestamp = discord_timestamp (data ),
205
+ .color = 15615
206
+ }
207
+ };
208
+
209
+ struct discord_create_message params = {
210
+ .flags = 0 ,
211
+ .embeds =
212
+ & (struct discord_embeds ){
213
+ .size = 1 ,
214
+ .array = embed ,
215
+ },
216
+ };
217
+
218
+ discord_create_message (data , channelID , & params , NULL );
219
+ return ;
220
+ }
221
+
222
+ jsmnf_pair * f ;
223
+
224
+ for (int i = 1 ; i < pairs -> size ; ++ i ) {
225
+ f = & pairs -> fields [i ];
226
+ char arrayTrack [256 ];
227
+ snprintf (arrayTrack , sizeof (arrayTrack ), "%.*s" , (int )f -> v .len , json + f -> v .pos );
228
+ jsonb_string (& b , qbuf , sizeof (qbuf ), arrayTrack , strlen (arrayTrack ));
229
+ }
230
+
231
+ jsonb_array_pop (& b , qbuf , sizeof (qbuf ));
232
+
233
+ char * msgErr = NULL ;
234
+
235
+ char * query = sqlite3_mprintf ("DELETE FROM guild_queue WHERE guild_id = %.*s;" , (int )guildId -> v .len , text + guildId -> v .pos );
236
+ rc = sqlite3_exec (db , query , NULL , NULL , & msgErr );
237
+
238
+ sqlite3_free (query );
239
+
240
+ if (rc != SQLITE_OK ) {
241
+ log_fatal ("[SYSTEM] Something went wrong while deleting guild_queue table from guild_id. [%s]" , msgErr );
242
+ if (sqlite3_close (db ) != SQLITE_OK ) {
243
+ log_fatal ("[SQLITE] Failed to close sqlite db. [%s]" , sqlite3_errmsg (db ));
244
+ }
245
+ return ;
246
+ } else {
247
+ log_debug ("[SYSTEM] Deleted guild_queue where guild_id = %.*s." , (int )guildId -> v .len , text + guildId -> v .pos );
248
+ }
249
+
250
+ query = sqlite3_mprintf ("INSERT INTO guild_queue(guild_id, array) values(%.*s, '%s');" , (int )guildId -> v .len , text + guildId -> v .pos , qbuf );
251
+ rc = sqlite3_exec (db , query , NULL , NULL , & msgErr );
252
+
253
+ sqlite3_free (query );
254
+
255
+ if (rc != SQLITE_OK ) {
256
+ log_fatal ("[SQLITE] Something went wrong while inserting values into guild_queue table. [%s]" , msgErr );
257
+ if (sqlite3_close (db ) != SQLITE_OK ) {
258
+ log_fatal ("[SQLITE] Failed to close sqlite db. [%s]" , sqlite3_errmsg (db ));
259
+ }
260
+ return ;
261
+ } else {
262
+ log_debug ("[SQLITE] Inserted into guild_queue table the values: guild_id: %.*s, array: %s." , (int )guildId -> v .len , text + guildId -> v .pos , qbuf );
263
+ }
264
+
265
+ struct discord_embed embed [] = {
266
+ {
267
+ .description = "Now, going to play next music from queue." ,
268
+ .image =
269
+ & (struct discord_embed_image ){
270
+ .url = "https://raw.githubusercontent.com/Cogmasters/concord/master/docs/static/social-preview.png" ,
271
+ },
272
+ .footer =
273
+ & (struct discord_embed_footer ){
274
+ .text = "Powered by Concord" ,
275
+ .icon_url = "https://raw.githubusercontent.com/Cogmasters/concord/master/docs/static/concord-small.png" ,
276
+ },
277
+ .timestamp = discord_timestamp (data ),
278
+ .color = 15615
279
+ }
280
+ };
281
+
282
+ struct discord_create_message params = {
283
+ .flags = 0 ,
284
+ .embeds =
285
+ & (struct discord_embeds ){
286
+ .size = 1 ,
287
+ .array = embed ,
120
288
},
121
- .timestamp = discord_timestamp (data ),
122
- .color = 15615
289
+ };
290
+
291
+ discord_create_message (data , channelID , & params , NULL );
292
+ } else {
293
+ if (sqlite3_finalize (stmt ) != SQLITE_OK ) {
294
+ log_fatal ("[SQLITE] Error while executing function sqlite3_finalize." );
295
+ return ;
123
296
}
124
- };
125
-
126
- struct discord_create_message params = {
127
- .flags = 0 ,
128
- .embeds =
129
- & (struct discord_embeds ){
130
- .size = 1 ,
131
- .array = embed ,
132
- },
133
- };
134
-
135
- discord_create_message (data , sqlite3_column_int64 (stmt , 0 ), & params , NULL );
136
- }
137
-
138
- if (sqlite3_finalize (stmt ) != SQLITE_OK ) {
139
- log_fatal ("[SQLITE] Error while executing function sqlite3_finalize." );
140
- return ;
297
+
298
+ struct discord_embed embed [] = {
299
+ {
300
+ .description = "<a:Noo:757568484086382622> | Some wild error happened, this should be reported." ,
301
+ .image =
302
+ & (struct discord_embed_image ){
303
+ .url = "https://raw.githubusercontent.com/Cogmasters/concord/master/docs/static/social-preview.png" ,
304
+ },
305
+ .footer =
306
+ & (struct discord_embed_footer ){
307
+ .text = "Powered by Concord" ,
308
+ .icon_url = "https://raw.githubusercontent.com/Cogmasters/concord/master/docs/static/concord-small.png" ,
309
+ },
310
+ .timestamp = discord_timestamp (data ),
311
+ .color = 16711680
312
+ }
313
+ };
314
+
315
+ struct discord_create_message params = {
316
+ .flags = 0 ,
317
+ .embeds =
318
+ & (struct discord_embeds ){
319
+ .size = 1 ,
320
+ .array = embed ,
321
+ },
322
+ };
323
+
324
+ discord_create_message (data , channelID , & params , NULL );
325
+ }
141
326
}
327
+
142
328
if (sqlite3_close (db ) != SQLITE_OK ) {
143
329
log_fatal ("[SQLITE] Failed to close sqlite db. [%s]" , sqlite3_errmsg (db ));
144
330
}
0 commit comments