├── README.md ├── botlib.js ├── crypto.js ├── package-lock.json └── package.json /README.md: -------------------------------------------------------------------------------- 1 | # rubibot 2 | nodejs library for making rubika bot 3 | -------------------------------------------------------------------------------- /botlib.js: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | import { encrypt, decrypt, secret } from "./crypto.js"; 3 | import fs from "fs"; 4 | class Bot { 5 | constructor(auth) { 6 | this.auth = secret(auth); 7 | this.defAuth = auth; 8 | this.access_hash_rec = ""; 9 | } 10 | async sendMessage(target, massege, repMsg) { 11 | try { 12 | if (repMsg) { 13 | var resp = await axios.post( 14 | "https://messengerg2c17.iranlms.ir/", 15 | { 16 | api_version: "5", 17 | auth: this.defAuth, 18 | data_enc: encrypt( 19 | this.auth, 20 | JSON.stringify({ 21 | method: "sendMessage", 22 | input: { 23 | object_guid: target, 24 | rnd: Math.floor( 25 | Math.random(100000) * 900000 26 | ), 27 | text: massege, 28 | reply_to_message_id: repMsg, 29 | }, 30 | client: { 31 | app_name: "Main", 32 | app_version: "3.2.1", 33 | platform: "Web", 34 | package: "web.rubika.ir", 35 | lang_code: "fa", 36 | }, 37 | }) 38 | ), 39 | } 40 | ); 41 | var data = decrypt(this.auth, resp.data.data_enc); 42 | 43 | return JSON.parse(data); 44 | } else { 45 | var resp = await axios.post( 46 | "https://messengerg2c17.iranlms.ir/", 47 | { 48 | api_version: "5", 49 | auth: this.defAuth, 50 | data_enc: encrypt( 51 | this.auth, 52 | JSON.stringify({ 53 | method: "sendMessage", 54 | input: { 55 | object_guid: target, 56 | rnd: Math.floor( 57 | Math.random(100000) * 900000 58 | ), 59 | text: massege, 60 | }, 61 | client: { 62 | app_name: "Main", 63 | app_version: "3.2.1", 64 | platform: "Web", 65 | package: "web.rubika.ir", 66 | lang_code: "fa", 67 | }, 68 | }) 69 | ), 70 | } 71 | ); 72 | var data = decrypt(this.auth, resp.data.data_enc); 73 | return JSON.parse(data); 74 | } 75 | } catch (err) { 76 | throw err; 77 | } 78 | } 79 | async deleteMessages(chatID, messagesID, global) { 80 | try { 81 | if (global) { 82 | var resp = await axios.post( 83 | "https://messengerg2c17.iranlms.ir/", 84 | { 85 | api_version: "5", 86 | auth: this.defAuth, 87 | data_enc: encrypt( 88 | this.auth, 89 | JSON.stringify({ 90 | method: "deleteMessages", 91 | input: { 92 | object_guid: chatID, 93 | message_ids: messagesID, 94 | type: "Local", 95 | }, 96 | client: { 97 | app_name: "Main", 98 | app_version: "3.2.1", 99 | platform: "Web", 100 | package: "web.rubika.ir", 101 | lang_code: "fa", 102 | }, 103 | }) 104 | ), 105 | } 106 | ); 107 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 108 | } else { 109 | var resp = await axios.post( 110 | "https://messengerg2c17.iranlms.ir/", 111 | { 112 | api_version: "5", 113 | auth: this.defAuth, 114 | data_enc: encrypt( 115 | this.auth, 116 | JSON.stringify({ 117 | method: "deleteMessages", 118 | input: { 119 | object_guid: chatID, 120 | message_ids: messagesID, 121 | type: "Global", 122 | }, 123 | client: { 124 | app_name: "Main", 125 | app_version: "3.2.1", 126 | platform: "Web", 127 | package: "web.rubika.ir", 128 | lang_code: "fa", 129 | }, 130 | }) 131 | ), 132 | } 133 | ); 134 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 135 | } 136 | } catch (err) { 137 | throw err; 138 | } 139 | } 140 | async getUserInfo(userGuid) { 141 | try { 142 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 143 | api_version: "5", 144 | auth: this.defAuth, 145 | data_enc: encrypt( 146 | this.auth, 147 | JSON.stringify({ 148 | method: "getUserInfo", 149 | input: { 150 | user_guid: userGuid, 151 | }, 152 | client: { 153 | app_name: "Main", 154 | app_version: "3.2.1", 155 | platform: "Web", 156 | package: "web.rubika.ir", 157 | lang_code: "fa", 158 | }, 159 | }) 160 | ), 161 | }); 162 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 163 | } catch (err) { 164 | throw err; 165 | } 166 | } 167 | async getUserInfoById(userid) { 168 | try { 169 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 170 | api_version: "5", 171 | auth: this.defAuth, 172 | data_enc: encrypt( 173 | this.auth, 174 | JSON.stringify({ 175 | method: "getObjectByUsername", 176 | input: { 177 | username: userid, 178 | }, 179 | client: { 180 | app_name: "Main", 181 | app_version: "3.2.1", 182 | platform: "Web", 183 | package: "web.rubika.ir", 184 | lang_code: "fa", 185 | }, 186 | }) 187 | ), 188 | }); 189 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 190 | } catch (err) { 191 | throw err; 192 | } 193 | } 194 | async getMessages(chatId, minId) { 195 | try { 196 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 197 | api_version: "5", 198 | auth: this.defAuth, 199 | data_enc: encrypt( 200 | this.auth, 201 | JSON.stringify({ 202 | method: "getMessagesInterval", 203 | input: { 204 | object_guid: chatId, 205 | middle_message_id: minId, 206 | }, 207 | client: { 208 | app_name: "Main", 209 | app_version: "3.2.1", 210 | platform: "Web", 211 | package: "web.rubika.ir", 212 | lang_code: "fa", 213 | }, 214 | }) 215 | ), 216 | }); 217 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 218 | } catch (err) { 219 | throw err; 220 | } 221 | } 222 | async removeMember(groupId, userId) { 223 | try { 224 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 225 | api_version: "5", 226 | auth: this.defAuth, 227 | data_enc: encrypt( 228 | this.auth, 229 | JSON.stringify({ 230 | method: "banGroupMember", 231 | input: { 232 | group_guid: groupId, 233 | member_guid: userId, 234 | action: "Set", 235 | }, 236 | client: { 237 | app_name: "Main", 238 | app_version: "3.2.1", 239 | platform: "Web", 240 | package: "web.rubika.ir", 241 | lang_code: "fa", 242 | }, 243 | }) 244 | ), 245 | }); 246 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 247 | } catch (err) { 248 | throw err; 249 | } 250 | } 251 | async addGroupMembers(groupId, usersId) { 252 | try { 253 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 254 | api_version: "5", 255 | auth: this.defAuth, 256 | data_enc: encrypt( 257 | this.auth, 258 | JSON.stringify({ 259 | method: "addGroupMembers", 260 | input: { 261 | group_guid: groupId, 262 | member_guids: usersId, 263 | }, 264 | client: { 265 | app_name: "Main", 266 | app_version: "3.2.1", 267 | platform: "Web", 268 | package: "web.rubika.ir", 269 | lang_code: "fa", 270 | }, 271 | }) 272 | ), 273 | }); 274 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 275 | } catch (err) { 276 | throw err; 277 | } 278 | } 279 | async getAdmins(groupId) { 280 | try { 281 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 282 | api_version: "5", 283 | auth: this.defAuth, 284 | data_enc: encrypt( 285 | this.auth, 286 | JSON.stringify({ 287 | method: "getGroupAdminMembers", 288 | input: { 289 | group_guid: groupId, 290 | }, 291 | client: { 292 | app_name: "Main", 293 | app_version: "3.2.1", 294 | platform: "Web", 295 | package: "web.rubika.ir", 296 | lang_code: "fa", 297 | }, 298 | }) 299 | ), 300 | }); 301 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 302 | } catch (err) { 303 | throw err; 304 | } 305 | } 306 | async getMessagesById(groupId, messagesId) { 307 | try { 308 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 309 | api_version: "5", 310 | auth: this.defAuth, 311 | data_enc: encrypt( 312 | this.auth, 313 | JSON.stringify({ 314 | method: "getMessagesByID", 315 | input: { 316 | object_guid: groupId, 317 | message_ids: messagesId, 318 | }, 319 | client: { 320 | app_name: "Main", 321 | app_version: "3.2.1", 322 | platform: "Web", 323 | package: "web.rubika.ir", 324 | lang_code: "fa", 325 | }, 326 | }) 327 | ), 328 | }); 329 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 330 | } catch (err) { 331 | throw err; 332 | } 333 | } 334 | async setUserAccess(groupId, acList) { 335 | try { 336 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 337 | api_version: "5", 338 | auth: this.defAuth, 339 | data_enc: encrypt( 340 | this.auth, 341 | JSON.stringify({ 342 | method: "setGroupDefaultAccess", 343 | input: { 344 | access_list: acList, 345 | group_guid: groupId, 346 | }, 347 | client: { 348 | app_name: "Main", 349 | app_version: "3.2.1", 350 | platform: "Web", 351 | package: "web.rubika.ir", 352 | lang_code: "fa", 353 | }, 354 | }) 355 | ), 356 | }); 357 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 358 | } catch (err) { 359 | throw err; 360 | } 361 | } 362 | async getGroupMembers(groupId) { 363 | try { 364 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 365 | api_version: "5", 366 | auth: this.defAuth, 367 | data_enc: encrypt( 368 | this.auth, 369 | JSON.stringify({ 370 | method: "getGroupAllMembers", 371 | input: { 372 | group_guid: groupId, 373 | }, 374 | client: { 375 | app_name: "Main", 376 | app_version: "3.2.1", 377 | platform: "Web", 378 | package: "web.rubika.ir", 379 | lang_code: "fa", 380 | }, 381 | }) 382 | ), 383 | }); 384 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 385 | } catch (err) { 386 | throw err; 387 | } 388 | } 389 | async getGroupInfo(groupId) { 390 | try { 391 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 392 | api_version: "5", 393 | auth: this.defAuth, 394 | data_enc: encrypt( 395 | this.auth, 396 | JSON.stringify({ 397 | method: "getGroupInfo", 398 | input: { 399 | group_guid: groupId, 400 | }, 401 | client: { 402 | app_name: "Main", 403 | app_version: "3.2.1", 404 | platform: "Web", 405 | package: "web.rubika.ir", 406 | lang_code: "fa", 407 | }, 408 | }) 409 | ), 410 | }); 411 | 412 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 413 | } catch (err) { 414 | throw err; 415 | } 416 | } 417 | async getGroupLink(groupId) { 418 | try { 419 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 420 | api_version: "5", 421 | auth: this.defAuth, 422 | data_enc: encrypt( 423 | this.auth, 424 | JSON.stringify({ 425 | method: "getGroupLink", 426 | input: { 427 | group_guid: groupId, 428 | }, 429 | client: { 430 | app_name: "Main", 431 | app_version: "3.2.1", 432 | platform: "Web", 433 | package: "web.rubika.ir", 434 | lang_code: "fa", 435 | }, 436 | }) 437 | ), 438 | }); 439 | return decrypt(this.auth, resp.data.data_enc); 440 | } catch (err) { 441 | throw err; 442 | } 443 | } 444 | async getMessagesUpdates(gpId) { 445 | try { 446 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 447 | api_version: "5", 448 | auth: this.defAuth, 449 | data_enc: encrypt( 450 | this.auth, 451 | JSON.stringify({ 452 | method: "getMessagesUpdates", 453 | input: { 454 | object_guid: gpId, 455 | state: Math.floor(Date.now() / 1000) - 200, 456 | }, 457 | client: { 458 | app_name: "Main", 459 | app_version: "4.1.11", 460 | platform: "Web", 461 | package: "web.rubika.ir", 462 | lang_code: "fa", 463 | }, 464 | }) 465 | ), 466 | }); 467 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 468 | } catch (err) { 469 | throw err; 470 | } 471 | } 472 | async GetChatsUpdates() { 473 | try { 474 | var resp = await axios.post("https://messengerg2c72.iranlms.ir/", { 475 | api_version: "5", 476 | auth: this.defAuth, 477 | data_enc: encrypt( 478 | this.auth, 479 | JSON.stringify({ 480 | method: "getChatsUpdates", 481 | input: { state: Math.floor(Date.now() / 1000) - 200 }, 482 | client: { 483 | app_name: "Main", 484 | app_version: "4.1.11", 485 | platform: "Web", 486 | package: "web.rubika.ir", 487 | lang_code: "fa", 488 | }, 489 | }) 490 | ), 491 | }); 492 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 493 | } catch (err) { 494 | throw err; 495 | } 496 | } 497 | async editMessage(chatId, pymId, newText) { 498 | try { 499 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 500 | api_version: "5", 501 | auth: this.defAuth, 502 | data_enc: encrypt( 503 | this.auth, 504 | JSON.stringify({ 505 | method: "getMessagesInterval", 506 | input: { 507 | message_id: pymId, 508 | object_guid: chatId, 509 | text: newText, 510 | }, 511 | client: { 512 | app_name: "Main", 513 | app_version: "3.2.1", 514 | platform: "Web", 515 | package: "web.rubika.ir", 516 | lang_code: "fa", 517 | }, 518 | }) 519 | ), 520 | }); 521 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 522 | } catch (err) { 523 | throw err; 524 | } 525 | } 526 | async cancelRemoveMember(groupId, userId) { 527 | try { 528 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 529 | api_version: "5", 530 | auth: this.defAuth, 531 | data_enc: encrypt( 532 | this.auth, 533 | JSON.stringify({ 534 | method: "banGroupMember", 535 | input: { 536 | group_guid: groupId, 537 | member_guid: userId, 538 | action: "Unset", 539 | }, 540 | client: { 541 | app_name: "Main", 542 | app_version: "3.2.1", 543 | platform: "Web", 544 | package: "web.rubika.ir", 545 | lang_code: "fa", 546 | }, 547 | }) 548 | ), 549 | }); 550 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 551 | } catch (err) { 552 | throw err; 553 | } 554 | } 555 | async addChannelMembers(groupId, usersId) { 556 | try { 557 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 558 | api_version: "5", 559 | auth: this.defAuth, 560 | data_enc: encrypt( 561 | this.auth, 562 | JSON.stringify({ 563 | method: "addChannelMembers", 564 | input: { 565 | channel_guid: groupId, 566 | member_guids: usersId, 567 | }, 568 | client: { 569 | app_name: "Main", 570 | app_version: "3.2.1", 571 | platform: "Web", 572 | package: "web.rubika.ir", 573 | lang_code: "fa", 574 | }, 575 | }) 576 | ), 577 | }); 578 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 579 | } catch (err) { 580 | throw err; 581 | } 582 | } 583 | async setGroupLink(groupId) { 584 | try { 585 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 586 | api_version: "5", 587 | auth: this.defAuth, 588 | data_enc: encrypt( 589 | this.auth, 590 | JSON.stringify({ 591 | method: "setGroupLink", 592 | input: { 593 | group_guid: groupId, 594 | }, 595 | client: { 596 | app_name: "Main", 597 | app_version: "3.2.1", 598 | platform: "Web", 599 | package: "web.rubika.ir", 600 | lang_code: "fa", 601 | }, 602 | }) 603 | ), 604 | }); 605 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 606 | } catch (err) { 607 | throw err; 608 | } 609 | } 610 | async setGroupLink(groupId, slowTime) { 611 | try { 612 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 613 | api_version: "5", 614 | auth: this.defAuth, 615 | data_enc: encrypt( 616 | this.auth, 617 | JSON.stringify({ 618 | method: "editGroupInfo", 619 | input: { 620 | group_guid: groupId, 621 | slow_mode: slowTime, 622 | updated_parameters: ["slow_mode"], 623 | }, 624 | client: { 625 | app_name: "Main", 626 | app_version: "3.2.1", 627 | platform: "Web", 628 | package: "web.rubika.ir", 629 | lang_code: "fa", 630 | }, 631 | }) 632 | ), 633 | }); 634 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 635 | } catch (err) { 636 | throw err; 637 | } 638 | } 639 | async addAdmin(groupId, userId, acList) { 640 | try { 641 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 642 | api_version: "5", 643 | auth: this.defAuth, 644 | data_enc: encrypt( 645 | this.auth, 646 | JSON.stringify({ 647 | method: "setGroupAdmin", 648 | input: { 649 | group_guid: groupId, 650 | access_list: acList, 651 | action: "SetAdmin", 652 | member_guid: userId, 653 | }, 654 | client: { 655 | app_name: "Main", 656 | app_version: "3.2.1", 657 | platform: "Web", 658 | package: "web.rubika.ir", 659 | lang_code: "fa", 660 | }, 661 | }) 662 | ), 663 | }); 664 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 665 | } catch (err) { 666 | throw err; 667 | } 668 | } 669 | async removeAdmin(groupId, userId) { 670 | try { 671 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 672 | api_version: "5", 673 | auth: this.defAuth, 674 | data_enc: encrypt( 675 | this.auth, 676 | JSON.stringify({ 677 | method: "setGroupAdmin", 678 | input: { 679 | group_guid: groupId, 680 | action: "UnsetAdmin", 681 | member_guid: userId, 682 | }, 683 | client: { 684 | app_name: "Main", 685 | app_version: "3.2.1", 686 | platform: "Web", 687 | package: "web.rubika.ir", 688 | lang_code: "fa", 689 | }, 690 | }) 691 | ), 692 | }); 693 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 694 | } catch (err) { 695 | throw err; 696 | } 697 | } 698 | async pin(groupId, msgId) { 699 | try { 700 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 701 | api_version: "5", 702 | auth: this.defAuth, 703 | data_enc: encrypt( 704 | this.auth, 705 | JSON.stringify({ 706 | method: "setPinMessage", 707 | input: { 708 | object_guid: groupId, 709 | message_id: msgId, 710 | action: "Pin", 711 | }, 712 | client: { 713 | app_name: "Main", 714 | app_version: "3.2.1", 715 | platform: "Web", 716 | package: "web.rubika.ir", 717 | lang_code: "fa", 718 | }, 719 | }) 720 | ), 721 | }); 722 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 723 | } catch (err) { 724 | throw err; 725 | } 726 | } 727 | async Unpin(groupId, msgId) { 728 | try { 729 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 730 | api_version: "5", 731 | auth: this.defAuth, 732 | data_enc: encrypt( 733 | this.auth, 734 | JSON.stringify({ 735 | method: "setPinMessage", 736 | input: { 737 | object_guid: groupId, 738 | message_id: msgId, 739 | action: "Unpin", 740 | }, 741 | client: { 742 | app_name: "Main", 743 | app_version: "3.2.1", 744 | platform: "Web", 745 | package: "web.rubika.ir", 746 | lang_code: "fa", 747 | }, 748 | }) 749 | ), 750 | }); 751 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 752 | } catch (err) { 753 | throw err; 754 | } 755 | } 756 | async left(gpId) { 757 | try { 758 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 759 | api_version: "5", 760 | auth: this.defAuth, 761 | data_enc: encrypt( 762 | this.auth, 763 | JSON.stringify({ 764 | method: "leaveGroup", 765 | input: { 766 | group_guid: gpId, 767 | }, 768 | client: { 769 | app_name: "Main", 770 | app_version: "3.2.1", 771 | platform: "Web", 772 | package: "web.rubika.ir", 773 | lang_code: "fa", 774 | }, 775 | }) 776 | ), 777 | }); 778 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 779 | } catch (err) { 780 | throw err; 781 | } 782 | } 783 | 784 | async forwardMessages(from, to, msgs) { 785 | try { 786 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 787 | api_version: "5", 788 | auth: this.defAuth, 789 | data_enc: encrypt( 790 | this.auth, 791 | JSON.stringify({ 792 | method: "forwardMessages", 793 | input: { 794 | from_object_guid: from, 795 | to_object_guid: to, 796 | message_ids: msgs, 797 | rnd: Math.floor(Math.random(100000) * 900000), 798 | }, 799 | client: { 800 | app_name: "Main", 801 | app_version: "3.2.1", 802 | platform: "Web", 803 | package: "web.rubika.ir", 804 | lang_code: "fa", 805 | }, 806 | }) 807 | ), 808 | }); 809 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 810 | } catch (err) { 811 | throw err; 812 | } 813 | } 814 | 815 | async joinGroup(link) { 816 | var hash = link.slice(link.lastIndexOf("/") + 1); 817 | try { 818 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 819 | api_version: "5", 820 | auth: this.defAuth, 821 | data_enc: encrypt( 822 | this.auth, 823 | JSON.stringify({ 824 | method: "joinGroup", 825 | input: { 826 | hash_link: hash, 827 | }, 828 | client: { 829 | app_name: "Main", 830 | app_version: "3.2.1", 831 | platform: "Web", 832 | package: "web.rubika.ir", 833 | lang_code: "fa", 834 | }, 835 | }) 836 | ), 837 | }); 838 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 839 | } catch (err) { 840 | throw err; 841 | } 842 | } 843 | 844 | async leaveGroup(gpGd) { 845 | try { 846 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 847 | api_version: "5", 848 | auth: this.defAuth, 849 | data_enc: encrypt( 850 | this.auth, 851 | JSON.stringify({ 852 | method: "leaveGroup", 853 | input: { 854 | group_guid: gpGd, 855 | }, 856 | client: { 857 | app_name: "Main", 858 | app_version: "3.2.1", 859 | platform: "Web", 860 | package: "web.rubika.ir", 861 | lang_code: "fa", 862 | }, 863 | }) 864 | ), 865 | }); 866 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 867 | } catch (err) { 868 | throw err; 869 | } 870 | } 871 | 872 | async seen(seenlist) { 873 | try { 874 | var resp = await axios.post("https://messengerg2c17.iranlms.ir/", { 875 | api_version: "5", 876 | auth: this.defAuth, 877 | data_enc: encrypt( 878 | this.auth, 879 | JSON.stringify({ 880 | method: "seenChats", 881 | input: { seen_list: seenlist }, 882 | client: { 883 | app_name: "Main", 884 | app_version: "4.1.11", 885 | platform: "Web", 886 | package: "web.rubika.ir", 887 | lang_code: "fa", 888 | }, 889 | }) 890 | ), 891 | }); 892 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)); 893 | } catch (err) { 894 | throw err; 895 | } 896 | } 897 | 898 | async uploadFile(file, target, text) { 899 | try { 900 | var bytef; 901 | if(!file.includes("http") && !file.includes("https")){ 902 | bytef = fs.readFileSync(file); 903 | }else{ 904 | const filereq = await axios.get(file, { responseType: 'arraybuffer' }); 905 | bytef = Buffer.from(filereq.data, 'binary'); 906 | } 907 | const size = bytef.byteLength; 908 | var filename = file.split("/"); 909 | filename = filename[filename.length - 1]; 910 | var mime = file.split("."); 911 | mime = mime[mime.length - 1]; 912 | var acessData = await axios.post( 913 | "https://messengerg2c97.iranlms.ir/", 914 | { 915 | api_version: "5", 916 | auth: this.defAuth, 917 | data_enc: encrypt( 918 | this.auth, 919 | JSON.stringify({ 920 | method: "requestSendFile", 921 | input: { 922 | file_name: filename, 923 | size: size, 924 | mime: mime, 925 | }, 926 | client: { 927 | app_name: "Main", 928 | app_version: "3.2.1", 929 | platform: "Web", 930 | package: "web.rubika.ir", 931 | lang_code: "fa", 932 | }, 933 | }) 934 | ), 935 | } 936 | ); 937 | acessData = JSON.parse(decrypt(this.auth, acessData.data.data_enc)); 938 | var Headers = { 939 | auth: this.defAuth, 940 | "chunk-size": size.toString(), 941 | "part-number": "1", 942 | "total-part": "1", 943 | "file-id": acessData.data.id, 944 | "access-hash-send": acessData.data.access_hash_send, 945 | "content-type": "application/octet-stream", 946 | "content-length": size.toString(), 947 | }; 948 | if (size <= 131072) { 949 | var result = await axios.post( 950 | acessData.data.upload_url, 951 | bytef, 952 | { 953 | headers: Headers, 954 | } 955 | ); 956 | this.acess_hash_rec = result.data.data.access_hash_rec; 957 | if (text) { 958 | 959 | var resp = await axios.post( 960 | "https://messengerg2c17.iranlms.ir/", 961 | { 962 | api_version: "5", 963 | auth: this.defAuth, 964 | data_enc: encrypt( 965 | this.auth, 966 | JSON.stringify({ 967 | method: "sendMessage", 968 | input: { 969 | object_guid: target, 970 | rnd: Math.floor( 971 | Math.random(100000) * 900000 972 | ), 973 | file_inline: { 974 | dc_id: acessData.data.dc_id, 975 | file_id: acessData.data.id, 976 | type: "File", 977 | file_name: filename, 978 | size: size, 979 | mime: mime, 980 | access_hash_rec: this 981 | .acess_hash_rec, 982 | }, 983 | text: text, 984 | }, 985 | client: { 986 | app_name: "Main", 987 | app_version: "3.2.1", 988 | platform: "Web", 989 | package: "web.rubika.ir", 990 | lang_code: "fa", 991 | }, 992 | }) 993 | ), 994 | } 995 | ); 996 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)) 997 | 998 | } else { 999 | var resp = await axios.post( 1000 | "https://messengerg2c17.iranlms.ir/", 1001 | { 1002 | api_version: "5", 1003 | auth: this.defAuth, 1004 | data_enc: encrypt( 1005 | this.auth, 1006 | JSON.stringify({ 1007 | method: "sendMessage", 1008 | input: { 1009 | object_guid: target, 1010 | rnd: Math.floor( 1011 | Math.random(100000) * 900000 1012 | ), 1013 | file_inline: { 1014 | dc_id: acessData.data.dc_id, 1015 | file_id: acessData.data.id, 1016 | type: "File", 1017 | file_name: filename, 1018 | size: size, 1019 | mime: mime, 1020 | access_hash_rec: this.acess_hash_rec, 1021 | }, 1022 | }, 1023 | client: { 1024 | app_name: "Main", 1025 | app_version: "3.2.1", 1026 | platform: "Web", 1027 | package: "web.rubika.ir", 1028 | lang_code: "fa", 1029 | }, 1030 | }) 1031 | ), 1032 | } 1033 | ); 1034 | return JSON.parse(decrypt(this.auth, resp.data.data_enc)) 1035 | 1036 | } 1037 | } else { 1038 | const t = Math.floor(size / 131072) + 1; 1039 | for (let i = 1; i < t + 1; i++) { 1040 | const k = (i - 1) * 131072; 1041 | const chunkSize = i != t ? "131072" : (size - k).toString(); 1042 | const data = i != t ? bytef.slice(k, k + 131072) : bytef.slice(k); 1043 | Headers["chunk-size"] = chunkSize; 1044 | Headers["content-length"] = chunkSize; 1045 | Headers["part-number"] = i.toString(); 1046 | Headers["total-part"] = t.toString(); 1047 | var result = await axios.post( 1048 | acessData.data.upload_url, 1049 | data, 1050 | { 1051 | headers: Headers, 1052 | } 1053 | ); 1054 | if (i == t) { 1055 | this.access_hash_rec = result.data.data.access_hash_rec; 1056 | if (text) { 1057 | var resp = await axios.post( 1058 | "https://messengerg2c17.iranlms.ir/", 1059 | { 1060 | api_version: "5", 1061 | auth: this.defAuth, 1062 | data_enc: encrypt( 1063 | this.auth, 1064 | JSON.stringify({ 1065 | method: "sendMessage", 1066 | input: { 1067 | object_guid: target, 1068 | rnd: Math.floor( 1069 | Math.random(100000) * 900000 1070 | ), 1071 | file_inline: { 1072 | dc_id: acessData.data.dc_id, 1073 | file_id: acessData.data.id, 1074 | type: "File", 1075 | file_name: filename, 1076 | size: size, 1077 | mime: mime, 1078 | access_hash_rec: this.access_hash_rec, 1079 | }, 1080 | text: text, 1081 | }, 1082 | client: { 1083 | app_name: "Main", 1084 | app_version: "3.2.1", 1085 | platform: "Web", 1086 | package: "web.rubika.ir", 1087 | lang_code: "fa", 1088 | }, 1089 | }) 1090 | ), 1091 | } 1092 | ); 1093 | return JSON.parse( 1094 | decrypt(this.auth, resp.data.data_enc) 1095 | ) 1096 | } else { 1097 | var resp = await axios.post( 1098 | "https://messengerg2c17.iranlms.ir/", 1099 | { 1100 | api_version: "5", 1101 | auth: this.defAuth, 1102 | data_enc: encrypt( 1103 | this.auth, 1104 | JSON.stringify({ 1105 | method: "sendMessage", 1106 | input: { 1107 | object_guid: target, 1108 | rnd: Math.floor( 1109 | Math.random(100000) * 900000 1110 | ), 1111 | file_inline: { 1112 | dc_id: acessData.data.dc_id, 1113 | file_id: acessData.data.id, 1114 | type: "File", 1115 | file_name: filename, 1116 | size: size, 1117 | mime: mime, 1118 | access_hash_rec: this.access_hash_rec, 1119 | }, 1120 | }, 1121 | client: { 1122 | app_name: "Main", 1123 | app_version: "3.2.1", 1124 | platform: "Web", 1125 | package: "web.rubika.ir", 1126 | lang_code: "fa", 1127 | }, 1128 | }) 1129 | ), 1130 | } 1131 | ); 1132 | 1133 | return JSON.parse( 1134 | decrypt(this.auth, resp.data.data_enc) 1135 | ) 1136 | } 1137 | } 1138 | } 1139 | } 1140 | } catch (err) { 1141 | throw err 1142 | } 1143 | } 1144 | } 1145 | export { Bot }; 1146 | -------------------------------------------------------------------------------- /crypto.js: -------------------------------------------------------------------------------- 1 | import CryptoJS from 'crypto-jS' 2 | 3 | const ord = (str) => { 4 | return parseInt(str.charCodeAt(0)); 5 | } 6 | // chr func look php 7 | const chr = (n) => { 8 | // first if to check params 9 | if (n < 128){ 10 | //if params match to 128 worked 11 | return String.fromCharCode(n); 12 | } else { 13 | //its else if not worked and it worked 14 | return "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " [n - 128]; 15 | } 16 | } 17 | 18 | //main func 19 | export function secret(auth){ 20 | 21 | //the variable to return and do end changes in for loop 22 | var t = ""; 23 | 24 | //the variable you set it Equal to a varible 25 | var b = ""; 26 | 27 | //we set it Equal params gets from calling func 28 | var a = auth 29 | 30 | // the first part of channge are substrs 31 | b = a.substr(16, 8); 32 | b += a.substr(0, 8); 33 | b += a.substr(24); 34 | b += a.substr(8, 8); 35 | 36 | //second part of change are for loop 37 | for(var i = 0; i < b.length; i++){ 38 | 39 | //the if for checking the data type gets from first part 40 | if (parseInt(b[i]) == NaN){ 41 | 42 | // if data was number worked 43 | t += chr((((ord(b[i]) - 48) + 5) % 10) + 48); 44 | 45 | }else{ 46 | 47 | //it worked when data type are not a number 48 | t += chr((((ord(b[i]) - 97) + 9) % 26) + 97); 49 | 50 | } 51 | } 52 | //its end we return data to use 53 | 54 | return t; 55 | } 56 | 57 | export function decrypt(key,secret){ 58 | var iv = '\x00'; 59 | iv = iv.repeat(16); 60 | var decrypted = CryptoJS.AES.decrypt(secret, CryptoJS.enc.Utf8.parse(key),{ iv: CryptoJS.enc.Utf8.parse(iv) }); 61 | var parsed = decrypted.toString(CryptoJS.enc.Utf8); 62 | return parsed; 63 | } 64 | 65 | export function encrypt(key,secret) { 66 | var iv = '\x00'; 67 | iv = iv.repeat(16); 68 | var encrypted = CryptoJS.AES.encrypt(secret,CryptoJS.enc.Utf8.parse(key),{ iv: CryptoJS.enc.Utf8.parse(iv) }); 69 | var string = encrypted + '' 70 | return string; 71 | } -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rubibot", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "rubibot", 9 | "version": "1.0.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "axios": "^0.26.1", 13 | "crypto-js": "^4.1.1" 14 | } 15 | }, 16 | "node_modules/axios": { 17 | "version": "0.26.1", 18 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", 19 | "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", 20 | "dependencies": { 21 | "follow-redirects": "^1.14.8" 22 | } 23 | }, 24 | "node_modules/crypto-js": { 25 | "version": "4.1.1", 26 | "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", 27 | "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" 28 | }, 29 | "node_modules/follow-redirects": { 30 | "version": "1.14.9", 31 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", 32 | "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", 33 | "funding": [ 34 | { 35 | "type": "individual", 36 | "url": "https://github.com/sponsors/RubenVerborgh" 37 | } 38 | ], 39 | "engines": { 40 | "node": ">=4.0" 41 | }, 42 | "peerDependenciesMeta": { 43 | "debug": { 44 | "optional": true 45 | } 46 | } 47 | } 48 | }, 49 | "dependencies": { 50 | "axios": { 51 | "version": "0.26.1", 52 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", 53 | "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", 54 | "requires": { 55 | "follow-redirects": "^1.14.8" 56 | } 57 | }, 58 | "crypto-js": { 59 | "version": "4.1.1", 60 | "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", 61 | "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" 62 | }, 63 | "follow-redirects": { 64 | "version": "1.14.9", 65 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", 66 | "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==" 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rubibot", 3 | "version": "1.0.0", 4 | "description": "rubika bot with js ", 5 | "main": "index.js", 6 | "type": "module", 7 | "scripts": { 8 | "test": "node check.js", 9 | "start": "node index.js" 10 | }, 11 | "keywords": [ 12 | "rubika", 13 | "bot" 14 | ], 15 | "author": "nightcode", 16 | "license": "MIT", 17 | "dependencies": { 18 | "axios": "^0.26.1", 19 | "crypto-js": "^4.1.1" 20 | } 21 | } 22 | --------------------------------------------------------------------------------