├── .gitignore ├── Readme.md ├── config.json ├── index.js ├── lib ├── function.js ├── help.js └── tele.js └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | # node module 2 | node_modules/ 3 | 4 | # lock files 5 | package-lock.json 6 | *.lock 7 | 8 | test*.* 9 | -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | # LoL Human Telegram Bot 2 | 3 | # Installation 4 | 5 | ## Windows 6 | * [`Download Node JS`](https://nodejs.org/en/download/) 7 | * [`Download Git`](https://git-scm.com/download/win) 8 | 9 | 10 | ## Cloning this repo 11 | ```cmd 12 | > git clone https://github.com/LoL-Human/TelegramBot-NodeJS 13 | > cd TelegramBot-NodeJS 14 | ``` 15 | 16 | ## Install the package 17 | ```cmd 18 | > npm i 19 | ``` 20 | 21 | ## Edit config file 22 | Edit the required value in `config.json`. You can get the apikey at [`LoL Human Rest API`](http://api.lolhuman.xyz/). And get bot token at [`@BotFather`](http://t.me/BotFather). 23 | ```json 24 | { 25 | "apikey": "", 26 | "bot_token": "", 27 | "owner": "LoL Human", 28 | "ownerLink": "https://t.me/LoLHumen", 29 | "version": "1.0.0", 30 | "prefix": "/" 31 | } 32 | ``` 33 | 34 | ## Run the bot 35 | ```cmd 36 | > npm start 37 | ``` 38 | 39 | ## Note: 40 | * You can request a case in my [`WhatsApp`](http://wa.me/62895418200111). 41 | 42 | # Thanks To 43 | * [`Telegraf`](https://github.com/telegraf/telegraf) 44 | * [`Pais`](https://github.com/Paiiss) 45 | * `Ben` -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "apikey": "", 3 | "bot_token": "", 4 | "owner": "LoL Human", 5 | "ownerLink": "https://t.me/LoLHumen", 6 | "version": "1.1.0", 7 | "prefix": "/" 8 | } -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const { fetchJson, range, parseMarkdown } = require('./lib/function') 2 | const { Telegraf, Context } = require('telegraf') 3 | const help = require('./lib/help') 4 | const tele = require('./lib/tele') 5 | const chalk = require('chalk') 6 | const os = require('os') 7 | const fs = require('fs') 8 | 9 | const { apikey, bot_token, owner, ownerLink, version, prefix } = JSON.parse(fs.readFileSync(`./config.json`)) 10 | 11 | let entertainment = {} 12 | 13 | if (bot_token == '') { 14 | return console.log('=== BOT TOKEN CANNOT BE EMPTY ===') 15 | } 16 | 17 | const bot = new Telegraf(bot_token) 18 | 19 | bot.on('new_chat_members', async (lol) => { 20 | var message = lol.message 21 | var pp_group = await tele.getPhotoProfile(message.chat.id) 22 | var groupname = message.chat.title 23 | var groupmembers = await bot.telegram.getChatMembersCount(message.chat.id) 24 | for (x of message.new_chat_members) { 25 | var pp_user = await tele.getPhotoProfile(x.id) 26 | var full_name = tele.getUser(x).full_name 27 | console.log(chalk.whiteBright('├'), chalk.cyanBright('[ JOINS ]'), chalk.whiteBright(full_name), chalk.greenBright('join in'), chalk.whiteBright(groupname)) 28 | await lol.replyWithPhoto({ 29 | url: `https://api.lolhuman.xyz/api/base/welcome?apikey=${apikey}&img1=${pp_user}&img2=${pp_group}&background=https://i.ibb.co/8B6Q84n/LTqHsfYS.jpg&username=${full_name}&member=${groupmembers}&groupname=${groupname}`, 30 | }) 31 | } 32 | }) 33 | 34 | bot.on('left_chat_member', async (lol) => { 35 | var message = lol.message 36 | var pp_group = await tele.getPhotoProfile(message.chat.id) 37 | var pp_user = await tele.getPhotoProfile(message.left_chat_member.id) 38 | var pp_group = await tele.getPhotoProfile(message.chat.id) 39 | var groupname = message.chat.title 40 | var groupmembers = await bot.telegram.getChatMembersCount(message.chat.id) 41 | var pp_user = await tele.getPhotoProfile(message.left_chat_member.id) 42 | var full_name = tele.getUser(message.left_chat_member).full_name 43 | console.log(chalk.whiteBright('├'), chalk.cyanBright('[ LEAVE ]'), chalk.whiteBright(full_name), chalk.greenBright('leave from'), chalk.whiteBright(groupname)) 44 | await lol.replyWithPhoto({ url: `https://api.lolhuman.xyz/api/base/leave?apikey=${apikey}&img1=${pp_user}&img2=${pp_group}&background=https://i.ibb.co/8B6Q84n/LTqHsfYS.jpg&username=${full_name}&member=${groupmembers}&groupname=${groupname}` }) 45 | }) 46 | 47 | bot.command('start', async (lol) => { 48 | user = tele.getUser(lol.message.from) 49 | await help.start(lol, user.full_name) 50 | await lol.deleteMessage() 51 | }) 52 | 53 | bot.command('help', async (lol) => { 54 | user = tele.getUser(lol.message.from) 55 | await help.help(lol, user.full_name, lol.message.from.id.toString()) 56 | }) 57 | 58 | bot.on('callback_query', async (lol) => { 59 | cb_data = lol.callbackQuery.data.split('-') 60 | user_id = Number(cb_data[1]) 61 | if (lol.callbackQuery.from.id != user_id) return lol.answerCbQuery('Sorry, You do not have the right to access this button.', { show_alert: true }) 62 | callback_data = cb_data[0] 63 | user = tele.getUser(lol.callbackQuery.from) 64 | const isGroup = lol.chat.type.includes('group') 65 | const groupName = isGroup ? lol.chat.title : '' 66 | if (!isGroup) console.log(chalk.whiteBright('├'), chalk.cyanBright('[ ACTIONS ]'), chalk.whiteBright(callback_data), chalk.greenBright('from'), chalk.whiteBright(user.full_name)) 67 | if (isGroup) console.log(chalk.whiteBright('├'), chalk.cyanBright('[ ACTIONS ]'), chalk.whiteBright(callback_data), chalk.greenBright('from'), chalk.whiteBright(user.full_name), chalk.greenBright('in'), chalk.whiteBright(groupName)) 68 | if (callback_data == 'help') return await help[callback_data](lol, user.full_name, user_id) 69 | await help[callback_data](lol, user_id.toString()) 70 | }) 71 | 72 | bot.on('message', async (lol) => { 73 | try { 74 | const body = lol.message.text || lol.message.caption || '' 75 | comm = body.trim().split(' ').shift().toLowerCase() 76 | cmd = false 77 | if (prefix != '' && body.startsWith(prefix)) { 78 | cmd = true 79 | comm = body.slice(1).trim().split(' ').shift().toLowerCase() 80 | } 81 | const command = comm 82 | const args = await tele.getArgs(lol) 83 | const user = tele.getUser(lol.message.from) 84 | 85 | const reply = async (text) => { 86 | for (var x of range(0, text.length, 4096)) { 87 | return await lol.replyWithMarkdown(text.substr(x, 4096), { disable_web_page_preview: true }) 88 | } 89 | } 90 | 91 | if (entertainment[lol.update.message.from.id] && entertainment[lol.update.message.from.id] === lol.update.message.text.toLowerCase()) { 92 | delete entertainment[lol.update.message.from.id] 93 | return reply('Jawaban Anda benar.') 94 | } 95 | 96 | const isCmd = cmd 97 | const isGroup = lol.chat.type.includes('group') 98 | const groupName = isGroup ? lol.chat.title : '' 99 | 100 | const isImage = lol.message.hasOwnProperty('photo') 101 | const isVideo = lol.message.hasOwnProperty('video') 102 | const isAudio = lol.message.hasOwnProperty('audio') 103 | const isSticker = lol.message.hasOwnProperty('sticker') 104 | const isContact = lol.message.hasOwnProperty('contact') 105 | const isLocation = lol.message.hasOwnProperty('location') 106 | const isDocument = lol.message.hasOwnProperty('document') 107 | const isAnimation = lol.message.hasOwnProperty('animation') 108 | const isMedia = isImage || isVideo || isAudio || isSticker || isContact || isLocation || isDocument || isAnimation 109 | 110 | const quotedMessage = lol.message.reply_to_message || {} 111 | const isQuotedImage = quotedMessage.hasOwnProperty('photo') 112 | const isQuotedVideo = quotedMessage.hasOwnProperty('video') 113 | const isQuotedAudio = quotedMessage.hasOwnProperty('audio') 114 | const isQuotedSticker = quotedMessage.hasOwnProperty('sticker') 115 | const isQuotedContact = quotedMessage.hasOwnProperty('contact') 116 | const isQuotedLocation = quotedMessage.hasOwnProperty('location') 117 | const isQuotedDocument = quotedMessage.hasOwnProperty('document') 118 | const isQuotedAnimation = quotedMessage.hasOwnProperty('animation') 119 | const isQuoted = lol.message.hasOwnProperty('reply_to_message') 120 | 121 | var typeMessage = body.substr(0, 50).replace(/\n/g, '') 122 | if (isImage) typeMessage = 'Image' 123 | else if (isVideo) typeMessage = 'Video' 124 | else if (isAudio) typeMessage = 'Audio' 125 | else if (isSticker) typeMessage = 'Sticker' 126 | else if (isContact) typeMessage = 'Contact' 127 | else if (isLocation) typeMessage = 'Location' 128 | else if (isDocument) typeMessage = 'Document' 129 | else if (isAnimation) typeMessage = 'Animation' 130 | 131 | if (!isGroup && !isCmd) console.log(chalk.whiteBright('├'), chalk.cyanBright('[ PRIVATE ]'), chalk.whiteBright(typeMessage), chalk.greenBright('from'), chalk.whiteBright(user.full_name)) 132 | if (isGroup && !isCmd) console.log(chalk.whiteBright('├'), chalk.cyanBright('[ GROUP ]'), chalk.whiteBright(typeMessage), chalk.greenBright('from'), chalk.whiteBright(user.full_name), chalk.greenBright('in'), chalk.whiteBright(groupName)) 133 | if (!isGroup && isCmd) console.log(chalk.whiteBright('├'), chalk.cyanBright('[ COMMAND ]'), chalk.whiteBright(typeMessage), chalk.greenBright('from'), chalk.whiteBright(user.full_name)) 134 | if (isGroup && isCmd) console.log(chalk.whiteBright('├'), chalk.cyanBright('[ COMMAND ]'), chalk.whiteBright(typeMessage), chalk.greenBright('from'), chalk.whiteBright(user.full_name), chalk.greenBright('in'), chalk.whiteBright(groupName)) 135 | 136 | var file_id = '' 137 | if (isQuoted) { 138 | file_id = isQuotedImage 139 | ? lol.message.reply_to_message.photo[lol.message.reply_to_message.photo.length - 1].file_id 140 | : isQuotedVideo 141 | ? lol.message.reply_to_message.video.file_id 142 | : isQuotedAudio 143 | ? lol.message.reply_to_message.audio.file_id 144 | : isQuotedDocument 145 | ? lol.message.reply_to_message.document.file_id 146 | : isQuotedAnimation 147 | ? lol.message.reply_to_message.animation.file_id 148 | : '' 149 | } 150 | var mediaLink = file_id != '' ? await tele.getLink(file_id) : '' 151 | 152 | switch (command) { 153 | case 'help': 154 | await help.help(lol, user.full_name, lol.message.from.id.toString()) 155 | break 156 | 157 | // Islami // 158 | case 'listsurah': 159 | result = await fetchJson(`https://api.lolhuman.xyz/api/quran?apikey=${apikey}`) 160 | result = result.result 161 | text = 'List Surah:\n' 162 | for (var x in result) { 163 | text += `${x}. ${result[x]}\n` 164 | } 165 | await reply(text) 166 | break 167 | case 'alquran': 168 | if (args.length < 1) return await reply(`Example: ${prefix + command} 18 or ${prefix + command} 18/10 or ${prefix + command} 18/1-10`) 169 | urls = `https://api.lolhuman.xyz/api/quran/${args[0]}?apikey=${apikey}` 170 | quran = await fetchJson(urls) 171 | result = quran.result 172 | ayat = result.ayat 173 | text = `QS. ${result.surah} : 1-${ayat.length}\n\n` 174 | for (var x of ayat) { 175 | arab = x.arab 176 | nomor = x.ayat 177 | latin = x.latin 178 | indo = x.indonesia 179 | text += `${arab}\n${nomor}. ${latin}\n${indo}\n\n` 180 | } 181 | await reply(text) 182 | break 183 | case 'alquranaudio': 184 | if (args.length == 0) return await reply(`Example: ${prefix + command} 18 or ${prefix + command} 18/10`) 185 | surah = args[0] 186 | await lol.replyWithAudio({ url: `https://api.lolhuman.xyz/api/quran/audio/${surah}?apikey=${apikey}` }) 187 | break 188 | case 'asmaulhusna': 189 | result = await fetchJson(`https://api.lolhuman.xyz/api/asmaulhusna?apikey=${apikey}`) 190 | result = result.result 191 | text = `\`No :\` *${result.index}*\n` 192 | text += `\`Latin :\` *${result.latin}*\n` 193 | text += `\`Arab :\` *${result.ar}*\n` 194 | text += `\`Indonesia :\` *${result.id}*\n` 195 | text += `\`English :\` *${result.en}*` 196 | await reply(text) 197 | break 198 | case 'kisahnabi': 199 | if (args.length == 0) return await reply(`Example: ${prefix + command} Muhammad`) 200 | query = args.join(' ') 201 | result = await fetchJson(`https://api.lolhuman.xyz/api/kisahnabi/${query}?apikey=${apikey}`) 202 | result = result.result 203 | text = `\`Name :\` ${result.name}\n` 204 | text += `\`Lahir :\` ${result.thn_kelahiran}\n` 205 | text += `\`Umur :\` ${result.age}\n` 206 | text += `\`Tempat :\` ${result.place}\n` 207 | text += `\`Story :\`\n${result.story}` 208 | await reply(text) 209 | break 210 | case 'jadwalsholat': 211 | if (args.length == 0) return await reply(`Example: ${prefix + command} Yogyakarta`) 212 | daerah = args.join(' ') 213 | result = await fetchJson(`https://api.lolhuman.xyz/api/sholat/${daerah}?apikey=${apikey}`) 214 | result = result.result 215 | text = `\`Wilayah :\` *${result.wilayah}*\n` 216 | text += `\`Tanggal :\` *${result.tanggal}*\n` 217 | text += `\`Sahur :\` *${result.sahur}*\n` 218 | text += `\`Imsak :\` *${result.imsak}*\n` 219 | text += `\`Subuh :\` *${result.subuh}*\n` 220 | text += `\`Terbit :\` *${result.terbit}*\n` 221 | text += `\`Dhuha :\` *${result.dhuha}*\n` 222 | text += `\`Dzuhur :\` *${result.dzuhur}*\n` 223 | text += `\`Ashar :\` *${result.ashar}*\n` 224 | text += `\`Maghrib :\` *${result.maghrib}*\n` 225 | text += `\`Isya :\` *${result.isya}*` 226 | await reply(text) 227 | break 228 | 229 | // Downloader // 230 | case 'ytplay': 231 | if (args.length == 0) return await reply(`Example: ${prefix + command} melukis senja`) 232 | await fetchJson(`https://api.lolhuman.xyz/api/ytsearch?apikey=${apikey}&query=${args.join(' ')}`).then(async (result) => { 233 | await fetchJson(`https://api.lolhuman.xyz/api/ytaudio2?apikey=${apikey}&url=https://www.youtube.com/watch?v=${result.result[0].videoId}`).then(async (result) => { 234 | await lol.replyWithAudio({ url: result.result.link, filename: result.result.title }, { thumb: result.result.thumbnail }) 235 | }) 236 | }) 237 | break 238 | case 'ytsearch': 239 | if (args.length == 0) return await reply(`Example: ${prefix + command} Melukis Senja`) 240 | try { 241 | query = args.join(' ') 242 | result = await fetchJson(`https://api.lolhuman.xyz/api/ytsearch?apikey=${apikey}&query=${query}`) 243 | hasil = result.result.slice(0, 3) 244 | hasil.forEach(async (res) => { 245 | caption = `\`❖ Title :\` *${res.title}*\n` 246 | caption += `\`❖ Link :\`* https://www.youtube.com/watch?v=${res.videoId} *\n` 247 | caption += `\`❖ Published :\` *${res.published}*\n` 248 | caption += `\`❖ Views :\` *${res.views}*\n` 249 | await lol.replyWithPhoto({ url: res.thumbnail }, { caption: caption, parse_mode: 'Markdown' }) 250 | }) 251 | } catch (e) { 252 | await help.messageError(lol) 253 | } 254 | break 255 | case 'ytmp3': 256 | if (args.length == 0) return await reply(`Example: ${prefix + command} https://www.youtube.com/watch?v=qZIQAk-BUEc`) 257 | result = await fetchJson(`https://api.lolhuman.xyz/api/ytaudio2?apikey=${apikey}&url=${args[0]}`) 258 | result = result.result 259 | caption = `\`❖ Title :\` *${result.title}*\n` 260 | caption += `\`❖ Size :\` *${result.size}*` 261 | await lol.replyWithPhoto({ url: result.thumbnail }, { caption: caption, parse_mode: 'Markdown' }) 262 | if (Number(result.size.split(` MB`)[0]) >= 50.0) return await reply(`Sorry the bot cannot send more than 50 MB!`) 263 | await lol.replyWithAudio({ url: result.link, filename: result.title }) 264 | break 265 | case 'ytmp4': 266 | if (args.length == 0) return await reply(`Example: ${prefix + command} https://www.youtube.com/watch?v=qZIQAk-BUEc`) 267 | result = await fetchJson(`https://api.lolhuman.xyz/api/ytaudio2?apikey=${apikey}&url=${args[0]}`) 268 | result = result.result 269 | caption = `\`❖ Title :\` *${result.title}*\n` 270 | caption += `\`❖ Size :\` *${result.size}*` 271 | await lol.replyWithPhoto({ url: result.thumbnail }, { caption: caption, parse_mode: 'Markdown' }) 272 | if (Number(result.size.split(` MB`)[0]) >= 50.0) return await reply(`Sorry the bot cannot send more than 50 MB!`) 273 | await lol.replyWithVideo({ url: result.link }) 274 | break 275 | case 'tiktoknowm': 276 | if (args.length == 0) return await reply(`Example: ${prefix + command} https://vt.tiktok.com/ZSwWCk5o/`) 277 | url = `https://api.lolhuman.xyz/api/tiktok2?apikey=${apikey}&url=${args[0]}` 278 | result = await fetchJson(url) 279 | await lol.replyWithVideo({ url: result.result }) 280 | break 281 | case 'tiktokmusic': 282 | if (args.length == 0) return await reply(`Example: ${prefix + command} https://vt.tiktok.com/ZSwWCk5o/`) 283 | await lol.replyWithAudio({ url: `https://api.lolhuman.xyz/api/tiktokmusic?apikey=${apikey}&url=${args[0]}` }) 284 | break 285 | case 'instagram': 286 | case 'ig': 287 | if (args.length == 0) return reply(`Example: ${prefix + command} https://www.instagram.com/p/CU0MhPjBZO2/`) 288 | return fetchJson(`https://api.lolhuman.xyz/api/instagram?apikey=${apikey}&url=${args[0]}`).then(async (data) => { 289 | for (let link of data.result) { 290 | if (link.includes('.mp4')) { 291 | await lol.replyWithVideo({ url: link }) 292 | } else { 293 | await lol.replyWithPhoto({ url: link }) 294 | } 295 | } 296 | }) 297 | case 'twitterimage': 298 | if (args.length == 0) return await reply(`Example: ${prefix + command} https://twitter.com/memefess/status/1385161473232543747`) 299 | url = `https://api.lolhuman.xyz/api/twitterimage?apikey=${apikey}&url=${args[0]}` 300 | result = await fetchJson(url) 301 | await lol.replyWithPhoto({ url: result.result.link }, { caption: result.result.title }) 302 | break 303 | case 'twittervideo': 304 | if (args.length == 0) return await reply(`Example: ${prefix + command} https://twitter.com/gofoodindonesia/status/1229369819511709697`) 305 | url = `https://api.lolhuman.xyz/api/twitter2?apikey=${apikey}&url=${args[0]}` 306 | result = await fetchJson(url) 307 | await lol.replyWithVideo({ url: result.result.link[0].url }) 308 | break 309 | case 'spotify': 310 | if (args.length == 0) return await reply(`Example: ${prefix + command} https://open.spotify.com/track/0ZEYRVISCaqz5yamWZWzaA`) 311 | result = await fetchJson(`https://api.lolhuman.xyz/api/spotify?apikey=${apikey}&url=${args[0]}`) 312 | result = result.result 313 | caption = `\`❖ Title :\` *${result.title}*\n` 314 | caption += `\`❖ Artists :\` *${result.artists}*\n` 315 | caption += `\`❖ Duration :\` *${result.duration}*\n` 316 | caption += `\`❖ Popularity :\` *${result.popularity}*` 317 | await lol.replyWithPhoto({ url: result.thumbnail }, { caption: caption, parse_mode: 'Markdown' }) 318 | await lol.replyWithAudio({ url: result.link }, { title: result.title, thumb: result.thumbnail }) 319 | break 320 | case 'spotifysearch': 321 | if (args.length == 0) return await reply(`Example: ${prefix + command} Melukis Senja`) 322 | try { 323 | query = args.join(' ') 324 | result = await fetchJson(`https://api.lolhuman.xyz/api/spotifysearch?apikey=${apikey}&query=${query}`) 325 | hasil = result.result.slice(0, 3) 326 | hasil.forEach(async (res) => { 327 | caption = `\`❖ Title :\` *${res.title}*\n` 328 | caption += `\`❖ Artists :\` *${res.artists}*\n` 329 | caption += `\`❖ Link :\`* ${res.link} *\n` 330 | caption += `\`❖ Duration :\` *${res.duration}*\n` 331 | await reply(caption) 332 | }) 333 | } catch (e) { 334 | help.messageError(lol) 335 | } 336 | break 337 | case 'jooxplay': 338 | if (args.length == 0) return await reply(`Example: ${prefix + command} Melukis Senja`) 339 | query = args.join(' ') 340 | result = await fetchJson(`https://api.lolhuman.xyz/api/jooxplay?apikey=${apikey}&query=${query}`) 341 | result = result.result 342 | caption = `\`❖ Title :\` *${result.info.song}*\n` 343 | caption += `\`❖ Artists :\` *${result.info.singer}*\n` 344 | caption += `\`❖ Duration :\` *${result.info.duration}*\n` 345 | caption += `\`❖ Album :\` *${result.info.album}*\n` 346 | caption += `\`❖ Uploaded :\` *${result.info.date}*\n` 347 | caption += `\`❖ Lirik :\`\n` 348 | if ((caption + result.lirik).length >= 1024) { 349 | await lol.replyWithPhoto({ url: result.image }, { caption: caption, parse_mode: 'Markdown' }) 350 | await lol.replyWithMarkdown(result.lirik) 351 | } else { 352 | await lol.replyWithPhoto({ url: result.image }, { caption: caption + result.lirik, parse_mode: 'Markdown' }) 353 | } 354 | await lol.replyWithAudio({ url: result.audio[0].link, filename: result.info.song }, { thumb: result.image }) 355 | break 356 | case 'zippyshare': 357 | if (args.length == 0) return await reply(`Example: ${prefix + command} https://www51.zippyshare.com/v/5W0TOBz1/file.html`) 358 | url = await fetchJson(`https://api.lolhuman.xyz/api/zippyshare?apikey=${apikey}&url=${args[0]}`) 359 | url = url.result 360 | text = `\`❖ File Name :\` *${url.name_file}*\n` 361 | text += `\`❖ Size :\` *${url.size}*\n` 362 | text += `\`❖ Date Upload :\` *${url.date_upload}*\n` 363 | text += `\`❖ Download Url :\` *${url.download_url}*` 364 | await reply(text) 365 | break 366 | case 'pinterest': 367 | if (args.length == 0) return await reply(`Example: ${prefix + command} loli kawaii`) 368 | query = args.join(' ') 369 | url = await fetchJson(`https://api.lolhuman.xyz/api/pinterest?apikey=${apikey}&query=${query}`) 370 | url = url.result 371 | await lol.replyWithPhoto({ url: url }) 372 | break 373 | case 'pinterestdl': 374 | if (args.length == 0) return await reply(`Example: ${prefix + command} https://id.pinterest.com/pin/696580267364426905/`) 375 | url = await fetchJson(`https://api.lolhuman.xyz/api/pinterestdl?apikey=${apikey}&url=${args[0]}`) 376 | url = url.result['736x'] 377 | await lol.replyWithPhoto({ url: url }) 378 | break 379 | case 'pixiv': 380 | if (args.length == 0) return await reply(`Example: ${prefix + command} loli kawaii`) 381 | query = args.join(' ') 382 | await lol.replyWithPhoto({ url: `https://api.lolhuman.xyz/api/pixiv?apikey=${apikey}&query=${query}` }) 383 | break 384 | case 'pixivdl': 385 | if (args.length == 0) return await reply(`Example: ${prefix + command} 63456028`) 386 | pixivid = args[0] 387 | await lol.replyWithPhoto({ url: `https://api.lolhuman.xyz/api/pixivdl/${pixivid}?apikey=${apikey}` }) 388 | break 389 | 390 | // Entertainment 391 | case 'caklontong': 392 | var { result } = await fetchJson(`https://api.lolhuman.xyz/api/tebak/caklontong2?apikey=${apikey}`) 393 | entertainment[lol.update.message.from.id] = result.answer.toLowerCase() 394 | lol.reply(result.question) 395 | break 396 | case 'siapaaku': 397 | var { result } = await fetchJson(`https://api.lolhuman.xyz/api/tebak/siapaaku?apikey=${apikey}`) 398 | entertainment[lol.update.message.from.id] = result.answer.toLowerCase() 399 | lol.reply(result.question) 400 | break 401 | case 'tebakgambar': 402 | var { result } = await fetchJson(`https://api.lolhuman.xyz/api/tebak/gambar2?apikey=${apikey}`) 403 | entertainment[lol.update.message.from.id] = result.answer.toLowerCase() 404 | lol.replyWithPhoto({ url: result.image }) 405 | break 406 | case 'tebakkata': 407 | var { result } = await fetchJson(`https://api.lolhuman.xyz/api/tebak/kata?apikey=${apikey}`) 408 | entertainment[lol.update.message.from.id] = result.jawaban.toLowerCase() 409 | lol.reply(result.pertanyaan) 410 | break 411 | case 'tebakjenaka': 412 | var { result } = await fetchJson(`https://api.lolhuman.xyz/api/tebak/jenaka?apikey=${apikey}`) 413 | entertainment[lol.update.message.from.id] = result.answer.toLowerCase() 414 | lol.reply(result.question) 415 | break 416 | 417 | // Searching 418 | case 'reverse': 419 | if (!isQuotedImage) return await reply(`Please reply a image use this command.`) 420 | google = await fetchJson(`https://api.lolhuman.xyz/api/googlereverse?apikey=${apikey}&img=${mediaLink}`) 421 | yandex = await fetchJson(`https://api.lolhuman.xyz/api/reverseyandex?apikey=${apikey}&img=${mediaLink}`) 422 | options = { 423 | reply_markup: { 424 | inline_keyboard: [ 425 | [ 426 | { text: 'Google', url: google.result }, 427 | { text: 'Yandex', url: yandex.result }, 428 | ], 429 | ], 430 | }, 431 | } 432 | await lol.reply(`Found result`, options) 433 | break 434 | 435 | // AniManga // 436 | case 'character': 437 | if (args.length == 0) return await reply(`Example: ${prefix + command} Miku Nakano`) 438 | query = args.join(' ') 439 | result = await fetchJson(`https://api.lolhuman.xyz/api/character?apikey=${apikey}&query=${query}`) 440 | result = result.result 441 | text = `Id : ${result.id}\n` 442 | text += `Name : ${result.name.full}\n` 443 | text += `Native : ${result.name.native}\n` 444 | text += `Favorites : ${result.favourites}\n` 445 | text += `Media : \n` 446 | ini_media = result.media.nodes 447 | for (var x of ini_media) { 448 | text += `- ${x.title.romaji} (${x.title.native})\n` 449 | } 450 | text += `\nDescription : \n${result.description.replace(/__/g, '_')}` 451 | await lol.replyWithPhoto({ url: result.image.large }, { caption: text }) 452 | break 453 | case 'manga': 454 | if (args.length == 0) return await reply(`Example: ${prefix + command} Gotoubun No Hanayome`) 455 | query = args.join(' ') 456 | result = await fetchJson(`https://api.lolhuman.xyz/api/manga?apikey=${apikey}&query=${query}`) 457 | result = result.result 458 | text = `Id : ${result.id}\n` 459 | text += `Id MAL : ${result.idMal}\n` 460 | text += `Title : ${result.title.romaji}\n` 461 | text += `English : ${result.title.english}\n` 462 | text += `Native : ${result.title.native}\n` 463 | text += `Format : ${result.format}\n` 464 | text += `Chapters : ${result.chapters}\n` 465 | text += `Volume : ${result.volumes}\n` 466 | text += `Status : ${result.status}\n` 467 | text += `Source : ${result.source}\n` 468 | text += `Start Date : ${result.startDate.day} - ${result.startDate.month} - ${result.startDate.year}\n` 469 | text += `End Date : ${result.endDate.day} - ${result.endDate.month} - ${result.endDate.year}\n` 470 | text += `Genre : ${result.genres.join(', ')}\n` 471 | text += `Synonyms : ${result.synonyms.join(', ')}\n` 472 | text += `Score : ${result.averageScore}%\n` 473 | text += `Characters : \n` 474 | ini_character = result.characters.nodes 475 | for (var x of ini_character) { 476 | text += `- ${x.name.full} (${x.name.native})\n` 477 | } 478 | text += `\nDescription : ${result.description}` 479 | await lol.replyWithPhoto({ url: result.coverImage.large }, { caption: text }) 480 | break 481 | case 'anime': 482 | if (args.length == 0) return await reply(`Example: ${prefix + command} Gotoubun No Hanayome`) 483 | query = args.join(' ') 484 | result = await fetchJson(`https://api.lolhuman.xyz/api/anime?apikey=${apikey}&query=${query}`) 485 | result = result.result 486 | text = `Id : ${result.id}\n` 487 | text += `Id MAL : ${result.idMal}\n` 488 | text += `Title : ${result.title.romaji}\n` 489 | text += `English : ${result.title.english}\n` 490 | text += `Native : ${result.title.native}\n` 491 | text += `Format : ${result.format}\n` 492 | text += `Episodes : ${result.episodes}\n` 493 | text += `Duration : ${result.duration} mins.\n` 494 | text += `Status : ${result.status}\n` 495 | text += `Season : ${result.season}\n` 496 | text += `Season Year : ${result.seasonYear}\n` 497 | text += `Source : ${result.source}\n` 498 | text += `Start Date : ${result.startDate.day} - ${result.startDate.month} - ${result.startDate.year}\n` 499 | text += `End Date : ${result.endDate.day} - ${result.endDate.month} - ${result.endDate.year}\n` 500 | text += `Genre : ${result.genres.join(', ')}\n` 501 | text += `Synonyms : ${result.synonyms.join(', ')}\n` 502 | text += `Score : ${result.averageScore}%\n` 503 | text += `Characters : \n` 504 | ini_character = result.characters.nodes 505 | for (var x of ini_character) { 506 | text += `- ${x.name.full} (${x.name.native})\n` 507 | } 508 | text += `\nDescription : ${result.description}` 509 | await lol.replyWithPhoto({ url: result.coverImage.large }, { caption: text }) 510 | break 511 | case 'wait': 512 | if (isQuotedImage || isQuotedAnimation || isQuotedVideo || isQuotedDocument) { 513 | url_file = await tele.getLink(file_id) 514 | result = await fetchJson(`https://api.lolhuman.xyz/api/wait?apikey=${apikey}&img=${url_file}`) 515 | result = result.result 516 | text = `Anilist id : ${result.anilist_id}\n` 517 | text += `MAL id : ${result.mal_id}\n` 518 | text += `Title Romaji : ${result.title_romaji}\n` 519 | text += `Title Native : ${result.title_native}\n` 520 | text += `Title English : ${result.title_english}\n` 521 | text += `At : ${result.at}\n` 522 | text += `Episode : ${result.episode}\n` 523 | text += `Similarity : ${result.similarity}` 524 | await lol.replyWithVideo({ url: result.video }, { caption: text }) 525 | } else { 526 | reply(`Tag gambar yang sudah dikirim`) 527 | } 528 | break 529 | case 'kusonime': 530 | if (args.length == 0) return await reply(`Example: ${prefix + command} https://kusonime.com/nanatsu-no-taizai-bd-batch-subtitle-indonesia/`) 531 | result = await fetchJson(`https://api.lolhuman.xyz/api/kusonime?apikey=${apikey}&url=${args[0]}`) 532 | result = result.result 533 | text = `*Title : ${result.title}\n` 534 | text += `**Japanese : ${result.japanese}\n` 535 | text += `**Genre : ${result.genre}\n` 536 | text += `**Seasons : ${result.seasons}\n` 537 | text += `**Producers : ${result.producers}\n` 538 | text += `**Type : ${result.type}\n` 539 | text += `**Status : ${result.status}\n` 540 | text += `**Total Episode : ${result.total_episode}\n` 541 | text += `**Score : ${result.score}\n` 542 | text += `**Duration : ${result.duration}\n` 543 | text += `**Released On : ${result.released_on}*\n` 544 | link_dl = result.link_dl 545 | for (var x in link_dl) { 546 | text += `\n\n*${x}*\n` 547 | for (var y in link_dl[x]) { 548 | text += `[${y}](${link_dl[x][y]}) | ` 549 | } 550 | } 551 | if (text.length <= 1024) { 552 | return await lol.replyWithPhoto({ url: result.thumbnail }, { caption: text }) 553 | } 554 | await lol.replyWithPhoto({ url: result.thumbnail }) 555 | await reply(text) 556 | break 557 | case 'kusonimesearch': 558 | if (args.length == 0) return await reply(`Example: ${prefix + command} Gotoubun No Hanayome`) 559 | query = args.join(' ') 560 | result = await fetchJson(`https://api.lolhuman.xyz/api/kusonimesearch?apikey=${apikey}&query=${query}`) 561 | result = result.result 562 | text = `*Title : ${result.title}\n` 563 | text += `**Japanese : ${result.japanese}\n` 564 | text += `**Genre : ${result.genre}\n` 565 | text += `**Seasons : ${result.seasons}\n` 566 | text += `**Producers : ${result.producers}\n` 567 | text += `**Type : ${result.type}\n` 568 | text += `**Status : ${result.status}\n` 569 | text += `**Total Episode : ${result.total_episode}\n` 570 | text += `**Score : ${result.score}\n` 571 | text += `**Duration : ${result.duration}\n` 572 | text += `**Released On : ${result.released_on}*\n` 573 | link_dl = result.link_dl 574 | for (var x in link_dl) { 575 | text += `\n\n*${x}*\n` 576 | for (var y in link_dl[x]) { 577 | text += `[${y}](${link_dl[x][y]}) | ` 578 | } 579 | } 580 | if (text.length <= 1024) { 581 | return await lol.replyWithPhoto({ url: result.thumbnail }, { caption: text }) 582 | } 583 | await lol.replyWithPhoto({ url: result.thumbnail }) 584 | await reply(text) 585 | break 586 | case 'otakudesu': 587 | if (args.length == 0) return await reply(`Example: ${prefix + command} https://otakudesu.tv/lengkap/pslcns-sub-indo/`) 588 | result = await fetchJson(`https://api.lolhuman.xyz/api/otakudesu?apikey=${apikey}&url=${args[0]}`) 589 | result = result.result 590 | text = `Title : ${result.title}\n` 591 | text += `Japanese : ${result.japanese}\n` 592 | text += `Judul : ${result.judul}\n` 593 | text += `Type : ${result.type}\n` 594 | text += `Episode : ${result.episodes}\n` 595 | text += `Aired : ${result.aired}\n` 596 | text += `Producers : ${result.producers}\n` 597 | text += `Genre : ${result.genres}\n` 598 | text += `Duration : ${result.duration}\n` 599 | text += `Studios : ${result.status}\n` 600 | text += `Rating : ${result.rating}\n` 601 | text += `Credit : ${result.credit}\n\n` 602 | get_link = result.link_dl 603 | for (var x in get_link) { 604 | text += `*${get_link[x].title}*\n` 605 | for (var y in get_link[x].link_dl) { 606 | ini_info = get_link[x].link_dl[y] 607 | text += `\`Reso : \`${ini_info.reso}\n` 608 | text += `\`Size : \`${ini_info.size}\n` 609 | text += `\`Link : \`` 610 | down_link = ini_info.link_dl 611 | for (var z in down_link) { 612 | text += `[${z}](${down_link[z]}) | ` 613 | } 614 | text += '\n\n' 615 | } 616 | } 617 | await reply(text) 618 | break 619 | case 'otakudesusearch': 620 | if (args.length == 0) return await reply(`Example: ${prefix + command} Gotoubun No Hanayome`) 621 | query = args.join(' ') 622 | result = await fetchJson(`https://api.lolhuman.xyz/api/otakudesusearch?apikey=${apikey}&query=${query}`) 623 | result = result.result 624 | text = `Title : ${result.title}\n` 625 | text += `Japanese : ${result.japanese}\n` 626 | text += `Judul : ${result.judul}\n` 627 | text += `Type : ${result.type}\n` 628 | text += `Episode : ${result.episodes}\n` 629 | text += `Aired : ${result.aired}\n` 630 | text += `Producers : ${result.producers}\n` 631 | text += `Genre : ${result.genres}\n` 632 | text += `Duration : ${result.duration}\n` 633 | text += `Studios : ${result.status}\n` 634 | text += `Rating : ${result.rating}\n` 635 | text += `Credit : ${result.credit}\n` 636 | get_link = result.link_dl 637 | for (var x in get_link) { 638 | text += `\n\n*${get_link[x].title}*\n` 639 | for (var y in get_link[x].link_dl) { 640 | ini_info = get_link[x].link_dl[y] 641 | text += `\n\`\`\`Reso : \`\`\`${ini_info.reso}\n` 642 | text += `\`\`\`Size : \`\`\`${ini_info.size}\n` 643 | text += `\`\`\`Link : \`\`\`\n` 644 | down_link = ini_info.link_dl 645 | for (var z in down_link) { 646 | text += `[${z}](${down_link[z]}) | ` 647 | } 648 | } 649 | } 650 | await reply(text) 651 | break 652 | 653 | // Movie & Story 654 | case 'lk21': 655 | if (args.length == 0) return await reply(`Example: ${prefix + command} Transformer`) 656 | query = args.join(' ') 657 | result = await fetchJson(`https://api.lolhuman.xyz/api/lk21?apikey=${apikey}&query=${query}`) 658 | result = result.result 659 | text = `Title : ${result.title}\n` 660 | text += `Link : ${result.link}\n` 661 | text += `Genre : ${result.genre}\n` 662 | text += `Views : ${result.views}\n` 663 | text += `Duration : ${result.duration}\n` 664 | text += `Tahun : ${result.tahun}\n` 665 | text += `Rating : ${result.rating}\n` 666 | text += `Desc : ${result.desc}\n` 667 | text += `Actors : ${result.actors.join(', ')}\n` 668 | text += `Location : ${result.location}\n` 669 | text += `Date Release : ${result.date_release}\n` 670 | text += `Language : ${result.language}\n` 671 | text += `Link Download : ${result.link_dl}` 672 | await lol.replyWithPhoto({ url: result.thumbnail }, { caption: text }) 673 | break 674 | case 'drakorongoing': 675 | result = await fetchJson(`https://api.lolhuman.xyz/api/drakorongoing?apikey=${apikey}`) 676 | result = result.result 677 | text = 'Ongoing Drakor\n\n' 678 | for (var x of result) { 679 | text += `Title : ${x.title}\n` 680 | text += `Link : ${x.link}\n` 681 | text += `Thumbnail : ${x.thumbnail}\n` 682 | text += `Year : ${x.category}\n` 683 | text += `Total Episode : ${x.total_episode}\n` 684 | text += `Genre : ${x.genre.join(', ')}\n\n` 685 | } 686 | await reply(text) 687 | break 688 | case 'wattpad': 689 | if (args.length == 0) return await reply(`Example: ${prefix + command} https://www.wattpad.com/707367860-kumpulan-quote-tere-liye-tere-liye-quote-quote`) 690 | result = await fetchJson(`https://api.lolhuman.xyz/api/wattpad?apikey=${apikey}&url=${args[0]}`) 691 | result = result.result 692 | text = `Title : ${result.title}\n` 693 | text += `Rating : ${result.rating}\n` 694 | text += `Motify date : ${result.modifyDate}\n` 695 | text += `Create date: ${result.createDate}\n` 696 | text += `Word : ${result.word}\n` 697 | text += `Comment : ${result.comment}\n` 698 | text += `Vote : ${result.vote}\n` 699 | text += `Reader : ${result.reader}\n` 700 | text += `Pages : ${result.pages}\n` 701 | text += `Description : ${result.desc}\n\n` 702 | text += `Story : \n${result.story}` 703 | await lol.replyWithPhoto({ url: result.photo }, { caption: text }) 704 | break 705 | case 'wattpadsearch': 706 | if (args.length == 0) return await reply(`Example: ${prefix + command} Tere Liye`) 707 | query = args.join(' ') 708 | result = await fetchJson(`https://api.lolhuman.xyz/api/wattpadsearch?apikey=${apikey}&query=${query}`) 709 | result = result.result 710 | text = 'Wattpad Seach : \n' 711 | for (var x of result) { 712 | text += `Title : ${x.title}\n` 713 | text += `Url : ${x.url}\n` 714 | text += `Part : ${x.parts}\n` 715 | text += `Motify date : ${x.modifyDate}\n` 716 | text += `Create date: ${x.createDate}\n` 717 | text += `Coment count: ${x.commentCount}\n\n` 718 | } 719 | await reply(text) 720 | break 721 | case 'cerpen': 722 | result = await fetchJson(`https://api.lolhuman.xyz/api/cerpen?apikey=${apikey}`) 723 | result = result.result 724 | text = `Title : ${result.title}\n` 725 | text += `Creator : ${result.creator}\n` 726 | text += `Story :\n${result.cerpen}` 727 | await reply(text) 728 | break 729 | case 'ceritahoror': 730 | result = await fetchJson(`https://api.lolhuman.xyz/api/ceritahoror?apikey=${apikey}`) 731 | result = result.result 732 | text = `Title : ${result.title}\n` 733 | text += `Desc : ${result.desc}\n` 734 | text += `Story :\n${result.story}\n` 735 | await lol.replyWithPhoto({ url: result.thumbnail }, { caption: text }) 736 | break 737 | 738 | // Random Text // 739 | case 'quotes': 740 | quotes = await fetchJson(`https://api.lolhuman.xyz/api/random/quotes?apikey=${apikey}`) 741 | quotes = quotes.result 742 | await reply(`_${quotes.by}_\n\n*― ${quotes.quote}*`) 743 | break 744 | case 'quotesanime': 745 | quotes = await fetchJson(`https://api.lolhuman.xyz/api/random/quotesnime?apikey=${apikey}`) 746 | quotes = quotes.result 747 | await reply(`_${quotes.quote}_\n\n*― ${quotes.character}*\n*― ${quotes.anime} ${quotes.episode}*`) 748 | break 749 | case 'quotesdilan': 750 | quotedilan = await fetchJson(`https://api.lolhuman.xyz/api/quotes/dilan?apikey=${apikey}`) 751 | await reply(quotedilan.result) 752 | break 753 | case 'quotesimage': 754 | await lol.replyWithPhoto({ url: `https://api.lolhuman.xyz/api/random/${command}?apikey=${apikey}` }) 755 | break 756 | case 'faktaunik': 757 | case 'katabijak': 758 | case 'pantun': 759 | case 'bucin': 760 | result = await fetchJson(`https://api.lolhuman.xyz/api/random/${command}?apikey=${apikey}`) 761 | await reply(result.result) 762 | break 763 | case 'randomnama': 764 | result = await fetchJson(`https://api.lolhuman.xyz/api/random/nama?apikey=${apikey}`) 765 | await reply(result.result) 766 | break 767 | 768 | // Random Image // 769 | case 'art': 770 | case 'bts': 771 | case 'exo': 772 | case 'elf': 773 | case 'loli': 774 | case 'neko': 775 | case 'waifu': 776 | case 'shota': 777 | case 'husbu': 778 | case 'sagiri': 779 | case 'shinobu': 780 | case 'megumin': 781 | case 'wallnime': 782 | await lol.replyWithPhoto({ url: `https://api.lolhuman.xyz/api/random/${command}?apikey=${apikey}` }) 783 | break 784 | case 'chiisaihentai': 785 | case 'trap': 786 | case 'blowjob': 787 | case 'yaoi': 788 | case 'ecchi': 789 | case 'hentai': 790 | case 'ahegao': 791 | case 'hololewd': 792 | case 'sideoppai': 793 | case 'animefeets': 794 | case 'animebooty': 795 | case 'animethighss': 796 | case 'hentaiparadise': 797 | case 'animearmpits': 798 | case 'hentaifemdom': 799 | case 'lewdanimegirls': 800 | case 'biganimetiddies': 801 | case 'animebellybutton': 802 | case 'hentai4everyone': 803 | await lol.replyWithPhoto({ url: `https://api.lolhuman.xyz/api/random/nsfw/${command}?apikey=${apikey}` }) 804 | break 805 | case 'bj': 806 | case 'ero': 807 | case 'cum': 808 | case 'feet': 809 | case 'yuri': 810 | case 'trap': 811 | case 'lewd': 812 | case 'feed': 813 | case 'eron': 814 | case 'solo': 815 | case 'gasm': 816 | case 'poke': 817 | case 'anal': 818 | case 'holo': 819 | case 'tits': 820 | case 'kuni': 821 | case 'kiss': 822 | case 'erok': 823 | case 'smug': 824 | case 'baka': 825 | case 'solog': 826 | case 'feetg': 827 | case 'lewdk': 828 | case 'waifu': 829 | case 'pussy': 830 | case 'femdom': 831 | case 'cuddle': 832 | case 'hentai': 833 | case 'eroyuri': 834 | case 'cum_jpg': 835 | case 'blowjob': 836 | case 'erofeet': 837 | case 'holoero': 838 | case 'classic': 839 | case 'erokemo': 840 | case 'fox_girl': 841 | case 'futanari': 842 | case 'lewdkemo': 843 | case 'wallpaper': 844 | case 'pussy_jpg': 845 | case 'kemonomimi': 846 | case 'nsfw_avatar': 847 | await lol.replyWithPhoto({ url: `https://api.lolhuman.xyz/api/random2/${command}?apikey=${apikey}` }) 848 | break 849 | 850 | // Textprome // 851 | case 'blackpink': 852 | case 'neon': 853 | case 'greenneon': 854 | case 'advanceglow': 855 | case 'futureneon': 856 | case 'sandwriting': 857 | case 'sandsummer': 858 | case 'sandengraved': 859 | case 'metaldark': 860 | case 'neonlight': 861 | case 'holographic': 862 | case 'text1917': 863 | case 'minion': 864 | case 'deluxesilver': 865 | case 'newyearcard': 866 | case 'bloodfrosted': 867 | case 'halloween': 868 | case 'jokerlogo': 869 | case 'fireworksparkle': 870 | case 'natureleaves': 871 | case 'bokeh': 872 | case 'toxic': 873 | case 'strawberry': 874 | case 'box3d': 875 | case 'roadwarning': 876 | case 'breakwall': 877 | case 'icecold': 878 | case 'luxury': 879 | case 'cloud': 880 | case 'summersand': 881 | case 'horrorblood': 882 | case 'thunder': 883 | if (args.length == 0) return await reply(`Example: ${prefix + command} LoL Human`) 884 | text = args.join(' ') 885 | await lol.replyWithPhoto({ url: `https://api.lolhuman.xyz/api/textprome/${command}?apikey=${apikey}&text=${text}` }) 886 | break 887 | case 'pornhub': 888 | case 'glitch': 889 | case 'avenger': 890 | case 'space': 891 | case 'ninjalogo': 892 | case 'marvelstudio': 893 | case 'lionlogo': 894 | case 'wolflogo': 895 | case 'steel3d': 896 | case 'wallgravity': 897 | if (args.length == 0) return await reply(`Example: ${prefix + command} LoL Human`) 898 | await lol.replyWithPhoto({ url: `https://api.lolhuman.xyz/api/textprome2/${command}?apikey=${apikey}&text1=${args[0]}&text2=${args[1]}` }) 899 | break 900 | 901 | // Photo Oxy // 902 | case 'shadow': 903 | case 'cup': 904 | case 'cup1': 905 | case 'romance': 906 | case 'smoke': 907 | case 'burnpaper': 908 | case 'lovemessage': 909 | case 'undergrass': 910 | case 'love': 911 | case 'coffe': 912 | case 'woodheart': 913 | case 'woodenboard': 914 | case 'summer3d': 915 | case 'wolfmetal': 916 | case 'nature3d': 917 | case 'underwater': 918 | case 'golderrose': 919 | case 'summernature': 920 | case 'letterleaves': 921 | case 'glowingneon': 922 | case 'fallleaves': 923 | case 'flamming': 924 | case 'harrypotter': 925 | case 'carvedwood': 926 | if (args.length == 0) return await reply(`Example: ${prefix + command} LoL Human`) 927 | await lol.replyWithPhoto({ url: `https://api.lolhuman.xyz/api/photooxy1/${command}?apikey=${apikey}&text=${args.join(' ')}` }) 928 | break 929 | case 'tiktok': 930 | case 'arcade8bit': 931 | case 'battlefield4': 932 | case 'pubg': 933 | if (args.length == 0) return await reply(`Example: ${prefix + command} LoL Human`) 934 | await lol.replyWithPhoto({ url: `https://api.lolhuman.xyz/api/photooxy2/${command}?apikey=${apikey}&text1=${args[0]}&text2=${args[1]}` }) 935 | break 936 | 937 | // Ephoto 360 // 938 | case 'wetglass': 939 | case 'multicolor3d': 940 | case 'watercolor': 941 | case 'luxurygold': 942 | case 'galaxywallpaper': 943 | case 'lighttext': 944 | case 'beautifulflower': 945 | case 'puppycute': 946 | case 'royaltext': 947 | case 'heartshaped': 948 | case 'birthdaycake': 949 | case 'galaxystyle': 950 | case 'hologram3d': 951 | case 'greenneon': 952 | case 'glossychrome': 953 | case 'greenbush': 954 | case 'metallogo': 955 | case 'noeltext': 956 | case 'glittergold': 957 | case 'textcake': 958 | case 'starsnight': 959 | case 'wooden3d': 960 | case 'textbyname': 961 | case 'writegalacy': 962 | case 'galaxybat': 963 | case 'snow3d': 964 | case 'birthdayday': 965 | case 'goldplaybutton': 966 | case 'silverplaybutton': 967 | case 'freefire': 968 | case 'cartoongravity': 969 | case 'anonymhacker': 970 | case 'anonymhacker': 971 | case 'mlwall': 972 | case 'pubgmaskot': 973 | case 'aovwall': 974 | case 'logogaming': 975 | case 'fpslogo': 976 | case 'avatarlolnew': 977 | case 'lolbanner': 978 | case 'avatardota': 979 | if (args.length == 0) return await reply(`Example: ${prefix + command} LoL Human`) 980 | await lol.replyWithPhoto({ url: `https://api.lolhuman.xyz/api/ephoto1/${command}?apikey=${apikey}&text=${args.join(' ')}` }) 981 | break 982 | case 'test': 983 | test = await bot.telegram.getChatMembersCount(lol.message.chat.id) 984 | console.log(test) 985 | break 986 | } 987 | } catch (e) { 988 | console.log(chalk.whiteBright('├'), chalk.cyanBright('[ ERROR ]'), chalk.redBright(e)) 989 | } 990 | }) 991 | 992 | bot.launch({ 993 | dropPendingUpdates: true, 994 | }) 995 | bot.telegram.getMe().then((getme) => { 996 | itsPrefix = prefix != '' ? prefix : 'No Prefix' 997 | console.log(chalk.greenBright(' ====================================================')) 998 | console.log(chalk.greenBright(' │ + Owner : ' + owner || '')) 999 | console.log(chalk.greenBright(' │ + Bot Name : ' + getme.first_name || '')) 1000 | console.log(chalk.greenBright(' │ + Version : ' + version || '')) 1001 | console.log(chalk.greenBright(' │ + Host : ' + os.hostname() || '')) 1002 | console.log(chalk.greenBright(' │ + Platfrom : ' + os.platform() || '')) 1003 | console.log(chalk.greenBright(' │ + Prefix : ' + itsPrefix)) 1004 | console.log(chalk.greenBright(' ====================================================')) 1005 | console.log(chalk.whiteBright('╭─── [ LOG ]')) 1006 | }) 1007 | process.once('SIGINT', () => bot.stop('SIGINT')) 1008 | process.once('SIGTERM', () => bot.stop('SIGTERM')) 1009 | -------------------------------------------------------------------------------- /lib/function.js: -------------------------------------------------------------------------------- 1 | const fetch = require('node-fetch') 2 | 3 | exports.sleep = async(ms) => { 4 | return new Promise(resolve => setTimeout(resolve, ms)); 5 | } 6 | 7 | exports.parseMarkdown = (text) => { 8 | text = text.replace(/(\[[^\][]*]\(http[^()]*\))|[_*[\]()~>#+=|{}.!-]/gi, (x, y) => y ? y : '\\' + x) 9 | return text 10 | } 11 | 12 | exports.fetchJson = fetchJson = (url, options) => new Promise(async(resolve, reject) => { 13 | fetch(url, options) 14 | .then(response => response.json()) 15 | .then(json => { 16 | resolve(json) 17 | }) 18 | .catch((err) => { 19 | reject(err) 20 | }) 21 | }) 22 | 23 | exports.range = function range(start, stop, step) { 24 | if (typeof stop == 'undefined') { 25 | // one param defined 26 | stop = start; 27 | start = 0; 28 | } 29 | if (typeof step == 'undefined') { 30 | step = 1; 31 | } 32 | if ((step > 0 && start >= stop) || (step < 0 && start <= stop)) { 33 | return []; 34 | } 35 | var result = []; 36 | for (var i = start; step > 0 ? i < stop : i > stop; i += step) { 37 | result.push(i); 38 | } 39 | return result; 40 | } -------------------------------------------------------------------------------- /lib/help.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const config = JSON.parse(fs.readFileSync(`./config.json`)) 3 | 4 | exports.start = async(lol, name) => { 5 | text = `Hello ${name}! Im a multifunction bot build with ❤️ by [my master](${config.ownerLink}).` 6 | await lol.replyWithMarkdown(text, { disable_web_page_preview: true }) 7 | } 8 | 9 | exports.help = async(lol, name, user_id) => { 10 | text = `Hello ${name}! Here are the available commands you can use :` 11 | options = { 12 | reply_markup: { 13 | inline_keyboard: [ 14 | [ 15 | { text: 'Islami ☪️', callback_data: 'islami-' + user_id }, 16 | { text: 'Download 📥', callback_data: 'downloader-' + user_id } 17 | ], 18 | [ 19 | { text: 'Text Pro Me 🖊', callback_data: 'textpro-' + user_id }, 20 | { text: 'Photo Oxy 🖊', callback_data: 'phoxy-' + user_id }, 21 | { text: 'Ephoto 360 🖊', callback_data: 'ephoto-' + user_id } 22 | ], 23 | [ 24 | { text: 'Random Image 📷', callback_data: 'randimage-' + user_id }, 25 | { text: 'Random Text 📑', callback_data: 'randtext-' + user_id }, 26 | ], 27 | [ 28 | { text: 'Anime 🧸', callback_data: 'anime-' + user_id }, 29 | { text: 'Movie & Story 🎥', callback_data: 'movie-' + user_id }, 30 | ], 31 | ] 32 | } 33 | } 34 | try { 35 | await lol.editMessageText(text, options) 36 | } catch { 37 | await lol.reply(text, options) 38 | } 39 | } 40 | 41 | exports.islami = async(lol, user_id) => { 42 | prefix = config.prefix 43 | text = `Islami Menu : 44 | 45 | ❏ ${prefix}listsurah 46 | ❏ ${prefix}alquran no_surah 47 | ❏ ${prefix}alquran no_surah/no_ayat 48 | ❏ ${prefix}alquran no_surah/no_ayat1-no_ayat2 49 | ❏ ${prefix}alquranaudio no_surah 50 | ❏ ${prefix}alquranaudio no_surah/no_ayat 51 | ❏ ${prefix}asmaulhusna 52 | ❏ ${prefix}kisahnabi 53 | ❏ ${prefix}jadwalsholat daerah 54 | ` 55 | await lol.editMessageText(text, { 56 | reply_markup: { 57 | inline_keyboard: [ 58 | [ 59 | { text: 'Back', callback_data: 'help-' + user_id } 60 | ] 61 | ] 62 | } 63 | }) 64 | } 65 | 66 | exports.downloader = async(lol, user_id) => { 67 | prefix = config.prefix 68 | text = `Downloader Menu : 69 | 70 | ❏ ${prefix}ytplay query 71 | ❏ ${prefix}ytsearch query 72 | ❏ ${prefix}ytmp3 link 73 | ❏ ${prefix}ytmp4 link 74 | ❏ ${prefix}tiktoknowm link 75 | ❏ ${prefix}tiktokmusic link 76 | ❏ ${prefix}tiktokmusic link 77 | ❏ ${prefix}twitterimage link 78 | ❏ ${prefix}spotify link 79 | ❏ ${prefix}spotifysearch query 80 | ❏ ${prefix}jooxplay query 81 | ❏ ${prefix}zippyshare link 82 | ❏ ${prefix}pinterest query 83 | ❏ ${prefix}pinterestdl link 84 | ❏ ${prefix}pixiv query 85 | ❏ ${prefix}pixivdl pixiv_id 86 | ` 87 | await lol.editMessageText(text, { 88 | reply_markup: { 89 | inline_keyboard: [ 90 | [ 91 | { text: 'Back', callback_data: 'help-' + user_id } 92 | ] 93 | ] 94 | } 95 | }) 96 | } 97 | 98 | exports.movie = async(lol, user_id) => { 99 | prefix = config.prefix 100 | text = `Movie & Story Menu : 101 | 102 | ❏ ${prefix}drakorongoing 103 | ❏ ${prefix}lk21 query 104 | ❏ ${prefix}wattpad url_wattpad 105 | ❏ ${prefix}wattpadsearch query 106 | ❏ ${prefix}cerpen 107 | ❏ ${prefix}ceritahoror 108 | ` 109 | await lol.editMessageText(text, { 110 | reply_markup: { 111 | inline_keyboard: [ 112 | [ 113 | { text: 'Back', callback_data: 'help-' + user_id } 114 | ] 115 | ] 116 | } 117 | }) 118 | } 119 | 120 | 121 | exports.anime = async(lol, user_id) => { 122 | prefix = config.prefix 123 | text = `Anime Menu : 124 | 125 | ❏ ${prefix}wait 126 | ❏ ${prefix}manga query 127 | ❏ ${prefix}anime query 128 | ❏ ${prefix}character query 129 | ❏ ${prefix}kusonime url_kusonime 130 | ❏ ${prefix}kusonimesearch query 131 | ❏ ${prefix}otakudesu url_otakudesu 132 | ❏ ${prefix}otakudesusearch query 133 | ` 134 | await lol.editMessageText(text, { 135 | reply_markup: { 136 | inline_keyboard: [ 137 | [ 138 | { text: 'Back', callback_data: 'help-' + user_id } 139 | ] 140 | ] 141 | } 142 | }) 143 | } 144 | 145 | exports.randtext = async(lol, user_id) => { 146 | prefix = config.prefix 147 | text = `Random Text Menu : 148 | 149 | ❏ ${prefix}quotes 150 | ❏ ${prefix}quotesdilan 151 | ❏ ${prefix}quotesanime 152 | ❏ ${prefix}quotesimage 153 | ❏ ${prefix}faktaunik 154 | ❏ ${prefix}katabijak 155 | ❏ ${prefix}pantun 156 | ❏ ${prefix}bucin 157 | ❏ ${prefix}randomnama 158 | ` 159 | await lol.editMessageText(text, { 160 | reply_markup: { 161 | inline_keyboard: [ 162 | [ 163 | { text: 'Back', callback_data: 'help-' + user_id } 164 | ] 165 | ] 166 | } 167 | }) 168 | } 169 | 170 | exports.randimage = async(lol, user_id) => { 171 | prefix = config.prefix 172 | text = `Radom Image Menu : 173 | 174 | ❏ ${prefix}art 175 | ❏ ${prefix}bts 176 | ❏ ${prefix}exo 177 | ❏ ${prefix}elf 178 | ❏ ${prefix}loli 179 | ❏ ${prefix}neko 180 | ❏ ${prefix}waifu 181 | ❏ ${prefix}shota 182 | ❏ ${prefix}husbu 183 | ❏ ${prefix}sagiri 184 | ❏ ${prefix}shinobu 185 | ❏ ${prefix}megumin 186 | ❏ ${prefix}wallnime 187 | ❏ ${prefix}chiisaihentai 188 | ❏ ${prefix}trap 189 | ❏ ${prefix}blowjob 190 | ❏ ${prefix}yaoi 191 | ❏ ${prefix}ecchi 192 | ❏ ${prefix}hentai 193 | ❏ ${prefix}ahegao 194 | ❏ ${prefix}hololewd 195 | ❏ ${prefix}sideoppai 196 | ❏ ${prefix}animefeets 197 | ❏ ${prefix}animebooty 198 | ❏ ${prefix}animethighss 199 | ❏ ${prefix}hentaiparadise 200 | ❏ ${prefix}animearmpits 201 | ❏ ${prefix}hentaifemdom 202 | ❏ ${prefix}lewdanimegirls 203 | ❏ ${prefix}biganimetiddies 204 | ❏ ${prefix}animebellybutton 205 | ❏ ${prefix}hentai4everyone 206 | ❏ ${prefix}bj 207 | ❏ ${prefix}ero 208 | ❏ ${prefix}cum 209 | ❏ ${prefix}feet 210 | ❏ ${prefix}yuri 211 | ❏ ${prefix}trap 212 | ❏ ${prefix}lewd 213 | ❏ ${prefix}feed 214 | ❏ ${prefix}eron 215 | ❏ ${prefix}solo 216 | ❏ ${prefix}gasm 217 | ❏ ${prefix}poke 218 | ❏ ${prefix}anal 219 | ❏ ${prefix}holo 220 | ❏ ${prefix}tits 221 | ❏ ${prefix}kuni 222 | ❏ ${prefix}kiss 223 | ❏ ${prefix}erok 224 | ❏ ${prefix}smug 225 | ❏ ${prefix}baka 226 | ❏ ${prefix}solog 227 | ❏ ${prefix}feetg 228 | ❏ ${prefix}lewdk 229 | ❏ ${prefix}waifu 230 | ❏ ${prefix}pussy 231 | ❏ ${prefix}femdom 232 | ❏ ${prefix}cuddle 233 | ❏ ${prefix}hentai 234 | ❏ ${prefix}eroyuri 235 | ❏ ${prefix}cum_jpg 236 | ❏ ${prefix}blowjob 237 | ❏ ${prefix}erofeet 238 | ❏ ${prefix}holoero 239 | ❏ ${prefix}classic 240 | ❏ ${prefix}erokemo 241 | ❏ ${prefix}fox_girl 242 | ❏ ${prefix}futanari 243 | ❏ ${prefix}lewdkemo 244 | ❏ ${prefix}wallpaper 245 | ❏ ${prefix}pussy_jpg 246 | ❏ ${prefix}kemonomimi 247 | ❏ ${prefix}nsfw_avatar 248 | ` 249 | await lol.editMessageText(text, { 250 | reply_markup: { 251 | inline_keyboard: [ 252 | [ 253 | { text: 'Back', callback_data: 'help-' + user_id } 254 | ] 255 | ] 256 | } 257 | }) 258 | } 259 | 260 | exports.textpro = async(lol, user_id) => { 261 | prefix = config.prefix 262 | text = `Text Pro Me Menu : 263 | 264 | ❏ ${prefix}blackpink text 265 | ❏ ${prefix}neon text 266 | ❏ ${prefix}greenneon text 267 | ❏ ${prefix}advanceglow text 268 | ❏ ${prefix}futureneon text 269 | ❏ ${prefix}sandwriting text 270 | ❏ ${prefix}sandsummer text 271 | ❏ ${prefix}sandengraved text 272 | ❏ ${prefix}metaldark text 273 | ❏ ${prefix}neonlight text 274 | ❏ ${prefix}holographic text 275 | ❏ ${prefix}text1917 text 276 | ❏ ${prefix}minion text 277 | ❏ ${prefix}deluxesilver text 278 | ❏ ${prefix}newyearcard text 279 | ❏ ${prefix}bloodfrosted text 280 | ❏ ${prefix}halloween text 281 | ❏ ${prefix}jokerlogo text 282 | ❏ ${prefix}fireworksparkle text 283 | ❏ ${prefix}natureleaves text 284 | ❏ ${prefix}bokeh text 285 | ❏ ${prefix}toxic text 286 | ❏ ${prefix}strawberry text 287 | ❏ ${prefix}box3d text 288 | ❏ ${prefix}roadwarning text 289 | ❏ ${prefix}breakwall text 290 | ❏ ${prefix}icecold text 291 | ❏ ${prefix}luxury text 292 | ❏ ${prefix}cloud text 293 | ❏ ${prefix}summersand text 294 | ❏ ${prefix}horrorblood text 295 | ❏ ${prefix}thunder text 296 | ❏ ${prefix}pornhub text1 text2 297 | ❏ ${prefix}glitch text1 text2 298 | ❏ ${prefix}avenger text1 text2 299 | ❏ ${prefix}space text1 text2 300 | ❏ ${prefix}ninjalogo text1 text2 301 | ❏ ${prefix}marvelstudio text1 text2 302 | ❏ ${prefix}lionlogo text1 text2 303 | ❏ ${prefix}wolflogo text1 text2 304 | ❏ ${prefix}steel3d text1 text2 305 | ❏ ${prefix}wallgravity text1 text2 306 | ` 307 | await lol.editMessageText(text, { 308 | reply_markup: { 309 | inline_keyboard: [ 310 | [ 311 | { text: 'Back', callback_data: 'help-' + user_id } 312 | ] 313 | ] 314 | } 315 | }) 316 | } 317 | 318 | 319 | exports.phoxy = async(lol, user_id) => { 320 | prefix = config.prefix 321 | text = `Photo Oxy Menu : 322 | 323 | ❏ ${prefix}shadow text 324 | ❏ ${prefix}cup text 325 | ❏ ${prefix}cup1 text 326 | ❏ ${prefix}romance text 327 | ❏ ${prefix}smoke text 328 | ❏ ${prefix}burnpaper text 329 | ❏ ${prefix}lovemessage text 330 | ❏ ${prefix}undergrass text 331 | ❏ ${prefix}love text 332 | ❏ ${prefix}coffe text 333 | ❏ ${prefix}woodheart text 334 | ❏ ${prefix}woodenboard text 335 | ❏ ${prefix}summer3d text 336 | ❏ ${prefix}wolfmetal text 337 | ❏ ${prefix}nature3d text 338 | ❏ ${prefix}underwater text 339 | ❏ ${prefix}golderrose text 340 | ❏ ${prefix}summernature text 341 | ❏ ${prefix}letterleaves text 342 | ❏ ${prefix}glowingneon text 343 | ❏ ${prefix}fallleaves text 344 | ❏ ${prefix}flamming text 345 | ❏ ${prefix}harrypotter text 346 | ❏ ${prefix}carvedwood text 347 | ❏ ${prefix}tiktok text1 text2 348 | ❏ ${prefix}arcade8bit text1 text2 349 | ❏ ${prefix}battlefield4 text1 text2 350 | ❏ ${prefix}pubg text1 text2 351 | ` 352 | await lol.editMessageText(text, { 353 | reply_markup: { 354 | inline_keyboard: [ 355 | [ 356 | { text: 'Back', callback_data: 'help-' + user_id } 357 | ] 358 | ] 359 | } 360 | }) 361 | } 362 | 363 | 364 | exports.ephoto = async(lol, user_id) => { 365 | prefix = config.prefix 366 | text = `Ephoto 360 Menu : 367 | 368 | ❏ ${prefix}wetglass text 369 | ❏ ${prefix}multicolor3d text 370 | ❏ ${prefix}watercolor text 371 | ❏ ${prefix}luxurygold text 372 | ❏ ${prefix}galaxywallpaper text 373 | ❏ ${prefix}lighttext text 374 | ❏ ${prefix}beautifulflower text 375 | ❏ ${prefix}puppycute text 376 | ❏ ${prefix}royaltext text 377 | ❏ ${prefix}heartshaped text 378 | ❏ ${prefix}birthdaycake text 379 | ❏ ${prefix}galaxystyle text 380 | ❏ ${prefix}hologram3d text 381 | ❏ ${prefix}greenneon text 382 | ❏ ${prefix}glossychrome text 383 | ❏ ${prefix}greenbush text 384 | ❏ ${prefix}metallogo text 385 | ❏ ${prefix}noeltext text 386 | ❏ ${prefix}glittergold text 387 | ❏ ${prefix}textcake text 388 | ❏ ${prefix}starsnight text 389 | ❏ ${prefix}wooden3d text 390 | ❏ ${prefix}textbyname text 391 | ❏ ${prefix}writegalacy text 392 | ❏ ${prefix}galaxybat text 393 | ❏ ${prefix}snow3d text 394 | ❏ ${prefix}birthdayday text 395 | ❏ ${prefix}goldplaybutton text 396 | ❏ ${prefix}silverplaybutton text 397 | ❏ ${prefix}freefire text 398 | ❏ ${prefix}cartoongravity text 399 | ❏ ${prefix}anonymhacker text 400 | ❏ ${prefix}anonymhacker text 401 | ❏ ${prefix}mlwall text 402 | ❏ ${prefix}pubgmaskot text 403 | ❏ ${prefix}aovwall text 404 | ❏ ${prefix}logogaming text 405 | ❏ ${prefix}fpslogo text 406 | ❏ ${prefix}avatarlolnew text 407 | ❏ ${prefix}lolbanner text 408 | ❏ ${prefix}avatardota text 409 | ` 410 | await lol.editMessageText(text, { 411 | reply_markup: { 412 | inline_keyboard: [ 413 | [ 414 | { text: 'Back', callback_data: 'help-' + user_id } 415 | ] 416 | ] 417 | } 418 | }) 419 | } 420 | 421 | exports.messageError = async(lol) => { 422 | await lol.reply(`Error! Please report to the [${config.owner}](${config.ownerLink}) about this`, { parse_mode: "Markdown", disable_web_page_preview: true }) 423 | } -------------------------------------------------------------------------------- /lib/tele.js: -------------------------------------------------------------------------------- 1 | const { Telegraf } = require('telegraf') 2 | const config = require("../config.json") 3 | const bots = new Telegraf(config.bot_token) 4 | 5 | exports.getArgs = async(ctx) => { 6 | try { 7 | args = ctx.message.text 8 | args = args.split(" ") 9 | args.shift() 10 | return args 11 | } catch { return [] } 12 | } 13 | 14 | exports.getUser = (ctx) => { 15 | try { 16 | user = ctx 17 | last_name = user["last_name"] || "" 18 | full_name = user.first_name + " " + last_name 19 | user["full_name"] = full_name.trim() 20 | return user 21 | } catch (e) { throw e } 22 | } 23 | 24 | exports.getBot = async(ctx) => { 25 | try { 26 | bot = ctx.botInfo 27 | last_name = bot["last_name"] || "" 28 | full_name = bot.first_name + " " + last_name 29 | bot["full_name"] = full_name.trim() 30 | return bot 31 | } catch { return {} } 32 | } 33 | 34 | exports.getLink = async(file_id) => { try { return (await bots.telegram.getFileLink(file_id)).href } catch { throw "Error while get url" } } 35 | 36 | exports.getPhotoProfile = async(id) => { 37 | try { 38 | url_default = "https://cdn.pixabay.com/photo/2015/10/05/22/37/blank-profile-picture-973460_960_720.png" 39 | if (String(id).startsWith("-100")) { 40 | var pp = await bots.telegram.getChat(id) 41 | if (!pp.hasOwnProperty("photo")) return url_default 42 | file_id = pp.photo.big_file_id 43 | } else { 44 | var pp = await bots.telegram.getUserProfilePhotos(id) 45 | if (pp.total_count == 0) return url_default 46 | file_id = pp.photos[0][2].file_id 47 | } 48 | return await this.getLink(file_id) 49 | } catch (e) { throw e } 50 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "telegram-bot", 3 | "version": "1.1.0", 4 | "description": "A simple telegram bot build with node js", 5 | "main": "index.js", 6 | "directories": { 7 | "lib": "lib" 8 | }, 9 | "dependencies": { 10 | "chalk": "^4.1.0", 11 | "node-fetch": "^2.6.1", 12 | "telegraf": "^4.3.0" 13 | }, 14 | "devDependencies": {}, 15 | "scripts": { 16 | "start": "node index.js" 17 | }, 18 | "repository": { 19 | "type": "git", 20 | "url": "git+https://github.com/LoL-Human/TelegramBot-NodeJS.git" 21 | }, 22 | "keywords": [ 23 | "telegram", 24 | "bot", 25 | "telegram-bot" 26 | ], 27 | "author": "LoL Human", 28 | "license": "ISC", 29 | "bugs": { 30 | "url": "https://github.com/LoL-Human/TelegramBot-NodeJS/issues" 31 | }, 32 | "homepage": "https://github.com/LoL-Human/TelegramBot-NodeJS#readme" 33 | } 34 | --------------------------------------------------------------------------------