millswelbeck148/SireimadeBotPublic · Bot Template

AISireImade appears to be a Telegram automation bot. Commands include /start, /about, /support, /id, /admin, /ban, /unban, /x. Observed in code: messaging, keyboards, games.

Utilityutility
ProfileTelegram
112 commands3 envUpdated 2h agoCreated Aug 27, 2026
Back to folder

commands/_search.js

javascript · 754 lines

Raw
1/**#command2name: /search3answer: 4keyboard: 5parse_mode: markdown6aliases: 7allow_only_group: false8need_reply: false9is_web: 010#command**/11 12// ==========================================================13// 🔎 GIFT AI — /SEARCH14// USER + GROUP DATABASE SEARCH15//16// • OWNER CAN USE17// • SAVED BOT ADMINS CAN USE18// • REPLIES DIRECTLY TO /SEARCH MESSAGE19// • SEARCHES USERS + GROUPS20// • NAME / USERNAME / TELEGRAM ID21// • CASE-INSENSITIVE22// • DUPLICATE-FREE RESULTS23// ==========================================================24 25 26// ==========================================================27// 👑 BOT OWNER28// ==========================================================29 30var OWNER_ID = "8031061590";31 32 33// ==========================================================34// 👑 GET SAVED ADMINS35// ==========================================================36 37var admins =38  Bot.getProperty(39    "GIFT_BOT_ADMINS"40  );41 42 43if (!Array.isArray(admins)) {44  admins = [];45}46 47 48// ==========================================================49// 🔐 ADMIN CHECK50// ==========================================================51 52var currentUserId = "";53 54try {55 56  currentUserId =57    String(58      user.telegramid59    );60 61} catch (e) {62 63  currentUserId = "";64 65}66 67 68var isAdmin =69  currentUserId === OWNER_ID;70 71 72// Check saved admins73if (!isAdmin) {74 75  for (76    var a = 0;77    a < admins.length;78    a++79  ) {80 81    var savedAdmin =82      admins[a];83 84 85    var savedAdminId = "";86 87 88    // Supports:89    // ["123", "456"]90    // OR91    // [{id:"123"}]92 93    if (94      typeof savedAdmin === "object" &&95      savedAdmin !== null96    ) {97 98      if (99        savedAdmin.id !== undefined100      ) {101 102        savedAdminId =103          String(104            savedAdmin.id105          );106 107      }108 109      else if (110        savedAdmin.telegramid !== undefined111      ) {112 113        savedAdminId =114          String(115            savedAdmin.telegramid116          );117 118      }119 120    }121 122    else {123 124      savedAdminId =125        String(126          savedAdmin127        );128 129    }130 131 132    if (133      savedAdminId ===134      currentUserId135    ) {136 137      isAdmin = true;138      break;139 140    }141 142  }143 144}145 146 147// ==========================================================148// ❌ NOT ADMIN149// ==========================================================150 151if (!isAdmin) {152 153  try {154 155    Api.sendMessage({156 157      chat_id:158        chat.id,159 160      text:161        "❌ You don't have permission to use this command.",162 163      reply_to_message_id:164        request.message_id165 166    });167 168  } catch (e) {169 170    Bot.sendMessage(171      "❌ You don't have permission to use this command."172    );173 174  }175 176  return;177}178 179 180// ==========================================================181// 🔎 GET SEARCH QUERY182// ==========================================================183 184var query = "";185 186try {187 188  query =189    String(190      params || ""191    )192      .trim()193      .toLowerCase();194 195} catch (e) {196 197  query = "";198 199}200 201 202// ==========================================================203// EMPTY QUERY204// ==========================================================205 206if (!query) {207 208  try {209 210    Api.sendMessage({211 212      chat_id:213        chat.id,214 215      text:216        "🔎 <b>Search usage</b>\n\n" +217        "<code>/search a</code>\n" +218        "<code>/search alex</code>\n" +219        "<code>/search anime</code>\n" +220        "<code>/search 8031061590</code>",221 222      parse_mode:223        "HTML",224 225      reply_to_message_id:226        request.message_id227 228    });229 230  } catch (e) {231 232    Bot.sendMessage(233      "🔎 Usage: /search <name, username, letter or ID>"234    );235 236  }237 238  return;239}240 241 242// ==========================================================243// 🛡️ ESCAPE HTML244// ==========================================================245 246function escapeHTML(value) {247 248  return String(249    value || ""250  )251    .replace(252      /&/g,253      "&amp;"254    )255    .replace(256      /</g,257      "&lt;"258    )259    .replace(260      />/g,261      "&gt;"262    )263    .replace(264      /"/g,265      "&quot;"266    )267    .replace(268      /'/g,269      "&#39;"270    );271 272}273 274 275// ==========================================================276// 📂 GET USER DATABASE277// ==========================================================278 279var users =280  Bot.getProperty(281    "GIFT_USERS_DATABASE"282  );283 284 285if (!Array.isArray(users)) {286  users = [];287}288 289 290// ==========================================================291// 📂 GET GROUP DATABASE292// ==========================================================293 294var groups =295  Bot.getProperty(296    "GIFT_GROUPS_DATABASE"297  );298 299 300if (!Array.isArray(groups)) {301  groups = [];302}303 304 305// ==========================================================306// 🔎 RESULTS307// ==========================================================308 309var peopleResults = [];310var groupResults = [];311 312 313// ==========================================================314// 👤 SEARCH USERS315// ==========================================================316 317for (318  var i = 0;319  i < users.length;320  i++321) {322 323  var person =324    users[i] || {};325 326 327  var personName =328    (329      String(330        person.first_name || ""331      ) +332      " " +333      String(334        person.last_name || ""335      )336    )337      .toLowerCase();338 339 340  var personUsername =341    String(342      person.username || ""343    )344      .replace(345        /^@/,346        ""347      )348      .toLowerCase();349 350 351  var personId =352    String(353      person.id || ""354    );355 356 357  if (358    personName.indexOf(query) !== -1 ||359    personUsername.indexOf(query) !== -1 ||360    personId === query361  ) {362 363    peopleResults.push(364      person365    );366 367  }368 369}370 371 372// ==========================================================373// 👥 SEARCH GROUPS374// ==========================================================375 376for (377  var g = 0;378  g < groups.length;379  g++380) {381 382  var group =383    groups[g] || {};384 385 386  var groupName =387    String(388      group.title || ""389    )390      .toLowerCase();391 392 393  var groupUsername =394    String(395      group.username || ""396    )397      .replace(398        /^@/,399        ""400      )401      .toLowerCase();402 403 404  var groupId =405    String(406      group.id || ""407    );408 409 410  if (411    groupName.indexOf(query) !== -1 ||412    groupUsername.indexOf(query) !== -1 ||413    groupId === query414  ) {415 416    groupResults.push(417      group418    );419 420  }421 422}423 424 425// ==========================================================426// 📊 RESULT LIMIT427// ==========================================================428 429var MAX_RESULTS = 30;430 431 432// ==========================================================433// 📝 BUILD RESPONSE434// ==========================================================435 436var text =437  "🔎 <b>GIFT SEARCH</b>\n" +438  "━━━━━━━━━━━━━━━━━━\n" +439  "🔍 Query: <code>" +440  escapeHTML(query) +441  "</code>\n\n";442 443 444// ==========================================================445// 👤 PEOPLE446// ==========================================================447 448if (449  peopleResults.length > 0450) {451 452  text +=453    "👤 <b>PEOPLE</b>\n\n";454 455 456  var peopleLimit =457    Math.min(458      peopleResults.length,459      MAX_RESULTS460    );461 462 463  for (464    var p = 0;465    p < peopleLimit;466    p++467  ) {468 469    var person =470      peopleResults[p];471 472 473    var name =474      String(475        person.first_name ||476        "Unknown"477      );478 479 480    if (481      person.last_name482    ) {483 484      name +=485        " " +486        String(487          person.last_name488        );489 490    }491 492 493    name =494      escapeHTML(495        name496      );497 498 499    var mention =500      "";501 502 503    if (504      person.id505    ) {506 507      mention =508        '<a href="tg://user?id=' +509        String(510          person.id511        ) +512        '">' +513        name +514        "</a>";515 516    }517 518    else {519 520      mention =521        name;522 523    }524 525 526    if (527      person.username528    ) {529 530      mention +=531        " — @" +532        escapeHTML(533          String(534            person.username535          ).replace(536            /^@/,537            ""538          )539        );540 541    }542 543 544    text +=545      (p + 1) +546      ". " +547      mention +548      "\n";549 550  }551 552 553  if (554    peopleResults.length >555    MAX_RESULTS556  ) {557 558    text +=559      "… and " +560      (561        peopleResults.length -562        MAX_RESULTS563      ) +564      " more\n";565 566  }567 568 569  text += "\n";570 571}572 573 574// ==========================================================575// 👥 GROUPS576// ==========================================================577 578if (579  groupResults.length > 0580) {581 582  text +=583    "👥 <b>GROUPS</b>\n\n";584 585 586  var groupLimit =587    Math.min(588      groupResults.length,589      MAX_RESULTS590    );591 592 593  for (594    var q = 0;595    q < groupLimit;596    q++597  ) {598 599    var group =600      groupResults[q];601 602 603    var groupName =604      escapeHTML(605        String(606          group.title ||607          "Unknown Group"608        )609      );610 611 612    text +=613      (q + 1) +614      ". 👥 <b>" +615      groupName +616      "</b>";617 618 619    if (620      group.username621    ) {622 623      text +=624        " — @" +625        escapeHTML(626          String(627            group.username628          ).replace(629            /^@/,630            ""631          )632        );633 634    }635 636 637    text += "\n";638 639  }640 641 642  if (643    groupResults.length >644    MAX_RESULTS645  ) {646 647    text +=648      "… and " +649      (650        groupResults.length -651        MAX_RESULTS652      ) +653      " more\n";654 655  }656 657 658  text += "\n";659 660}661 662 663// ==========================================================664// ❌ NO RESULTS665// ==========================================================666 667if (668  peopleResults.length === 0 &&669  groupResults.length === 0670) {671 672  text +=673    "❌ <b>No results found.</b>\n\n" +674    "Nothing in Gift's database matches " +675    "<code>" +676    escapeHTML(query) +677    "</code>.";678 679}680 681 682// ==========================================================683// 📊 TOTALS684// ==========================================================685 686if (687  peopleResults.length > 0 ||688  groupResults.length > 0689) {690 691  text +=692    "━━━━━━━━━━━━━━━━━━\n" +693    "👤 People: " +694    peopleResults.length +695    "\n" +696    "👥 Groups: " +697    groupResults.length +698    "\n" +699    "📊 Total: " +700    (701      peopleResults.length +702      groupResults.length703    );704 705}706 707 708// ==========================================================709// 📤 SEND RESULT710// ==========================================================711//712// IMPORTANT:713// reply_to_message_id makes Gift reply directly714// to the /search command.715// ==========================================================716 717try {718 719  Api.sendMessage({720 721    chat_id:722      chat.id,723 724    text:725      text,726 727    parse_mode:728      "HTML",729 730    disable_web_page_preview:731      true,732 733    reply_to_message_id:734      request.message_id735 736  });737 738} catch (e) {739 740  // Fallback without reply741  try {742 743    Bot.sendMessage(744      text745    );746 747  } catch (e2) {}748 749}750 751 752// ==========================================================753// END754// ==========================================================