Untitled


SUBMITTED BY: TaigaB1

DATE: Aug. 31, 2024, 4:38 p.m.

FORMAT: Text only

SIZE: 58.4 kB

HITS: 148

  1. const TelegramBot = require('node-telegram-bot-api');
  2. const env = require('./.env');
  3. const fs = require('fs');
  4. const bot = new TelegramBot(env.token, { polling: true });
  5. const jsonFilePathUsers = 'db/usernameIdMap.json';
  6. const jsonFilePathWarnings = 'db/warningsIdMap.json';
  7. const jsonFilePathMenu = 'db/menuIdMap.json';
  8. const MAX_WARNINGS = env.MAX_WARNINGS;
  9. let customCommands = {};
  10. let usernameToUserIdMap = [];
  11. let warnings = {};
  12. const welcomeMessages = [
  13. 'Esperamos que você se divirta por aqui!',
  14. 'Estamos felizes em tê-lo(a) no grupo.',
  15. 'Sinta-se à vontade para participar das conversas.'
  16. ];
  17. const allowedGroupIds = [
  18. '-1001576734558',
  19. '-1002005067008', //DTunnel Mod (ConfigMods)
  20. '-1002016594807', //Grupo de testes
  21. '-1001591216081' //Grupo do shaka
  22. ];
  23. if (fs.existsSync(jsonFilePathUsers)) {
  24. const jsonDataUsers = fs.readFileSync(jsonFilePathUsers);
  25. usernameToUserIdMap = JSON.parse(jsonDataUsers);
  26. }
  27. if (fs.existsSync(jsonFilePathWarnings)) {
  28. const jsonDataWarnings = fs.readFileSync(jsonFilePathWarnings);
  29. warnings = JSON.parse(jsonDataWarnings);
  30. }
  31. if (fs.existsSync(jsonFilePathMenu)) {
  32. const jsonDataMenu = fs.readFileSync(jsonFilePathMenu);
  33. customCommands = JSON.parse(jsonDataMenu);
  34. }
  35. bot.on('message', (msg) => {
  36. const chatId = msg.chat.id;
  37. const { username, id } = msg.from;
  38. if (username) {
  39. const userIndex = usernameToUserIdMap.findIndex(user => user.id === id);
  40. if (userIndex !== -1) {
  41. const firstName = msg.from.first_name || '';
  42. const lastName = msg.from.last_name || '';
  43. const usernameOld = usernameToUserIdMap[userIndex].username;
  44. if (usernameOld != username) {
  45. const message = `🧐 Mudança Detectada\n\n👤 Usuário: ${firstName + ' ' + lastName} [ID: ${id}]\n\n✏️ Mudou @${usernameOld} Para @${username}`;
  46. bot.sendMessage(chatId, message);
  47. }
  48. usernameToUserIdMap[userIndex].username = username;
  49. } else {
  50. usernameToUserIdMap.push({ id, username });
  51. }
  52. fs.writeFileSync(jsonFilePathUsers, JSON.stringify(usernameToUserIdMap, null, 4));
  53. }
  54. });
  55. bot.on('message', async (msg) => {
  56. const chatId = msg.chat.id;
  57. const msgUserId = msg.message_id;
  58. if (msg.entities && msg.entities[0].type === 'bot_command') {
  59. const command = msg.text.split(' ')[0];
  60. if (msg.chat.type === 'private') {
  61. switch (command) {
  62. case '/start':
  63. bot.sendMessage(chatId, 'Olá! Eu sou Amy gerenciadora de grupos.');
  64. break;
  65. }
  66. } else {
  67. if (command == '/id') {
  68. bot.sendMessage(chatId, `ID do Grupo: ${chatId}`);
  69. return;
  70. }
  71. if (!isChatAllowed(chatId)) {
  72. bot.sendMessage(chatId, `O bot não está autorizado a ser usado neste grupo.`);
  73. return;
  74. }
  75. switch (command) {
  76. case '/start':
  77. bot.sendMessage(chatId, 'Olá! Eu sou Amy gerenciadora de grupos.');
  78. break;
  79. case '/ban':
  80. checkAdminPermission(msg, () => {
  81. let userId;
  82. let userName;
  83. const commandParams = msg.text.split(' ');
  84. if (msg.reply_to_message) {
  85. userId = msg.reply_to_message.from.id;
  86. userName = msg.reply_to_message.from.first_name + (msg.reply_to_message.from.last_name ? ' ' + msg.reply_to_message.from.last_name : '');
  87. } else if (commandParams.length > 1 && /^\d+$/.test(commandParams[1])) {
  88. userId = commandParams[1];
  89. userName = userId;
  90. } else if (commandParams.length > 1 && commandParams[1].startsWith('@')) {
  91. const username = commandParams[1].substring(1);
  92. const user = usernameToUserIdMap.find(user => user.username === username);
  93. if (user) {
  94. const user_Id = user.id;
  95. bot.banChatMember(chatId, user_Id);
  96. sendMessageWithUndoButton(chatId, `Usuário banido: @${username} (${user_Id})`, JSON.stringify({ command: 'undo_ban', userId: user_Id }));
  97. } else {
  98. bot.sendMessage(chatId, 'O usuário não foi encontrado.');
  99. }
  100. return;
  101. } else {
  102. bot.sendMessage(chatId, 'Você precisa fornecer o ID do usuário ou o username para banir.');
  103. return;
  104. }
  105. bot.banChatMember(chatId, userId);
  106. sendMessageWithUndoButton(chatId, `Usuário banido: ${userName} (${userId})`, JSON.stringify({ command: 'undo_ban', userId: userId }));
  107. });
  108. break;
  109. case '/warn':
  110. checkAdminPermission(msg, () => {
  111. const reasonWarn = msg.text.split(' ').slice(1).join(' ');
  112. if (!reasonWarn) {
  113. const warnedUserId = msg.reply_to_message.from.id;
  114. const groupId = msg.chat.id;
  115. if (!warnings[groupId]) {
  116. warnings[groupId] = {};
  117. }
  118. const username = msg.reply_to_message.from.username;
  119. warnings[groupId][warnedUserId] = warnings[groupId][warnedUserId] ? warnings[groupId][warnedUserId] + 1 : 1;
  120. const warnMessage = `Usuário @${username} advertido: ${warnings[groupId][warnedUserId]}/3`;
  121. sendMessageWithUndoButton(chatId, warnMessage, JSON.stringify({ command: 'undo_warn', userId: warnedUserId }));
  122. if (warnings[groupId][warnedUserId] > MAX_WARNINGS) {
  123. bot.banChatMember(chatId, warnedUserId);
  124. bot.sendMessage(chatId, `Usuário banido por exceder o limite de advertências.`);
  125. delete warnings[groupId][warnedUserId];
  126. }
  127. saveWarnings();
  128. } else {
  129. const warnedUserId = msg.reply_to_message.from.id;
  130. const groupId = msg.chat.id;
  131. if (!warnings[groupId]) {
  132. warnings[groupId] = {};
  133. }
  134. const username = msg.reply_to_message.from.username;
  135. warnings[groupId][warnedUserId] = warnings[groupId][warnedUserId] ? warnings[groupId][warnedUserId] + 1 : 1;
  136. const warnMessage = `Usuário @${username} advertido: ${warnings[groupId][warnedUserId]}/3\nMotivo: ${reasonDWarn}.`;
  137. sendMessageWithUndoButton(chatId, warnMessage, JSON.stringify({ command: 'undo_warn', userId: warnedUserId }));
  138. if (warnings[groupId][warnedUserId] > MAX_WARNINGS) {
  139. bot.banChatMember(chatId, warnedUserId);
  140. bot.sendMessage(chatId, `Usuário banido por exceder o limite de advertências.`);
  141. delete warnings[groupId][warnedUserId];
  142. }
  143. saveWarnings();
  144. }
  145. });
  146. break;
  147. case '/mute':
  148. checkAdminPermission(msg, () => {
  149. let userId;
  150. let userName;
  151. if (msg.reply_to_message) {
  152. userId = msg.reply_to_message.from.id;
  153. userName = msg.reply_to_message.from.username;
  154. } else {
  155. const commandParams = msg.text.split(' ').slice(1).join(' ');
  156. if (!commandParams) {
  157. bot.sendMessage(chatId, 'Você precisa fornecer o ID do usuário, o username ou usar o comando em resposta a uma mensagem.');
  158. return;
  159. }
  160. if (/^\d+$/.test(commandParams)) {
  161. userId = commandParams;
  162. userName = userId;
  163. bot.getChatMember(chatId, userId).then((user) => {
  164. userName = user.user.username || 'não disponível';
  165. const options = {
  166. until_date: Math.floor(Date.now() / 1000) + 3600,
  167. can_send_messages: false
  168. };
  169. bot.restrictChatMember(chatId, userId, options);
  170. sendMessageWithUndoButton(chatId, `@${userName} (${userId}) mutado por 1h.`, JSON.stringify({ command: 'undo_mute', userId: userId }));
  171. }).catch((error) => {
  172. console.error('Erro ao obter informações do usuário:', error.message);
  173. bot.sendMessage(chatId, 'Erro ao obter informações do usuário.');
  174. });
  175. return;
  176. } else if (commandParams.startsWith('@')) {
  177. const usernameParam = commandParams.substring(1);
  178. const user = usernameToUserIdMap.find(user => user.username === usernameParam);
  179. if (user) {
  180. userId = user.id;
  181. userName = usernameParam;
  182. const options = {
  183. until_date: Math.floor(Date.now() / 1000) + 3600,
  184. can_send_messages: false
  185. };
  186. bot.restrictChatMember(chatId, userId, options);
  187. sendMessageWithUndoButton(chatId, `@${userName} (${userId}) mutado por 1h.`, JSON.stringify({ command: 'undo_mute', userId: userId }));
  188. return;
  189. } else {
  190. bot.sendMessage(chatId, 'Usuário não encontrado.');
  191. return;
  192. }
  193. } else {
  194. bot.sendMessage(chatId, 'Formato de entrada inválido. Use /mute @username ou /mute user_id.');
  195. return;
  196. }
  197. }
  198. const options = {
  199. until_date: Math.floor(Date.now() / 1000) + 3600,
  200. can_send_messages: false
  201. };
  202. bot.restrictChatMember(chatId, userId, options);
  203. sendMessageWithUndoButton(chatId, `@${userName} (${userId}) mutado por 1h.`, JSON.stringify({ command: 'undo_mute', userId: userId }));
  204. });
  205. break;
  206. case '/unmute':
  207. checkAdminPermission(msg, () => {
  208. let userId;
  209. let userName;
  210. if (msg.reply_to_message) {
  211. userId = msg.reply_to_message.from.id;
  212. userName = msg.reply_to_message.from.username;
  213. } else {
  214. const commandParams = msg.text.split(' ').slice(1).join(' ');
  215. if (!commandParams) {
  216. bot.sendMessage(chatId, 'Você precisa fornecer o ID do usuário, o username ou usar o comando em resposta a uma mensagem.');
  217. return;
  218. }
  219. if (/^\d+$/.test(commandParams)) {
  220. userId = commandParams;
  221. userName = userId;
  222. bot.getChatMember(chatId, userId).then((user) => {
  223. userName = user.user.username || 'não disponível';
  224. const options = { can_send_messages: true };
  225. bot.restrictChatMember(chatId, userId, options);
  226. bot.sendMessage(chatId, `@${userName} foi desmutado.`);
  227. }).catch((error) => {
  228. console.error('Erro ao obter informações do usuário:', error.message);
  229. bot.sendMessage(chatId, 'Erro ao obter informações do usuário.');
  230. });
  231. return;
  232. } else if (commandParams.startsWith('@')) {
  233. const usernameParam = commandParams.substring(1);
  234. const user = usernameToUserIdMap.find(user => user.username === usernameParam);
  235. if (user) {
  236. userId = user.id;
  237. userName = usernameParam;
  238. const options = { can_send_messages: true };
  239. bot.restrictChatMember(chatId, userId, options);
  240. bot.sendMessage(chatId, `@${userName} foi desmutado.`);
  241. return;
  242. } else {
  243. bot.sendMessage(chatId, 'Usuário não encontrado.');
  244. return;
  245. }
  246. } else {
  247. bot.sendMessage(chatId, 'Formato de entrada inválido. Use /unmute @username ou /unmute user_id.');
  248. return;
  249. }
  250. }
  251. const options = { can_send_messages: true };
  252. bot.restrictChatMember(chatId, userId, options);
  253. bot.sendMessage(chatId, `@${userName} foi desmutado.`);
  254. });
  255. break;
  256. case '/info':
  257. checkAdminPermission(msg, () => {
  258. let userId;
  259. let username;
  260. let user_id;
  261. const commandParams = msg.text.split(' ');
  262. if (msg.reply_to_message) {
  263. userId = msg.reply_to_message.from.id;
  264. username = msg.reply_to_message.from.username || 'não disponível';
  265. user_id = userId;
  266. } else {
  267. const firstParam = commandParams[1];
  268. if (commandParams[1] != null) {
  269. if (/^\d+$/.test(firstParam)) {
  270. userId = firstParam;
  271. bot.getChatMember(chatId, userId).then((user) => {
  272. user_id = user.user.id;
  273. username = user.user.username || 'não disponível';
  274. const userWarnings = warnings[userId] || 0;
  275. bot.sendMessage(chatId, `Informações sobre o usuário:\nUser: @${username}\nID: ${user_id}\nNúmero de advertências: ${userWarnings}`);
  276. }).catch((error) => {
  277. console.error('Erro ao obter informações do usuário:', error.message);
  278. bot.sendMessage(chatId, 'Erro ao obter informações do usuário.');
  279. });
  280. return;
  281. } else if (firstParam.startsWith('@')) {
  282. const usernameParam = firstParam.substring(1);
  283. const user = usernameToUserIdMap.find(user => user.username === usernameParam);
  284. if (user) {
  285. user_id = user.id;
  286. username = usernameParam;
  287. } else {
  288. bot.sendMessage(chatId, 'O usuário não foi encontrado.');
  289. return;
  290. }
  291. }
  292. } else {
  293. bot.sendMessage(chatId, 'Você precisa fornecer o ID do usuário, o username ou usar o comando em resposta a uma mensagem.');
  294. return;
  295. }
  296. }
  297. const userWarnings = warnings[userId] || 0;
  298. bot.sendMessage(chatId, `Informações sobre o usuário:\nUser: @${username}\nID: ${user_id}\nNúmero de advertências: ${userWarnings}`);
  299. });
  300. break;
  301. case '/dwarn':
  302. checkAdminPermission(msg, () => {
  303. const reasonDWarn = msg.text.split(' ').slice(1).join(' ');
  304. if (!reasonDWarn) {
  305. const warnedUserId = msg.reply_to_message.from.id;
  306. const groupId = msg.chat.id;
  307. if (!warnings[groupId]) {
  308. warnings[groupId] = {};
  309. }
  310. const username = msg.reply_to_message.from.username;
  311. warnings[groupId][warnedUserId] = warnings[groupId][warnedUserId] ? warnings[groupId][warnedUserId] + 1 : 1;
  312. bot.deleteMessage(chatId, msg.reply_to_message.message_id);
  313. const warnMessage = `Usuário @${username} advertido: ${warnings[groupId][warnedUserId]}/3`;
  314. sendMessageWithUndoButton(chatId, warnMessage, JSON.stringify({ command: 'undo_warn', userId: warnedUserId }));
  315. if (warnings[groupId][warnedUserId] > MAX_WARNINGS) {
  316. bot.banChatMember(chatId, warnedUserId);
  317. bot.sendMessage(chatId, `Usuário banido por exceder o limite de advertências.`);
  318. delete warnings[groupId][warnedUserId];
  319. }
  320. saveWarnings();
  321. } else {
  322. const warnedUserId = msg.reply_to_message.from.id;
  323. const groupId = msg.chat.id;
  324. if (!warnings[groupId]) {
  325. warnings[groupId] = {};
  326. }
  327. const username = msg.reply_to_message.from.username;
  328. warnings[groupId][warnedUserId] = warnings[groupId][warnedUserId] ? warnings[groupId][warnedUserId] + 1 : 1;
  329. bot.deleteMessage(chatId, msg.reply_to_message.message_id);
  330. const warnMessage = `Usuário @${username} adivertido: ${warnings[groupId][warnedUserId]}/3\nMotivo: ${reasonDWarn}.`;
  331. sendMessageWithUndoButton(chatId, warnMessage, JSON.stringify({ command: 'undo_warn', userId: warnedUserId }));
  332. if (warnings[groupId][warnedUserId] > MAX_WARNINGS) {
  333. bot.banChatMember(chatId, warnedUserId);
  334. bot.sendMessage(chatId, `Usuário banido por exceder o limite de advertências.`);
  335. delete warnings[groupId][warnedUserId];
  336. }
  337. saveWarnings();
  338. }
  339. });
  340. break;
  341. case '/dmute':
  342. checkAdminPermission(msg, () => {
  343. const messageId = msg.reply_to_message.message_id;
  344. bot.deleteMessage(chatId, messageId).then(() => {
  345. const userId = msg.reply_to_message.from.id;
  346. const options = {
  347. until_date: Math.floor(Date.now() / 1000) + 3600,
  348. can_send_messages: false
  349. };
  350. bot.restrictChatMember(chatId, userId, options).then(() => {
  351. sendMessageWithUndoButton(chatId, 'Mensagem apagada e usuário mutado por 1 hora.', JSON.stringify({ command: 'undo_mute', userId: userId }));
  352. }).catch((error) => {
  353. console.error('Erro ao mutar usuário:', error.message);
  354. bot.sendMessage(chatId, 'Erro ao mutar usuário.');
  355. });
  356. }).catch((error) => {
  357. console.error('Erro ao apagar mensagem:', error.message);
  358. bot.sendMessage(chatId, 'Erro ao apagar mensagem.');
  359. });
  360. });
  361. break;
  362. case '/dban':
  363. checkAdminPermission(msg, () => {
  364. const messageId = msg.reply_to_message.message_id;
  365. bot.deleteMessage(chatId, messageId).then(() => {
  366. const userId = msg.reply_to_message.from.id;
  367. bot.banChatMember(chatId, userId).then(() => {
  368. sendMessageWithUndoButton(chatId, 'Mensagem apagada e usuário banido.', JSON.stringify({ command: 'undo_ban', userId: userId }));
  369. }).catch((error) => {
  370. console.error('Erro ao banir usuário:', error.message);
  371. bot.sendMessage(chatId, 'Erro ao banir usuário.');
  372. });
  373. }).catch((error) => {
  374. console.error('Erro ao apagar mensagem:', error.message);
  375. bot.sendMessage(chatId, 'Erro ao apagar mensagem.');
  376. });
  377. });
  378. break;
  379. case '/promote':
  380. checkCreatorPermission(msg, async () => {
  381. const commandParams = msg.text.split(' ');
  382. let userId;
  383. let userName;
  384. let user_name;
  385. if (msg.reply_to_message) {
  386. userId = msg.reply_to_message.from.id;
  387. userName = msg.reply_to_message.from.first_name + (msg.reply_to_message.from.last_name ? ' ' + msg.reply_to_message.from.last_name : '');
  388. user_name = msg.reply_to_message.from.username;
  389. }
  390. if (!userId && commandParams.length > 1 && /^\d+$/.test(commandParams[1])) {
  391. userId = commandParams[1];
  392. userName = userId;
  393. user_name = msg.reply_to_message.from.username;
  394. }
  395. if (!userId && commandParams.length > 1 && commandParams[1].startsWith('@')) {
  396. const username = commandParams[1].substring(1);
  397. // Procurar o usuário no usernameToUserIdMap
  398. const user = usernameToUserIdMap.find(user => user.username === username);
  399. if (user) {
  400. const user_Id = user.id;
  401. await bot.promoteChatMember(chatId, user_Id, { can_change_info: false, can_delete_messages: true, can_invite_users: true, can_restrict_members: true, can_pin_messages: true, can_promote_members: false });
  402. bot.sendMessage(chatId, `Usuário @${username} promovido a administrador.`);
  403. return;
  404. } else {
  405. bot.sendMessage(chatId, 'O usuário não foi encontrado.');
  406. return;
  407. }
  408. }
  409. if (!userId) {
  410. bot.sendMessage(chatId, 'Você precisa fornecer o ID do usuário, o username ou usar o comando em resposta a uma mensagem.');
  411. return;
  412. }
  413. try {
  414. await bot.promoteChatMember(chatId, userId, { can_change_info: false, can_delete_messages: true, can_invite_users: true, can_restrict_members: true, can_pin_messages: true, can_promote_members: false });
  415. bot.sendMessage(chatId, `Usuário @${user_name} promovido a administrador.`);
  416. } catch (error) {
  417. console.error('Erro ao promover usuário a administrador:', error.message);
  418. bot.sendMessage(chatId, 'Erro ao promover usuário a administrador.');
  419. }
  420. });
  421. break;
  422. case '/send':
  423. const commandParams = msg.text.split(' ').slice(1).join(' ');
  424. console.log(commandParams)
  425. bot.deleteMessage(chatId, msg.message_id);
  426. bot.sendMessage(chatId, commandParams);
  427. break;
  428. case '/comandos':
  429. const message = await fs.readFileSync('db/comandos.txt', 'utf-8');
  430. bot.sendMessage(chatId, message, { parse_mode: 'HTML' });
  431. break;
  432. case '/create':
  433. checkAdminPermission(msg, async () => {
  434. const commandData = msg.text.split(' ').slice(1).join(' ').split(':') || [];
  435. const commandName = commandData[0] ? commandData[0].trim() : false;
  436. const commandOrder = commandData[1] ? parseInt(commandData[1].trim()) : false;
  437. const groupId = msg.chat.id;
  438. if (!customCommands[groupId]) {
  439. customCommands[groupId] = {};
  440. }
  441. if (!commandData || commandData.length !== 2) {
  442. bot.sendMessage(chatId, 'Formato inválido. Use /create nome:ordem');
  443. return;
  444. }
  445. if (!commandName) {
  446. bot.sendMessage(chatId, 'Necessário adicionar um nome para o comando.');
  447. return;
  448. }
  449. if (!commandOrder || isNaN(commandOrder) || commandOrder <= 0) {
  450. bot.sendMessage(chatId, 'Necessário adicionar uma ordem válida para o comando.');
  451. return;
  452. }
  453. if (customCommands[groupId][commandName]) {
  454. bot.sendMessage(chatId, `O comando '${commandName}' já existe.`);
  455. return;
  456. }
  457. if (!msg.reply_to_message || !msg.reply_to_message.text) {
  458. bot.sendMessage(chatId, 'Você precisa responder a uma mensagem para criar um comando personalizado.');
  459. return;
  460. }
  461. const messageText = msg.reply_to_message.text;
  462. customCommands[groupId][commandName] = { text: messageText, order: commandOrder };
  463. bot.sendMessage(chatId, `Comando personalizado '${commandName}' criado com número de ordem '${commandOrder}'.`);
  464. // Ordena os comandos personalizados por número de ordem
  465. const sortedCommands = Object.entries(customCommands[groupId]).sort((a, b) => a[1].order - b[1].order);
  466. customCommands[groupId] = Object.fromEntries(sortedCommands);
  467. fs.writeFileSync(jsonFilePathMenu, JSON.stringify(customCommands, null, 4));
  468. menuOptions = createMenuButtons(groupId);
  469. });
  470. break;
  471. case '/menu':
  472. menuOptions = createMenuButtons(chatId);
  473. const commands = customCommands[chatId];
  474. bot.getChatMember(chatId, msg.from.id)
  475. .then(chatMember => {
  476. let username = '';
  477. if (chatMember.user.username) {
  478. username = '@' + chatMember.user.username;
  479. } else if (chatMember.user.first_name) {
  480. username = `${chatMember.user.first_name} (ID: ${chatMember.user.id.toString()})`;
  481. }
  482. setTimeout(() => {
  483. bot.deleteMessage(chatId, msgUserId)
  484. .catch(error => {
  485. console.error('Erro ao excluir mensagem:', error);
  486. });
  487. }, 2 * 1000);
  488. if (commands && Object.keys(commands).length > 0) {
  489. bot.sendPhoto(chatId, 'bot.png', {
  490. caption: `Solicitado por: ${username}\n\nSelecione uma ação:`,
  491. reply_markup: menuOptions.reply_markup,
  492. }).then(sentMessage => {
  493. const messageId = sentMessage.message_id;
  494. const delaySeconds = 90;
  495. setTimeout(() => {
  496. bot.deleteMessage(chatId, messageId)
  497. .catch(error => {
  498. console.error('Erro ao excluir mensagem:', error);
  499. });
  500. }, delaySeconds * 1000);
  501. }).catch(error => {
  502. console.error('Erro ao enviar mensagem:', error);
  503. });
  504. } else {
  505. bot.sendMessage(chatId, 'Nenhum comando personalizado foi criado ainda');
  506. }
  507. })
  508. .catch(error => {
  509. console.error('Erro ao obter informações do membro do chat:', error);
  510. });
  511. break;
  512. case '/delete':
  513. checkAdminPermission(msg, async () => {
  514. const commandToDelete = msg.text.split(' ').slice(1).join(' ');
  515. const groupIdToDelete = msg.chat.id;
  516. if (customCommands.hasOwnProperty(groupIdToDelete) && customCommands[groupIdToDelete].hasOwnProperty(commandToDelete)) {
  517. delete customCommands[groupIdToDelete][commandToDelete];
  518. bot.sendMessage(msg.chat.id, `Comando "${commandToDelete}" deletado com sucesso.`)
  519. .then(sentMessage => {
  520. menuOptions = createMenuButtons(groupIdToDelete);
  521. fs.writeFileSync(jsonFilePathMenu, JSON.stringify(customCommands, null, 4));
  522. // bot.editMessageReplyMarkup(menuOptions.reply_markup, {
  523. // chat_id: sentMessage.chat.id,
  524. // message_id: sentMessage.message_id
  525. // });
  526. })
  527. .catch(error => {
  528. console.error('Erro ao enviar mensagem:', error);
  529. });
  530. } else {
  531. bot.sendMessage(msg.chat.id, `O comando "${commandToDelete}" não existe.`);
  532. }
  533. });
  534. break;
  535. case '/unban':
  536. checkAdminPermission(msg, async () => {
  537. let userId;
  538. let user_name
  539. const commandParams = msg.text.split(' ');
  540. if (msg.reply_to_message) {
  541. userId = msg.reply_to_message.from.id;
  542. }
  543. if (!userId && commandParams.length > 1 && /^\d+$/.test(commandParams[1])) {
  544. userId = commandParams[1];
  545. }
  546. if (!userId && commandParams.length > 1 && commandParams[1].startsWith('@')) {
  547. const usernameParam = commandParams[1].substring(1);
  548. const user = usernameToUserIdMap.find(user => user.username === usernameParam);
  549. if (user) {
  550. userId = user.id;
  551. user_name = usernameParam;
  552. } else {
  553. bot.sendMessage(chatId, 'O usuário não foi encontrado.');
  554. return;
  555. }
  556. }
  557. if (!userId) {
  558. bot.sendMessage(chatId, 'Você precisa fornecer o ID do usuário, o username ou usar o comando em resposta a uma mensagem.');
  559. return;
  560. }
  561. bot.getChatMember(msg.chat.id, userId)
  562. .then(chatMember => {
  563. user_name = chatMember.user.username;
  564. })
  565. .catch(error => {
  566. console.error('Erro ao obter informações do membro do chat:', error);
  567. });
  568. try {
  569. await bot.unbanChatMember(chatId, userId);
  570. bot.sendMessage(chatId, `Usuário @${user_name} (ID: ${userId}) foi desbanido.`);
  571. } catch (error) {
  572. console.error('Erro ao desbanir usuário:', error.message);
  573. bot.sendMessage(chatId, 'Erro ao desbanir usuário.');
  574. }
  575. });
  576. break;
  577. case '/pin':
  578. checkAdminPermission(msg, async () => {
  579. const messageId = msg.reply_to_message.message_id;
  580. if (!messageId) {
  581. bot.sendMessage(chatId, 'Por favor, responda à mensagem que deseja fixar com o comando /pin.')
  582. .then(sentMessage => {
  583. const messageId = sentMessage.message_id;
  584. const delaySeconds = 30;
  585. setTimeout(() => {
  586. bot.deleteMessage(chatId, messageId)
  587. .catch(error => {
  588. console.error('Erro ao excluir mensagem:', error);
  589. });
  590. }, delaySeconds * 1000);
  591. }).catch(error => {
  592. console.error('Erro ao enviar mensagem:', error);
  593. });
  594. return;
  595. }
  596. bot.pinChatMessage(chatId, messageId)
  597. .then(() => {
  598. bot.sendMessage(chatId, 'A mensagem foi fixada com sucesso.')
  599. .then(sentMessage => {
  600. const messageId = sentMessage.message_id;
  601. const delaySeconds = 30;
  602. setTimeout(() => {
  603. bot.deleteMessage(chatId, messageId)
  604. .catch(error => {
  605. console.error('Erro ao excluir mensagem:', error);
  606. });
  607. }, delaySeconds * 1000);
  608. }).catch(error => {
  609. console.error('Erro ao enviar mensagem:', error);
  610. });
  611. })
  612. .catch((error) => {
  613. console.error('Erro ao fixar mensagem:', error);
  614. bot.sendMessage(chatId, 'Ocorreu um erro ao fixar a mensagem. Por favor, tente novamente mais tarde.')
  615. .then(sentMessage => {
  616. const messageId = sentMessage.message_id;
  617. const delaySeconds = 30;
  618. setTimeout(() => {
  619. bot.deleteMessage(chatId, messageId)
  620. .catch(error => {
  621. console.error('Erro ao excluir mensagem:', error);
  622. });
  623. }, delaySeconds * 1000);
  624. }).catch(error => {
  625. console.error('Erro ao enviar mensagem:', error);
  626. });
  627. });
  628. });
  629. break;
  630. case '/editar_ordem':
  631. checkAdminPermission(msg, async () => {
  632. const commandData = msg.text.split(' ').slice(1).join(' ').split(':');
  633. const commandName = commandData[0].trim();
  634. const newPosition = parseInt(commandData[1].trim());
  635. const groupId = msg.chat.id;
  636. if (!customCommands[groupId]) {
  637. customCommands[groupId] = {};
  638. }
  639. if (isNaN(newPosition) || newPosition <= 0) {
  640. bot.sendMessage(chatId, 'A nova posição do comando deve ser um valor numérico maior que zero.');
  641. return;
  642. }
  643. if (!customCommands[groupId][commandName]) {
  644. bot.sendMessage(chatId, `O comando '${commandName}' não existe.`);
  645. return;
  646. }
  647. customCommands[groupId][commandName].order = newPosition;
  648. const sortedCommands = Object.entries(customCommands[groupId]).sort((a, b) => a[1].order - b[1].order);
  649. customCommands[groupId] = Object.fromEntries(sortedCommands);
  650. fs.writeFileSync(jsonFilePathMenu, JSON.stringify(customCommands, null, 4));
  651. bot.sendMessage(chatId, `Posição do comando '${commandName}' atualizada para '${newPosition}'.`);
  652. menuOptions = createMenuButtons(groupId);
  653. });
  654. break;
  655. case '/editar_texto':
  656. checkAdminPermission(msg, async () => {
  657. const commandName = msg.text.split(' ').slice(1).join(' ');
  658. const groupId = msg.chat.id;
  659. if (!customCommands[groupId]) {
  660. customCommands[groupId] = {};
  661. }
  662. if (!customCommands[groupId][commandName]) {
  663. bot.sendMessage(chatId, `O comando '${commandName}' não existe.`);
  664. return;
  665. }
  666. if (!msg.reply_to_message || !msg.reply_to_message.text) {
  667. bot.sendMessage(chatId, 'Você precisa responder a uma mensagem para editar o texto do comando.');
  668. return;
  669. }
  670. const newMessageText = msg.reply_to_message.text;
  671. customCommands[groupId][commandName].text = newMessageText;
  672. fs.writeFileSync(jsonFilePathMenu, JSON.stringify(customCommands, null, 4));
  673. bot.sendMessage(chatId, `Texto do comando '${commandName}' atualizado.`);
  674. menuOptions = createMenuButtons(groupId);
  675. });
  676. break;
  677. case '/editar_comando':
  678. checkAdminPermission(msg, async () => {
  679. const commandData = msg.text.split(' ').slice(1).join(' ').split(':');
  680. const currentCommandName = commandData[0].trim();
  681. const newCommandName = commandData[1].trim();
  682. const groupId = msg.chat.id;
  683. if (!customCommands[groupId]) {
  684. customCommands[groupId] = {};
  685. }
  686. if (!customCommands[groupId][currentCommandName]) {
  687. bot.sendMessage(chatId, `O comando '${currentCommandName}' não existe.`);
  688. return;
  689. }
  690. if (customCommands[groupId][newCommandName]) {
  691. bot.sendMessage(chatId, `O novo nome '${newCommandName}' já está em uso.`);
  692. return;
  693. }
  694. customCommands[groupId][newCommandName] = customCommands[groupId][currentCommandName];
  695. delete customCommands[groupId][currentCommandName];
  696. fs.writeFileSync(jsonFilePathMenu, JSON.stringify(customCommands, null, 4));
  697. bot.sendMessage(chatId, `Nome do comando '${currentCommandName}' atualizado para '${newCommandName}'.`);
  698. menuOptions = createMenuButtons(groupId);
  699. });
  700. break;
  701. }
  702. }
  703. }
  704. });
  705. bot.on('callback_query', (callbackQuery) => {
  706. const msg = callbackQuery.message;
  707. const data = JSON.parse(callbackQuery.data);
  708. const user_callbackId = callbackQuery.from.id;
  709. const userId = data.userId;
  710. const groupId = msg.chat.id;
  711. if (!isChatAllowed(groupId)) {
  712. bot.sendMessage(groupId, `O bot não está autorizado a ser usado neste grupo.`);
  713. return;
  714. }
  715. switch (data.command) {
  716. case 'undo_warn':
  717. bot.getChatMember(groupId, user_callbackId)
  718. .then(chatMember => {
  719. const memberStatus = chatMember.status;
  720. if (memberStatus === 'member' || memberStatus === 'administrator' || memberStatus === 'creator') {
  721. const status = chatMember.status;
  722. if (status === 'administrator' || status === 'creator') {
  723. if (warnings[groupId][userId] && warnings[groupId][userId] > 0) {
  724. warnings[groupId][userId]--;
  725. bot.editMessageText('Aviso removido.', {
  726. chat_id: groupId,
  727. message_id: msg.message_id
  728. });
  729. saveWarnings();
  730. } else {
  731. bot.sendMessage(groupId, 'Este usuário não possui advertências.');
  732. }
  733. } else {
  734. bot.answerCallbackQuery(callbackQuery.id, 'Você não tem permissão para executar este comando.');
  735. }
  736. }
  737. })
  738. .catch(error => {
  739. console.error('Erro ao obter informações do membro do chat:', error.message);
  740. });
  741. break;
  742. case 'undo_ban':
  743. bot.getChatMember(groupId, user_callbackId)
  744. .then(chatMember => {
  745. const memberStatus = chatMember.status;
  746. if (memberStatus === 'member' || memberStatus === 'administrator' || memberStatus === 'creator') {
  747. const status = chatMember.status;
  748. if (status === 'administrator' || status === 'creator') {
  749. bot.unbanChatMember(groupId, userId);
  750. bot.editMessageText('Banimento removido.', {
  751. chat_id: groupId,
  752. message_id: msg.message_id
  753. });
  754. } else {
  755. bot.answerCallbackQuery(callbackQuery.id, 'Você não tem permissão para executar este comando.');
  756. }
  757. }
  758. })
  759. .catch(error => {
  760. console.error('Erro ao obter informações do membro do chat:', error.message);
  761. });
  762. break;
  763. case 'undo_mute':
  764. bot.getChatMember(groupId, user_callbackId)
  765. .then(chatMember => {
  766. const memberStatus = chatMember.status;
  767. if (memberStatus === 'member' || memberStatus === 'administrator' || memberStatus === 'creator') {
  768. const status = chatMember.status;
  769. if (status === 'administrator' || status === 'creator') {
  770. const options = { can_send_messages: true };
  771. bot.restrictChatMember(groupId, userId, options);
  772. bot.editMessageText('Ação de mutar desfeita com sucesso.', {
  773. chat_id: groupId,
  774. message_id: msg.message_id
  775. });
  776. } else {
  777. bot.answerCallbackQuery(callbackQuery.id, 'Você não tem permissão para executar este comando.');
  778. }
  779. }
  780. })
  781. .catch(error => {
  782. console.error('Erro ao obter informações do membro do chat:', error.message);
  783. });
  784. break;
  785. case 'callback_menu':
  786. menuOptions = createMenuButtons(groupId);
  787. const commands = customCommands[groupId];
  788. if (commands && Object.keys(commands).length > 0) {
  789. bot.getChatMember(groupId, user_callbackId)
  790. .then(chatMember => {
  791. const memberStatus = chatMember.status;
  792. if (memberStatus === 'member' || memberStatus === 'administrator' || memberStatus === 'creator') {
  793. let username = '';
  794. if (chatMember.user.username) {
  795. username = '@' + chatMember.user.username;
  796. } else if (chatMember.user.first_name) {
  797. username = `${chatMember.user.first_name} (ID: ${chatMember.user.id.toString()})`;
  798. }
  799. bot.sendPhoto(groupId, 'bot.png', {
  800. caption: `Solicitado por: ${username}\n\nSelecione uma ação:`,
  801. reply_markup: menuOptions.reply_markup,
  802. }).then(sentMessage => {
  803. const messageId = sentMessage.message_id;
  804. const delaySeconds = 90;
  805. setTimeout(() => {
  806. bot.deleteMessage(groupId, messageId)
  807. .catch(error => {
  808. console.error('Erro ao excluir mensagem:', error.message);
  809. });
  810. }, delaySeconds * 1000);
  811. }).catch(error => {
  812. console.error('Erro ao enviar mensagem:', error.message);
  813. });
  814. }
  815. })
  816. .catch(error => {
  817. console.error('Erro ao obter informações do membro do chat:', error.message);
  818. });
  819. } else {
  820. bot.sendMessage(groupId, 'Nenhum comando personalizado foi criado ainda');
  821. }
  822. break;
  823. default:
  824. const command = data.command.replace('action_', '');
  825. if (customCommands[groupId] && customCommands[groupId][command]) {
  826. bot.getChatMember(groupId, user_callbackId)
  827. .then(chatMember => {
  828. const memberStatus = chatMember.status;
  829. if (memberStatus === 'member' || memberStatus === 'administrator' || memberStatus === 'creator') {
  830. let username = '';
  831. if (chatMember.user.username) {
  832. username = '@' + chatMember.user.username;
  833. } else if (chatMember.user.first_name) {
  834. username = `${chatMember.user.first_name} (ID: ${chatMember.user.id.toString()})`;
  835. }
  836. bot.sendMessage(groupId, `${customCommands[groupId][command].text}\n\nSolicitado por: ${username}`, { parse_mode: 'HTML' }).then(sentMessage => {
  837. const messageId = sentMessage.message_id;
  838. const delaySeconds = 90;
  839. setTimeout(() => {
  840. bot.deleteMessage(groupId, messageId)
  841. .catch(error => {
  842. console.error('Erro ao excluir mensagem:', error.message);
  843. });
  844. }, delaySeconds * 1000);
  845. }).catch(error => {
  846. if (error.message.includes(`can't parse entities: Can't find end tag corresponding to start tag code`)) {
  847. bot.sendMessage(groupId, `Erro: Alguma tag foi utilizada de forma incorreta neste comando.`);
  848. } else {
  849. bot.sendMessage(groupId, `Erro: ${error.message}`);
  850. }
  851. });
  852. }
  853. })
  854. .catch(error => {
  855. console.error('Erro ao obter informações do membro do chat:', error.message);
  856. });
  857. } else {
  858. bot.sendMessage(groupId, 'Este comando personalizado não está disponível.');
  859. }
  860. break;
  861. }
  862. });
  863. bot.on('new_chat_members', (msg) => {
  864. const chatId = msg.chat.id;
  865. const newMembers = msg.new_chat_members;
  866. if (!isChatAllowed(chatId)) {
  867. bot.sendMessage(chatId, `O bot não está autorizado a ser usado neste grupo.`);
  868. return;
  869. }
  870. newMembers.forEach((member) => {
  871. const welcomeMessage = welcomeMessages[Math.floor(Math.random() * welcomeMessages.length)];
  872. let username = '';
  873. if (member.username) {
  874. username = '@' + member.username;
  875. } else if (member.first_name) {
  876. username = `${member.first_name} (ID: ${member.id.toString()})`;
  877. }
  878. const text = `Bem-vindo(a) ${username}\n${welcomeMessage}\n\nAperte no botão a baixo para ver as opções do grupo.`;
  879. const keyboard = {
  880. inline_keyboard: [
  881. [
  882. {
  883. text: 'menu',
  884. callback_data: JSON.stringify({ command: 'callback_menu', userId: member.id.toString() })
  885. }
  886. ]
  887. ]
  888. };
  889. bot.sendMessage(chatId, text, { reply_markup: JSON.stringify(keyboard) })
  890. .then(sentMessage => {
  891. const messageId = sentMessage.message_id;
  892. const delaySeconds = 90;
  893. setTimeout(() => {
  894. bot.deleteMessage(chatId, messageId)
  895. .catch(error => {
  896. console.error('Erro ao excluir mensagem:', error.message);
  897. });
  898. }, delaySeconds * 1000);
  899. }).catch(error => {
  900. console.error('Erro ao enviar mensagem:', error.message);
  901. });
  902. });
  903. });
  904. bot.on('left_chat_member', (msg) => {
  905. const chatId = msg.chat.id;
  906. const userName = msg.left_chat_member.username;
  907. const firstName = msg.left_chat_member.first_name;
  908. const lastName = msg.left_chat_member.last_name || '';
  909. const message = `O usuário ${firstName} ${lastName} (@${userName}) saiu do grupo.`;
  910. if (!isChatAllowed(chatId)) {
  911. bot.sendMessage(chatId, `O bot não está autorizado a ser usado neste grupo.`);
  912. return;
  913. }
  914. bot.sendMessage(chatId, message)
  915. .then(sentMessage => {
  916. const messageId = sentMessage.message_id;
  917. const delaySeconds = 60;
  918. setTimeout(() => {
  919. bot.deleteMessage(chatId, messageId)
  920. .catch(error => {
  921. console.error('Erro ao excluir mensagem:', error.message);
  922. });
  923. }, delaySeconds * 1000);
  924. }).catch(error => {
  925. console.error('Erro ao enviar mensagem:', error.message);
  926. });
  927. });
  928. bot.on('polling_error', (error) => {
  929. console.error(error.message);
  930. });
  931. function checkAdminPermission(msg, callback) {
  932. const chatId = msg.chat.id;
  933. bot.getChatMember(chatId, msg.from.id).then((chatMember) => {
  934. if (chatMember.status === 'administrator' || chatMember.status === 'creator') {
  935. callback();
  936. } else {
  937. bot.answerCallbackQuery(chatId, 'Você não tem permissão para usar este comando.');
  938. }
  939. });
  940. }
  941. function checkCreatorPermission(msg, callback) {
  942. const chatId = msg.chat.id;
  943. bot.getChatMember(chatId, msg.from.id).then((chatMember) => {
  944. if (chatMember.status === 'creator') {
  945. callback();
  946. } else {
  947. bot.answerCallbackQuery(chatId, 'Você não tem permissão para usar este comando.');
  948. }
  949. });
  950. }
  951. function sendMessageWithUndoButton(chatId, text, undoCallbackData) {
  952. const keyboard = {
  953. inline_keyboard: [
  954. [
  955. {
  956. text: 'Desfazer',
  957. callback_data: undoCallbackData
  958. }
  959. ]
  960. ]
  961. };
  962. bot.sendMessage(chatId, text, { reply_markup: JSON.stringify(keyboard) });
  963. }
  964. function createMenuButtons(groupId) {
  965. let commands = customCommands[groupId] ? Object.entries(customCommands[groupId]) : [];
  966. commands.sort((a, b) => a[1].order - b[1].order);
  967. const buttons = commands.map(command => ({ text: command[0], callback_data: JSON.stringify({ command: `action_${command[0]}` }) }));
  968. const buttonsInRows = [];
  969. for (let i = 0; i < buttons.length; i += 2) {
  970. buttonsInRows.push(buttons.slice(i, i + 2));
  971. }
  972. return {
  973. reply_markup: {
  974. inline_keyboard: buttonsInRows
  975. }
  976. };
  977. }
  978. function isChatAllowed(chatId) {
  979. return allowedGroupIds.includes(chatId.toString());
  980. }
  981. function saveWarnings() {
  982. try {
  983. fs.writeFileSync(jsonFilePathWarnings, JSON.stringify(warnings, null, 4));
  984. console.log('Warnings salvos com sucesso.');
  985. } catch (error) {
  986. console.error('Erro ao salvar os warnings no arquivo JSON:', error);
  987. }
  988. }

comments powered by Disqus