├── .github ├── FUNDING.yml └── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── .gitignore ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── README.md ├── _config.yml ├── app.json ├── bot.js ├── config.js ├── events.js ├── helpers.js ├── heroku.yml ├── language.js ├── language ├── AZ.json ├── EN.json ├── ES.json ├── HI.json ├── ID.json ├── ML.json └── TR.json ├── media └── gif │ ├── giphy.mp4 │ ├── giphy_2.mp4 │ └── info.md ├── package.json ├── plugins ├── XMedia.js ├── _asena.js ├── _plugin.js ├── admin.js ├── afk.js ├── aiscanner.js ├── astroweather.js ├── bitly.js ├── carbon.js ├── compliment.js ├── conventer.js ├── deepai.js ├── del.js ├── dictionary.js ├── evaluators.js ├── evilinsult.js ├── exta.js ├── ffmpeg.js ├── filters.js ├── fsong.js ├── greetings.js ├── happymod.js ├── heroku.js ├── horoscope.js ├── instagram.js ├── ip.js ├── joke.js ├── location.js ├── lydia.js ├── lyrics.js ├── map.js ├── memes.js ├── moddroid.js ├── multiuse.js ├── mv.js ├── neko.js ├── news.js ├── notes.js ├── ocr.js ├── profile.js ├── qrgenerator.js ├── quotes.js ├── removebg.js ├── scam.js ├── scrapers.js ├── screenshot.js ├── simsimih.js ├── spammer.js ├── sql │ ├── filters.js │ ├── greetings.js │ ├── lydia.js │ ├── notes.js │ └── plugin.js ├── stickers.js ├── system_stats.js ├── tagall.js ├── tbblend.js ├── tinyurl.js ├── ttp.js ├── unvoice.js ├── up_down.js ├── updater.js ├── updown.js ├── voicy.js ├── wallpaper.js ├── wame.js ├── weather.js ├── web.js └── whois.js ├── qr.js └── whatsasena ├── Base.js ├── Image.js ├── Message.js ├── ReplyMessage.js ├── StringSession.js ├── Video.js └── index.js /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: phaticusthiccy 4 | patreon: phaticusthiccy 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 13 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | session.asena 106 | *.db 107 | package-lock.json 108 | .DS_Store 109 | config.env 110 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Thiccy 2 | 3 | When contributing to this repository, please first discuss the change you wish to make via issue, 4 | email, or any other method with the owners of this repository before making a change. 5 | 6 | Please note we have a code of conduct, please follow it in all your interactions with the project. 7 | 8 | ## Pull Request Process 9 | 10 | 1. Ensure any install or build dependencies are removed before the end of the layer when doing a 11 | build. 12 | 2. Update the README.md with details of changes to the interface, this includes new environment 13 | variables, exposed ports, useful file locations and container parameters. 14 | 3. Increase the version numbers in any examples files and the README.md to the new version that this 15 | Pull Request would represent. The versioning scheme we use is [ReadMe](https://github.com/phaticusthiccy/WhatsAsenaDuplicated/blob/master/README.md). 16 | 4. You may merge the Pull Request in once you have the sign-off of two other developers, or if you 17 | do not have permission to do that, you may request the second reviewer to merge it for you. 18 | 19 | ## Code of Conduct 20 | 21 | ### Our Pledge 22 | 23 | In the interest of fostering an open and welcoming environment, we as 24 | contributors and maintainers pledge to making participation in our project and 25 | our community a harassment-free experience for everyone, regardless of age, body 26 | size, disability, ethnicity, gender identity and expression, level of experience, 27 | nationality, personal appearance, race, religion, or sexual identity and 28 | orientation. 29 | 30 | ### Our Standards 31 | 32 | Examples of behavior that contributes to creating a positive environment 33 | include: 34 | 35 | * Using welcoming and inclusive language 36 | * Being respectful of differing viewpoints and experiences 37 | * Gracefully accepting constructive criticism 38 | * Focusing on what is best for the community 39 | * Showing empathy towards other community members 40 | 41 | Examples of unacceptable behavior by participants include: 42 | 43 | * The use of sexualized language or imagery and unwelcome sexual attention or 44 | advances 45 | * Trolling, insulting/derogatory comments, and personal or political attacks 46 | * Public or private harassment 47 | * Publishing others' private information, such as a physical or electronic 48 | address, without explicit permission 49 | * Other conduct which could reasonably be considered inappropriate in a 50 | professional setting 51 | 52 | ### Our Responsibilities 53 | 54 | Project maintainers are responsible for clarifying the standards of acceptable 55 | behavior and are expected to take appropriate and fair corrective action in 56 | response to any instances of unacceptable behavior. 57 | 58 | Project maintainers have the right and responsibility to remove, edit, or 59 | reject comments, commits, code, wiki edits, issues, and other contributions 60 | that are not aligned to this Code of Conduct, or to ban temporarily or 61 | permanently any contributor for other behaviors that they deem inappropriate, 62 | threatening, offensive, or harmful. 63 | 64 | ### Scope 65 | 66 | This Code of Conduct applies both within project spaces and in public spaces 67 | when an individual is representing the project or its community. Examples of 68 | representing a project or community include using an official project e-mail 69 | address, posting via an official social media account, or acting as an appointed 70 | representative at an online or offline event. Representation of a project may be 71 | further defined and clarified by project maintainers. 72 | 73 | ### Enforcement 74 | 75 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 76 | reported by contacting the project team at [INSERT EMAIL ADDRESS]. All 77 | complaints will be reviewed and investigated and will result in a response that 78 | is deemed necessary and appropriate to the circumstances. The project team is 79 | obligated to maintain confidentiality with regard to the reporter of an incident. 80 | Further details of specific enforcement policies may be posted separately. 81 | 82 | Project maintainers who do not follow or enforce the Code of Conduct in good 83 | faith may face temporary or permanent repercussions as determined by other 84 | members of the project's leadership. 85 | 86 | 87 | [Home Page](https://github.com/phaticusthiccy/WhatsAsenaDuplicated) 88 | 89 | [Thiccy's Blog](https://phaticusthiccy.jimdofree.com) 90 | 91 | ### Warning ⚠️ 92 | 93 | This project is open source. So you are responsible for the changes you make. 94 | It is your responsibility to use these codes. We are not responsible for any bad things you make. 95 | 96 | ## 97 | 98 | ##### Sharing WhatsAsena on Social Medias 99 | 100 | > Users Allowed 101 | 102 | ```json 103 | { 104 | "user_github": "https://github.com/dogubk", 105 | "user_workmail": "doguhanonder34@gmail.com", 106 | "user_publicmail": "dohuhanz@gmail.com" 107 | }, 108 | "user_permissions" { 109 | "allow": ["share, usage, support"], 110 | "unallow": ["write, commit"] 111 | { 112 | } 113 | ``` 114 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM fusuf/whatsasena:latest 2 | 3 | RUN git clone https://github.com/kappithannemo/WhatsAsenaDuplicated /root/WhatsAsenaDuplicated 4 | WORKDIR /root/WhatsAsenaDuplicated/ 5 | ENV TZ=Europe/Istanbul 6 | RUN npm install supervisor -g 7 | RUN yarn install --no-audit 8 | 9 | 10 | CMD ["node", "bot.js"] 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Thanks for Everything 2 | ### We will always remember you.. 3 | 4 | - [Yusuf Usta](https://github.com/yusufusta) 5 | - [@fusufs](https://t.me/fusufs) 6 | - [@phaticusthiccy](https://github.com/phaticusthiccy) 7 | 8 |

9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |

20 | 21 |

22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |

47 | 48 | ``` 49 | Based On: 50 | Asena; Asena UserBot, 51 | 52 | WhatsAsena - Asena Userbot is Open Source software open to development. 53 | The user is responsible for all consequences that may arise from incorrect or misuse. 54 | Since it is an open source project, anyone can copy the software, add and remove, 55 | and use it in a way that they customize. In addition, plug-in support enables users to 56 | install their own plugins to the original software and use them as they wish. 57 | Usage is entirely the user's responsibility, Asena Userbot is an 58 | infrastructure only. Just as the operating system is not responsible 59 | for the work done with the programs that are installed later, WhatsAsena 60 | is not responsible for the usage purpose and method of the users. 61 | ``` 62 | 63 |
64 | 65 |

A modified Version of 🐺 WhatsAsena Duplicated

66 |
67 |

68 | WhatsAsena project - Makes it easy and fun to use Whatsapp. Also first userbot for Whatsapp 69 |
70 | Reserved | 71 | Reserved | 72 | Telegram Channel | 73 | Telegram Group | 74 | New Support Group | 75 | New Plugin Channel | 76 |
77 |

78 | 79 | ---- 80 | ![Docker Pulls](https://img.shields.io/docker/pulls/fusuf/whatsasena?style=flat-square) ![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/fusuf/whatsasena?style=flat-square) 81 | 82 | ## 📢 Guide 83 | > [Also for support & help please come our Telegram group.](https://t.me/AsenaSupport) (Legacy) 84 | 85 | > [New support & help group.](https://t.me/asenaremaster) (New) 86 | 87 | > [Install Guide/Kurulum Yardımcısı/Qurulum Müavin](https://github.com/phaticusthiccy/WhatsAsenaDuplicated/wiki) 88 | 89 | ## 🔎 What is WhatsAsena? 90 | **WhatsAsena,** is a WhatsApp helper bot written by [Yusuf Usta](https://github.com/Quiec) and edited by [Phaticusthiccy](https://github.com/phaticusthiccy). Does not log into your account It is written on WhatsApp Web API. 91 | 92 | ## Setup 93 | ### Very Simple Method 94 | `There is no support. Maybe I will handle it..` 95 | 96 | ### Simple Method 97 | [![Run on Repl.it](https://repl.it/badge/github/quiec/whatsasena)](https://repl.it/@phaticusthiccy/WhatsAsena-QR) 98 | 99 | Repl.it is less stable. Try Termux instead for qrcode generation. 100 | 101 | 102 | [![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https://github.com/kappithannemo/WhatsAsenaDuplicated) 103 | 104 | ### The Hard Method(Not Supported for this version!!) 105 | ```js 106 | $ git clone https://github.com/phaticusthiccy/WhatsAsenaDuplicated.git 107 | $ cd WhatsAsenaDuplicated 108 | $ npm i 109 | $ nano Config.env 110 | // Config.env oluşturun ve düzenleyin. 111 | // Config.env create and edit. 112 | $ node bot.js 113 | ``` 114 | ### ⚒️ Setup Wiki 115 | [![Setup - Kurulum](https://img.icons8.com/clouds/300/000000/settings.png)](https://github.com/phaticusthiccy/WhatsAsenaDuplicated/wiki) 116 | 117 | ## F.A.Q 118 | Answer a few frequently asked questions; 119 | ### Can you read my messages? 120 | This project is open source so all the codes are clear. Neither less nor more; you can look what you want. **We absolutely do not have access to your accounts.** 121 | 122 | ### What about our security? 123 | If you are concerned about security, you can install it on your own computer. If you think someone else has captured your data, simply click on **Whatsapp> Three Dots> Whatsapp Web> Logout** from all sessions button. 124 | 125 | ### Is it paid? 126 | **Of course not.** It will never happen. But you can donate to us. You can reach me via [Telegram](https://t.me/fusuf) . 127 | 128 | ### What does Asena mean? 129 | [Asena](https://tr.wikipedia.org/wiki/Asena), comes from Turkish mythology. According to Turkish mythology, Asena is a she-wolf that plays an important role. 130 | 131 | ## WhatsAsena Features 132 | 133 | | All Features 📢|Available ☑️|Version 🔎| 134 | | ------------- | ------------ | ---------- | 135 | | Admin Commands|✅|1.0| 136 | | AFK|✅|1.2| 137 | | AI Scanner|✅|1.1| 138 | | Add & Kick User|✅|1.0| 139 | | Ban & Unban User|✅|1.0| 140 | | Carbon.sh Plugin|✅|1.4| 141 | | Depp AI APIs|✅|1.0| 142 | | FFMPEG Support|✅|1.6| 143 | | Filter Support|✅|1.2| 144 | | Greetings Support|✅|1.2| 145 | | Group Link Generator|✅|1.0| 146 | | Heroku Plugin|✅|1.5| 147 | | Jid Scraper|✅|1.0| 148 | | Location Plugin|✅|1.0| 149 | | Lydia|✅|1.2| 150 | | Meme Maker|✅|1.0| 151 | | Mute & Unmute Chat|✅|1.3| 152 | | Nekobin Plugin|✅|1.0| 153 | | OCR Plugin|✅|1.2| 154 | | Plugin Support|✅|1.0| 155 | | Pre-Trained Effects|✅|3.2| 156 | | Promote & Demote User|✅|1.1| 157 | | Remove BG Plugin|✅|1.0| 158 | | Scam Actions|✅|1.3| 159 | | Scrapers|✅|1.5| 160 | | Spammer|✅|1.4| 161 | | Speedtest|🛠️|1.6| 162 | | Sticker Maker|✅|1.0| 163 | | Tagall|✅|1.0| 164 | | Unvoice|✅|1.3| 165 | 166 | 167 | Here Are All Commands With Description 168 | ----| 169 | [GistHub](https://gist.github.com/phaticusthiccy/8dfa827a71647e5f659680d75543a748) | 170 | 171 | ### ⚠️ Warning! 172 | ``` 173 | Due to Userbot; Your WhatsApp account may be banned. 174 | This is an open source project, you are responsible for everything you do. 175 | Absolutely, Asena executives do not accept responsibility. 176 | By establishing the Asena, you are deemed to have accepted these responsibilities. 177 | ``` 178 | 179 | ## Developers 180 | 181 | [![Yusuf Usta](https://github.com/yusufusta.png?size=100)](https://quiec.tech) | [![Phaticusthiccy](https://github.com/phaticusthiccy.png?size=100)](https://github.com/phaticusthiccy) |[![Vai838](https://github.com/Vai838.png?size=100)](https://github.com/Vai838) | [![Alperen Ç](https://github.com/xacnio.png?size=100)](https://github.com/xacnio) | [![Justin Thoms](https://github.com/justinthoms.png?size=100)](https://github.com/justinthoms) | [![CW4RR10R](https://github.com/CW4RR10R.png?size=100)](https://github.com/CW4RR10R) 182 | ----|----|----|----|---- 183 | [Yusuf Usta](https://t.me/fusufs) | [Phaticusthiccy](https://github.com/phaticusthiccy) | [Alperen Ç](https://t.me/xacnio) | [justinthoms](https://t.me/Mr_justinthomas) | [CW4RR10R](https://github.com/CW4RR10R) 184 | Author, Base, Bug Fixes, Modules | Author, Base, Bug Fixes, Modules | Bug Fixes, Modules, Idea | Modules, Idea | Modules 185 | 186 | ## Thanks To 187 | - [@adiwajshing](https://github.com/adiwajshing) for coded [Baileys](https://github.com/adiwajshing/Baileys) 188 | - [@itacirgabral](https://github.com/itacirgabral) for helps 189 | - `Ikarus#7808 (Discord)` for helps 190 | - [@Unique_hunter](https://t.me/Unique_hunter) for helps and ideas 191 | - [@phaticusthiccy](https://github.com/phaticusthiccy) for the bots mainframe 192 | - Translators 193 | 194 | ## License 195 | This project is protected by `GNU General Public Licence v3.0` license. 196 | Assign Credit to developers.Dont edit out the copyright messages! 197 | 198 | ### Disclaimer 199 | `WhatsApp` name, its variations and the logo are registered trademarks of Facebook. We have nothing to do with the registered trademark 200 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-modernist -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "WhatsAsenaDuplicated", 3 | "description": "WhatsAsena project - Makes it easy and fun to use Whatsapp.", 4 | "logo": "https://i.hizliresim.com/6Bbj7i.jpg", 5 | "keywords": ["whatsapp", "userbot", "Asena"], 6 | "repository": "https://github.com/phaticusthiccy/WhatsAsenaDuplicated", 7 | "website": "https://t.me/phaticusthiccy", 8 | "success_url": "https://t.me/AsenaSupport", 9 | "stack": "container", 10 | "env": { 11 | "ASENA_SESSION": { 12 | "description": "Qr.Js ile oluşturduğunuz özel session kodu.", 13 | "required": true 14 | }, 15 | "SUDO": { 16 | "description": "Leave blank if you don't know how to use it! Sudo mode; Your number must be an international number. So you should have your number after the country code. Example: 1205xxxxxxxxx (USA number +1)", 17 | "required": false 18 | }, 19 | "LANGUAGE": { 20 | "description": "Bot language. Azerice => az, English => en, Türkçe => tr, Malayalam => ml, Hindi => HI, Indonesia => IN, Español => ES", 21 | "required": true, 22 | "value": "TR" 23 | }, 24 | "HANDLERS": { 25 | "description": "Komutlar için.", 26 | "required": true, 27 | "value": "^[.!;]" 28 | }, 29 | "SEND_READ": { 30 | "description": "Görüldü atmak istiyorsanız true yazın.", 31 | "required": true, 32 | "value": "true" 33 | }, 34 | "HEROKU": { 35 | "description": "Herokuda çalışıyorsa true yazın.", 36 | "required": true, 37 | "value": "true" 38 | }, 39 | "HEROKU_API_KEY": { 40 | "description": "Herokuda API Keyiniz. Heroku API Key.", 41 | "required": true 42 | }, 43 | "MUTE_MESSAGE": { 44 | "description": "Customizable Mute Message!", 45 | "required": false, 46 | "value": "default" 47 | }, 48 | "UNMUTE_MESSAGE": { 49 | "description": "Customizable Unmute Message!", 50 | "required": false, 51 | "value": "default" 52 | }, 53 | "HEROKU_APP_NAME": { 54 | "description": "Herokuda uygulama adı. Heroku APP Name.", 55 | "required": true 56 | }, 57 | "DEBUG": { 58 | "description": "Geliştiricilere özeldir.", 59 | "required": true, 60 | "value": "false" 61 | }, 62 | "REMOVE_BG_API_KEY": { 63 | "description": "Fotoğrafların arkaplanını kaldırır. https://remove.bg", 64 | "required": false 65 | }, 66 | "ALIVE_MESSAGE": { 67 | "description": "Customizable Alive Message! Use => default, to change back.", 68 | "required": false, 69 | "value": "default" 70 | }, 71 | "AFK_MESSAGE": { 72 | "description": "Customizable AFK Message! Use => default, to change back.", 73 | "required": false, 74 | "value": "default" 75 | }, 76 | "GAN_IMAGE": { 77 | "description": "Gan Style eklentisi için resim bağlantısı yazın.", 78 | "required": true, 79 | "value": "https://i.hizliresim.com/loUtAb.jpg" 80 | }, 81 | "NO_ONLINE": { 82 | "description": "Çevrimiçi görünmek istemiyorsanız true yazın.", 83 | "required": false, 84 | "value": "true" 85 | }, 86 | "TOBZ_API_KEY": { 87 | "description": "Generate your tobz apikey after chatting with +447418349954 in whatsapp.", 88 | "required": false, 89 | "value": "true" 90 | }, 91 | 92 | "PDF_API_KEY": { 93 | "description": "Generate your pdf apikey after registering in https://html2pdf.app/ .", 94 | "required": false, 95 | "value": "true" 96 | }, 97 | 98 | "COFFEEHOUSE_API_KEY": { 99 | "description": "CoffeeHouse API Key. Need for Lydia. https://coffeehouse.intellivoid.net/", 100 | "required": false, 101 | "value": "true" 102 | } 103 | }, 104 | "addons": [{ 105 | "plan": "heroku-postgresql" 106 | }], 107 | "buildpacks": [{ 108 | "url": "heroku-community/apt" 109 | }] 110 | } 111 | -------------------------------------------------------------------------------- /config.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | Licensed under the GPL-3.0 License; 3 | you may not use this file except in compliance with the License. 4 | WhatsAsena - Yusuf Usta 5 | */ 6 | 7 | const { Sequelize } = require('sequelize'); 8 | const fs = require('fs'); 9 | if (fs.existsSync('config.env')) require('dotenv').config({ path: './config.env' }); 10 | 11 | // Özel Fonksiyonlarımız 12 | function convertToBool(text, fault = 'true') { 13 | return text === fault ? true : false; 14 | } 15 | 16 | DATABASE_URL = process.env.DATABASE_URL === undefined ? './whatsasena.db' : process.env.DATABASE_URL; 17 | DEBUG = process.env.DEBUG === undefined ? false : convertToBool(process.env.DEBUG); 18 | 19 | module.exports = { 20 | VERSION: 'v0.17.0 Public Stable', 21 | SESSION: process.env.ASENA_SESSION === undefined ? '' : process.env.ASENA_SESSION, 22 | GANSTYLE: process.env.GAN_IMAGE === undefined ? 'https://i.hizliresim.com/loUtAb.jpg' : process.env.GAN_IMAGE, 23 | LANG: process.env.LANGUAGE === undefined ? 'TR' : process.env.LANGUAGE.toUpperCase(), 24 | ALIVEMSG: process.env.ALIVE_MESSAGE === undefined ? 'default' : process.env.ALIVE_MESSAGE, 25 | MUTEMSG: process.env.MUTE_MESSAGE === undefined ? 'default' : process.env.MUTE_MESSAGE, 26 | UNMUTEMSG: process.env.UNMUTE_MESSAGE === undefined ? 'default' : process.env.UNMUTE_MESSAGE, 27 | AFKMSG: process.env.AFK_MESSAGE === undefined ? 'default' : process.env.AFK_MESSAGE, 28 | HANDLERS: process.env.HANDLERS === undefined ? '^[.!;]' : process.env.HANDLERS, 29 | SEND_READ: process.env.SEND_READ === undefined ? false : convertToBool(process.env.SEND_READ), 30 | BRANCH: 'master', 31 | HEROKU: { 32 | HEROKU: process.env.HEROKU === undefined ? false : convertToBool(process.env.HEROKU), 33 | API_KEY: process.env.HEROKU_API_KEY === undefined ? '' : process.env.HEROKU_API_KEY, 34 | APP_NAME: process.env.HEROKU_APP_NAME === undefined ? '' : process.env.HEROKU_APP_NAME 35 | }, 36 | DATABASE_URL: DATABASE_URL, 37 | DATABASE: DATABASE_URL === './whatsasena.db' ? new Sequelize({ dialect: "sqlite", storage: DATABASE_URL, logging: DEBUG }) : new Sequelize(DATABASE_URL, { dialectOptions: { ssl: { require: true, rejectUnauthorized: false } }, logging: DEBUG }), 38 | RBG_API_KEY: process.env.REMOVE_BG_API_KEY === undefined ? false : process.env.REMOVE_BG_API_KEY, 39 | NO_ONLINE: process.env.NO_ONLINE === undefined ? true : convertToBool(process.env.NO_ONLINE), 40 | SUDO: process.env.SUDO === undefined ? false : process.env.SUDO, 41 | DEBUG: DEBUG, 42 | COFFEEHOUSE_API_KEY: process.env.COFFEEHOUSE_API_KEY === undefined ? false : process.env.COFFEEHOUSE_API_KEY, 43 | WITAI_API: "722KEMAUNTE5CO2KU4B7KPBMZ5YGQFE7", 44 | TOBZ_API_KEY: process.env.TOBZ_API_KEY === undefined ? false : process.env.TOBZ_API_KEY, 45 | PDF_API_KEY: process.env.PDF_API_KEY === undefined ? false : process.env.PDF_API_KEY 46 | }; 47 | -------------------------------------------------------------------------------- /events.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | // Komutları burada tutacağız. 10 | var config = require('./config'); 11 | var Commands = []; 12 | 13 | function addCommand(info, func) { 14 | // Basit bir fonksiyon, komut eklemek için. 15 | var types = ['photo', 'image', 'text', 'message']; 16 | 17 | var infos = { 18 | fromMe: info['fromMe'] === undefined ? true : info['fromMe'], // Or Sudo 19 | onlyGroup: info['onlyGroup'] === undefined ? false : info['onlyGroup'], 20 | onlyPinned: info['onlyPinned'] === undefined ? false : info['onlyPinned'], 21 | onlyPm: info['onlyPm'] === undefined ? false : info['onlyPm'], 22 | deleteCommand: info['deleteCommand'] === undefined ? true : info['deleteCommand'], 23 | desc: info['desc'] === undefined ? '' : info['desc'], 24 | usage: info['usage'] === undefined ? '' : info['usage'], 25 | dontAddCommandList: info['dontAddCommandList'] === undefined ? false : info['dontAddCommandList'], 26 | warn: info['warn'] === undefined ? '' : info['warn'], 27 | function: func 28 | }; 29 | 30 | if (info['on'] === undefined && info['pattern'] === undefined) { 31 | infos.on = 'message'; 32 | infos.fromMe = false; 33 | } else if (info['on'] !== undefined && types.includes(info['on'])) { 34 | infos.on = info['on']; 35 | 36 | if (info['pattern'] !== undefined) { 37 | infos.pattern = new RegExp((info['handler'] === undefined || info['handler'] === true ? config.HANDLERS : '') + info.pattern, (info['flags'] !== undefined ? info['flags'] : '')); 38 | } 39 | } else { 40 | infos.pattern = new RegExp((info['handler'] === undefined || info['handler'] === true ? config.HANDLERS : '') + info.pattern, (info['flags'] !== undefined ? info['flags'] : '')); 41 | } 42 | 43 | Commands.push(infos); 44 | return infos; 45 | } 46 | 47 | module.exports = { 48 | addCommand: addCommand, 49 | commands: Commands 50 | } 51 | -------------------------------------------------------------------------------- /helpers.js: -------------------------------------------------------------------------------- 1 | /* 2 | # Copyright (C) 2020 MuhammedKpln. 3 | # 4 | # WhatsAsena is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU General Public License as published by 6 | # the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # WhatsAsena is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with this program. If not, see . 16 | # 17 | */ 18 | 19 | function successfullMessage(msg) { 20 | return "✅ ```" + msg + "```" 21 | } 22 | function errorMessage(msg) { 23 | return "🛑 ```" + msg + "```" 24 | } 25 | function infoMessage(msg) { 26 | return "⏺️ ```" + msg + "```" 27 | } 28 | 29 | 30 | module.exports = { 31 | successfullMessage, 32 | errorMessage, 33 | infoMessage 34 | } 35 | -------------------------------------------------------------------------------- /heroku.yml: -------------------------------------------------------------------------------- 1 | build: 2 | docker: 3 | worker: Dockerfile 4 | run: 5 | worker: npm start 6 | -------------------------------------------------------------------------------- /language.js: -------------------------------------------------------------------------------- 1 | const Config = require('./config'); 2 | const fs = require('fs'); 3 | const chalk = require('chalk'); 4 | 5 | if (fs.existsSync('./language/' + Config.LANG + '.json')) { 6 | console.log( 7 | chalk.green.bold('Loading ' + Config.LANG + ' language...') 8 | ); 9 | 10 | var json = JSON.parse(fs.readFileSync('./language/' + Config.LANG + '.json')); 11 | } else { 12 | console.log( 13 | chalk.red.bold('You entered an invalid language. English language was chosen.') 14 | ); 15 | 16 | var json = JSON.parse(fs.readFileSync('./language/EN.json')); 17 | } 18 | 19 | function getString(file) { 20 | return json['STRINGS'][file]; 21 | } 22 | 23 | module.exports = { 24 | language: json, 25 | getString: getString 26 | } -------------------------------------------------------------------------------- /media/gif/giphy.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kappithannemo/WhatsAsenaDuplicated/b179e472422c74f33e35ff6f1b1da2e1396b18c6/media/gif/giphy.mp4 -------------------------------------------------------------------------------- /media/gif/giphy_2.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kappithannemo/WhatsAsenaDuplicated/b179e472422c74f33e35ff6f1b1da2e1396b18c6/media/gif/giphy_2.mp4 -------------------------------------------------------------------------------- /media/gif/info.md: -------------------------------------------------------------------------------- 1 | Takes gif data for plugins. 2 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "WhatsAsenaDuplicated", 3 | "version": "1.2.3", 4 | "description": "WhatsAsena project - a Whatsapp userbot helping to improve your Whatsapp experience.", 5 | "main": "./WhatsAsenaDuplicated/bot.js", 6 | "scripts": { 7 | "start": "supervisor -s bot.js" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/phaticusthiccy/WhatsAsenaDuplicated.git" 12 | }, 13 | "keywords": [ 14 | "whatsapp", 15 | "bot", 16 | "ai", 17 | "asena", 18 | "WhatsAsena" 19 | ], 20 | "author": "AsenaDev / Yusuf Usta", 21 | "developer": "AsenaDev / @phaticusthiccy", 22 | "license": "GPL-3.0-or-later", 23 | "bugs": { 24 | "url": "https://github.com/phaticusthiccy/WhatsAsenaDuplicated/issues" 25 | }, 26 | "homepage": "https://github.com/phaticusthiccy/WhatsAsenaDuplicated#readme", 27 | "dependencies": { 28 | "@adiwajshing/baileys": "3.5.0", 29 | "@lh2020/speedtest-net": "^2.1.1", 30 | "browser-id3-writer": "^4.4.0", 31 | "chalk": "^4.1.0", 32 | "coffeehouse": "^2.0.0", 33 | "cwebp": "^2.0.5", 34 | "deepai": "^1.0.17", 35 | "cwebp-bin": "^6.1.1", 36 | "tinyurl": "^1.1.7", 37 | "dotenv": "^8.2.0", 38 | "exchange-rates-api": "^1.0.2", 39 | "fluent-ffmpeg": "^2.1.2", 40 | "form-data": "^3.0.0", 41 | "g-i-s": "^2.1.6", 42 | "google-translate-tts": "^0.3.0", 43 | "got": "^11.8.0", 44 | "heroku-client": "^3.1.0", 45 | "jimp": "^0.16.1", 46 | "js-ffmpeg": "0.0.26", 47 | "jsdom": "^16.4.0", 48 | "langs": "^2.0.0", 49 | "meme-maker": "^2.1.2", 50 | "node-tesseract-ocr": "^2.0.0", 51 | "pg": "^8.5.1", 52 | "sequelize": "^6.5.0", 53 | "simple-git": "^2.22.0", 54 | "sozlukjs": "^1.1.0", 55 | "spotify-web-api-node": "^5.0.0", 56 | "solenolyrics": "^5.0.0", 57 | "sqlite3": "5.0.0", 58 | "translatte": "^3.0.0", 59 | "wikijs": "^6.0.1", 60 | "yt-search": "^2.5.0", 61 | "ytdl-core": "^4.3.0" 62 | } 63 | } 64 | 65 | 66 | -------------------------------------------------------------------------------- /plugins/_asena.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | const Asena = require('../events'); 10 | const Config = require('../config'); 11 | const {MessageType} = require('@adiwajshing/baileys'); 12 | 13 | const Language = require('../language'); 14 | const Lang = Language.getString('_asena'); 15 | 16 | Asena.addCommand({pattern: 'help ?(.*)', fromMe: false, dontAddCommandList: true}, (async (message, match) => { 17 | var CMD_HELP = ''; 18 | if (match[1] === '') { 19 | Asena.commands.map( 20 | async (command) => { 21 | if (command.dontAddCommandList || command.pattern === undefined) return; 22 | try { 23 | var match = command.pattern.toString().match(/(\W*)([A-Za-zğüşiöç1234567890]*)/); 24 | } catch { 25 | var match = [command.pattern]; 26 | } 27 | 28 | var HANDLER = ''; 29 | 30 | if (/\[(\W*)\]/.test(Config.HANDLERS)) { 31 | HANDLER = Config.HANDLERS.match(/\[(\W*)\]/)[1][0]; 32 | } else { 33 | HANDLER = '.'; 34 | } 35 | CMD_HELP += '*🧞‍♂️ ' + Lang.COMMAND + ':* ```' + (match.length >= 3 ? (HANDLER + match[2]) : command.pattern) + (command.desc === '' ? '```\n\n' : '```\n'); 36 | if (command.desc !== '') CMD_HELP += '*📄 ' + Lang.DESC + ':* ```' + command.desc + (command.warn === '' ? '```\n\n' : '```\n'); 37 | if (command.usage !== '') CMD_HELP += '*✏️ ' + Lang.EXAMPLE + ':* ```' + command.usage + '```\n\n'; 38 | if (command.warn !== '') CMD_HELP += '*⚠️ ' + Lang.WARN + ':* ```' + command.warn + '```\n\n'; 39 | 40 | } 41 | ); 42 | 43 | await message.client.sendMessage( 44 | message.jid, CMD_HELP, MessageType.text ,{quoted: message.data} 45 | ); 46 | } else { 47 | var CMD_HELP = ''; 48 | Asena.commands.map( 49 | async (command) => { 50 | if (command.dontAddCommandList || command.pattern === undefined) return; 51 | try { 52 | var cmatch = command.pattern.toString().match(/(\W*)([A-Za-zğüşiöç1234567890]*)/); 53 | } catch { 54 | var cmatch = [command.pattern]; 55 | } 56 | 57 | if (cmatch[2] == match[1]) { 58 | var HANDLER = ''; 59 | 60 | if (/\[(\W*)\]/.test(Config.HANDLERS)) { 61 | HANDLER = Config.HANDLERS.match(/\[(\W*)\]/)[1][0]; 62 | } else { 63 | HANDLER = '.'; 64 | } 65 | CMD_HELP += '*🧞‍♂️ ' + Lang.COMMAND + ':* ```' + (cmatch.length >= 3 ? (HANDLER + cmatch[2]) : command.pattern) + (command.desc === '' ? '```\n\n' : '```\n'); 66 | if (command.desc !== '') CMD_HELP += '*📄 ' + Lang.DESC + ':* ```' + command.desc + (command.warn === '' ? '```\n\n' : '```\n'); 67 | if (command.usage !== '') CMD_HELP += '*✏️ ' + Lang.EXAMPLE + ':* ```' + command.usage + '```\n\n'; 68 | if (command.warn !== '') CMD_HELP += '*⚠️ ' + Lang.WARN + ':* ```' + command.warn + '```\n\n'; 69 | 70 | } 71 | } 72 | ); 73 | if (CMD_HELP === '') CMD_HELP += Lang.NOT_FOUND; 74 | await message.client.sendMessage( 75 | message.jid, CMD_HELP, MessageType.text,{quoted: message.data} 76 | ); 77 | } 78 | })); 79 | 80 | /*slf*/ 81 | Asena.addCommand({pattern: 'phelp ?(.*)', fromMe: false, dontAddCommandList: true}, (async (message, match) => { 82 | var CMD_HELP = ''; 83 | if (match[1] === '') { 84 | Asena.commands.map( 85 | async (command) => { 86 | if (command.dontAddCommandList || command.pattern === undefined) return; 87 | try { 88 | var match = command.pattern.toString().match(/(\W*)([A-Za-zğüşiöç1234567890]*)/); 89 | } catch { 90 | var match = [command.pattern]; 91 | } 92 | 93 | var HANDLER = ''; 94 | 95 | if (/\[(\W*)\]/.test(Config.HANDLERS)) { 96 | HANDLER = Config.HANDLERS.match(/\[(\W*)\]/)[1][0]; 97 | } else { 98 | HANDLER = '.'; 99 | } 100 | CMD_HELP += '*🧞‍♂️ ' + Lang.COMMAND + ':* ```' + (match.length >= 3 ? (HANDLER + match[2]) : command.pattern) + (command.desc === '' ? '```\n\n' : '```\n'); 101 | if (command.desc !== '') CMD_HELP += '*📄 ' + Lang.DESC + ':* ```' + command.desc + (command.warn === '' ? '```\n\n' : '```\n'); 102 | if (command.usage !== '') CMD_HELP += '*✏️ ' + Lang.EXAMPLE + ':* ```' + command.usage + '```\n\n'; 103 | if (command.warn !== '') CMD_HELP += '*⚠️ ' + Lang.WARN + ':* ```' + command.warn + '```\n\n'; 104 | 105 | } 106 | ); 107 | 108 | await message.client.sendMessage( 109 | message.jid, CMD_HELP, MessageType.text,{quoted: message.data} 110 | ); 111 | } else { 112 | var CMD_HELP = ''; 113 | Asena.commands.map( 114 | async (command) => { 115 | if (command.dontAddCommandList || command.pattern === undefined) return; 116 | try { 117 | var cmatch = command.pattern.toString().match(/(\W*)([A-Za-zğüşiöç1234567890]*)/); 118 | } catch { 119 | var cmatch = [command.pattern]; 120 | } 121 | 122 | if (cmatch[2] == match[1]) { 123 | var HANDLER = ''; 124 | 125 | if (/\[(\W*)\]/.test(Config.HANDLERS)) { 126 | HANDLER = Config.HANDLERS.match(/\[(\W*)\]/)[1][0]; 127 | } else { 128 | HANDLER = '.'; 129 | } 130 | CMD_HELP += '*🧞‍♂️ ' + Lang.COMMAND + ':* ```' + (cmatch.length >= 3 ? (HANDLER + cmatch[2]) : command.pattern) + (command.desc === '' ? '```\n\n' : '```\n'); 131 | if (command.desc !== '') CMD_HELP += '*📄 ' + Lang.DESC + ':* ```' + command.desc + (command.warn === '' ? '```\n\n' : '```\n'); 132 | if (command.usage !== '') CMD_HELP += '*✏️ ' + Lang.EXAMPLE + ':* ```' + command.usage + '```\n\n'; 133 | if (command.warn !== '') CMD_HELP += '*⚠️ ' + Lang.WARN + ':* ```' + command.warn + '```\n\n'; 134 | 135 | } 136 | } 137 | ); 138 | if (CMD_HELP === '') CMD_HELP += Lang.NOT_FOUND; 139 | await message.client.sendMessage( 140 | message.jid, CMD_HELP, MessageType.text,{quoted: message.data} 141 | ); 142 | } 143 | })); 144 | 145 | -------------------------------------------------------------------------------- /plugins/_plugin.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | const Asena = require('../events'); 10 | const Heroku = require('heroku-client'); 11 | const Config = require('../config'); 12 | const {MessageType} = require('@adiwajshing/baileys'); 13 | const got = require('got'); 14 | const fs = require('fs'); 15 | const Db = require('./sql/plugin'); 16 | 17 | const Language = require('../language'); 18 | const Lang = Language.getString('_plugin'); 19 | 20 | 21 | const heroku = new Heroku({ 22 | token: Config.HEROKU.API_KEY 23 | }); 24 | 25 | 26 | let baseURI = '/apps/' + Config.HEROKU.APP_NAME; 27 | 28 | Asena.addCommand({pattern: 'install ?(.*)', fromMe: true, desc: Lang.INSTALL_DESC, dontAddCommandList: true}, (async (message, match) => { 29 | if (match[1] === '') return await message.client.sendMessage(message.jid,Lang.NEED_URL + '.install https://gist.github.com/phaticusthiccy/4232b1c8c4734e1f06c3d991149c6fbd') 30 | try { 31 | var url = new URL(match[1]); 32 | } catch { 33 | return await message.client.sendMessage(message.jid,Lang.INVALID_URL); 34 | } 35 | 36 | if (url.host === 'gist.github.com') { 37 | url.host = 'gist.githubusercontent.com'; 38 | url = url.toString() + '/raw' 39 | } else { 40 | url = url.toString() 41 | } 42 | 43 | var response = await got(url); 44 | if (response.statusCode == 200) { 45 | // plugin adı 46 | var plugin_name = response.body.match(/addCommand\({.*pattern: ["'](.*)["'].*}/); 47 | if (plugin_name.length >= 1) { 48 | plugin_name = "__" + plugin_name[1]; 49 | } else { 50 | plugin_name = "__" + Math.random().toString(36).substring(8); 51 | } 52 | 53 | fs.writeFileSync('./plugins/' + plugin_name + '.js', response.body); 54 | try { 55 | require('./' + plugin_name); 56 | } catch (e) { 57 | fs.unlinkSync('./' + plugin_name); 58 | return await message.sendMessage(Lang.INVALID_PLUGIN + ' ```' + e + '```'); 59 | } 60 | 61 | await Db.installPlugin(url, plugin_name); 62 | await message.client.sendMessage(message.jid, Lang.INSTALLED, MessageType.text); 63 | } 64 | })); 65 | 66 | Asena.addCommand({pattern: 'plugin', fromMe: true, desc: Lang.PLUGIN_DESC, dontAddCommandList: true}, (async (message, match) => { 67 | var mesaj = Lang.INSTALLED_FROM_REMOTE; 68 | var plugins = await Db.PluginDB.findAll(); 69 | if (plugins.length < 1) { 70 | return await message.client.sendMessage(message.jid,Lang.NO_PLUGIN); 71 | } else { 72 | plugins.map( 73 | (plugin) => { 74 | mesaj += '*' + plugin.dataValues.name + '*: ' + plugin.dataValues.url + '\n'; 75 | } 76 | ); 77 | return await message.client.sendMessage(message.jid, mesaj, MessageType.text); 78 | } 79 | })); 80 | 81 | Asena.addCommand({pattern: 'remove(?: |$)(.*)', fromMe: true, desc: Lang.REMOVE_DESC, dontAddCommandList: true}, (async (message, match) => { 82 | if (match[1] === '') return await message.sendMessage(Lang.NEED_PLUGIN); 83 | if (!match[1].startsWith('__')) match[1] = '__' + match[1]; 84 | var plugin = await Db.PluginDB.findAll({ where: {name: match[1]} }); 85 | if (plugin.length < 1) { 86 | return await message.client.sendMessage(message.jid, Lang.NOT_FOUND_PLUGIN, MessageType.text); 87 | } else { 88 | await plugin[0].destroy(); 89 | delete require.cache[require.resolve('./' + match[1] + '.js')] 90 | fs.unlinkSync('./plugins/' + match[1] + '.js'); 91 | await message.client.sendMessage(message.jid, Lang.DELETED, MessageType.text); 92 | 93 | await new Promise(r => setTimeout(r, 2000)); 94 | 95 | await message.sendMessage('💬 *Bot Restarting Automatically!*'); 96 | 97 | console.log(baseURI); 98 | await heroku.delete(baseURI + '/dynos').catch(async (error) => { 99 | await message.sendMessage(error.message); 100 | 101 | }); 102 | } 103 | 104 | })); 105 | -------------------------------------------------------------------------------- /plugins/afk.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | Developer & Co-Founder - Phaticusthiccy 8 | */ 9 | 10 | const Asena = require('../events'); 11 | const {MessageType} = require('@adiwajshing/baileys'); 12 | const Config = require('../config'); 13 | 14 | const Language = require('../language'); 15 | const Lang = Language.getString('afk'); 16 | 17 | var AFK = { 18 | isAfk: false, 19 | reason: false, 20 | lastseen: 0 21 | }; 22 | 23 | // https://stackoverflow.com/a/37096512 24 | function secondsToHms(d) { 25 | d = Number(d); 26 | var h = Math.floor(d / 3600); 27 | var m = Math.floor(d % 3600 / 60); 28 | var s = Math.floor(d % 3600 % 60); 29 | 30 | var hDisplay = h > 0 ? h + (h == 1 ? " " + Lang.HOUR + ", " : " " + Lang.HOUR + ", ") : ""; 31 | var mDisplay = m > 0 ? m + (m == 1 ? " " + Lang.MINUTE + ", " : " " + Lang.MINUTE + ", ") : ""; 32 | var sDisplay = s > 0 ? s + (s == 1 ? " " + Lang.SECOND : " " + Lang.SECOND) : ""; 33 | return hDisplay + mDisplay + sDisplay; 34 | } 35 | 36 | Asena.addCommand({on: 'text', fromMe: false, deleteCommand: false}, (async (message, match) => { 37 | if (Config.AFKMSG == 'default') { 38 | 39 | if (AFK.isAfk && ((!message.jid.includes('-')) || (message.jid.includes('-') && 40 | (( message.mention !== false && message.mention.length !== 0 ) || message.reply_message !== false)))) { 41 | if (message.jid.includes('-') && (message.mention !== false && message.mention.length !== 0)) { 42 | message.mention.map(async (jid) => { 43 | if (message.client.user.jid.split('@')[0] === jid.split('@')[0]) { 44 | await message.client.sendMessage(message.jid,Lang.AFK_TEXT + '\n' + 45 | (AFK.reason !== false ? '\n*' + Lang.REASON + ':* ```' + AFK.reason + '```' : '') + 46 | (AFK.lastseen !== 0 ? '\n*' + Lang.LAST_SEEN + ':* ```' + secondsToHms(Math.round((new Date()).getTime() / 1000) - AFK.lastseen) + ' önce```' : ''), MessageType.text, {quoted: message.data}); 47 | } 48 | }) 49 | } else if (message.jid.includes('-') && message.reply_message !== false) { 50 | if (message.reply_message.jid.split('@')[0] === message.client.user.jid.split('@')[0]) { 51 | await message.client.sendMessage(message.jid,Lang.AFK_TEXT + '\n' + 52 | (AFK.reason !== false ? '\n*' + Lang.REASON + ':* ```' + AFK.reason + '```' : '') + 53 | (AFK.lastseen !== 0 ? '\n*' + Lang.LAST_SEEN + ':* ```' + secondsToHms(Math.round((new Date()).getTime() / 1000) - AFK.lastseen) + ' önce```' : ''), MessageType.text, {quoted: message.data}); 54 | } 55 | } else { 56 | await message.client.sendMessage(message.jid,Lang.AFK_TEXT + '\n' + 57 | (AFK.reason !== false ? '\n*' + Lang.REASON + ':* ```' + AFK.reason + '```' : '') + 58 | (AFK.lastseen !== 0 ? '\n*' + Lang.LAST_SEEN + ':* ```' + secondsToHms(Math.round((new Date()).getTime() / 1000) - AFK.lastseen) + ' önce```' : ''), MessageType.text, {quoted: message.data}); 59 | } 60 | } 61 | } 62 | else { 63 | if (AFK.isAfk && ((!message.jid.includes('-')) || (message.jid.includes('-') && 64 | (( message.mention !== false && message.mention.length !== 0 ) || message.reply_message !== false)))) { 65 | if (message.jid.includes('-') && (message.mention !== false && message.mention.length !== 0)) { 66 | message.mention.map(async (jid) => { 67 | if (message.client.user.jid.split('@')[0] === jid.split('@')[0]) { 68 | await message.client.sendMessage(message.jid,Config.AFKMSG + '\n' + 69 | (AFK.reason !== false ? '\n*' + Lang.REASON + ':* ```' + AFK.reason + '```' : '') + 70 | (AFK.lastseen !== 0 ? '\n*' + Lang.LAST_SEEN + ':* ```' + secondsToHms(Math.round((new Date()).getTime() / 1000) - AFK.lastseen) + ' önce```' : ''), MessageType.text, {quoted: message.data}); 71 | } 72 | }) 73 | } else if (message.jid.includes('-') && message.reply_message !== false) { 74 | if (message.reply_message.jid.split('@')[0] === message.client.user.jid.split('@')[0]) { 75 | await message.client.sendMessage(message.jid,Config.AFKMSG + '\n' + 76 | (AFK.reason !== false ? '\n*' + Lang.REASON + ':* ```' + AFK.reason + '```' : '') + 77 | (AFK.lastseen !== 0 ? '\n*' + Lang.LAST_SEEN + ':* ```' + secondsToHms(Math.round((new Date()).getTime() / 1000) - AFK.lastseen) + ' önce```' : ''), MessageType.text, {quoted: message.data}); 78 | } 79 | } else { 80 | await message.client.sendMessage(message.jid,Config.AFKMSG + '\n' + 81 | (AFK.reason !== false ? '\n*' + Lang.REASON + ':* ```' + AFK.reason + '```' : '') + 82 | (AFK.lastseen !== 0 ? '\n*' + Lang.LAST_SEEN + ':* ```' + secondsToHms(Math.round((new Date()).getTime() / 1000) - AFK.lastseen) + ' önce```' : ''), MessageType.text, {quoted: message.data}); 83 | } 84 | } 85 | } 86 | })); 87 | 88 | Asena.addCommand({on: 'text', fromMe: true, deleteCommand: false}, (async (message, match) => { 89 | if (AFK.isAfk && !message.id.startsWith('3EB0')) { 90 | AFK.lastseen = 0; 91 | AFK.reason = false; 92 | AFK.isAfk = false; 93 | 94 | await message.client.sendMessage(message.jid,Lang.IM_NOT_AFK,MessageType.text); 95 | } 96 | })); 97 | 98 | Asena.addCommand({pattern: 'afk ?(.*)', fromMe: true, deleteCommand: false, desc: Lang.AFK_DESC, dontAddCommandList: true}, (async (message, match) => { 99 | if (!AFK.isAfk) { 100 | AFK.lastseen = Math.round((new Date()).getTime() / 1000); 101 | if (match[1] !== '') { AFK.reason = match[1]; } 102 | AFK.isAfk = true; 103 | 104 | await message.client.sendMessage(message.jid,Lang.IM_AFK + (AFK.reason !== false ? ('\n*' + Lang.REASON +':* ```' + AFK.reason + '```') : ''),MessageType.text); 105 | } 106 | })); 107 | 108 | module.exports = { secondsToHms }; 109 | -------------------------------------------------------------------------------- /plugins/astroweather.js: -------------------------------------------------------------------------------- 1 | /* Codded by @Vai838 2 | */ 3 | 4 | const Asena = require('../events'); 5 | const {MessageType, MessageOptions, Mimetype} = require('@adiwajshing/baileys'); 6 | const fs = require('fs'); 7 | const axios = require('axios'); 8 | const request = require('request'); 9 | const got = require("got"); 10 | 11 | const Language = require('../language'); 12 | const Lang = Language.getString('webss'); 13 | 14 | Asena.addCommand({pattern: 'astro ?(.*)', fromMe: false,usage: Lang.USAGEI, desc: Lang.ASTRO_DESC}, (async (message, match) => { 15 | 16 | if (match[1] === '') return await message.client.sendMessage(message.jid,Lang.LAT); 17 | 18 | var topText, bottomText; 19 | if (match[1].includes(';')) { 20 | var split = match[1].split(';'); 21 | topText = split[1]; 22 | bottomText = split[0]; 23 | } 24 | 25 | var webimage = await axios.get(`http://www.7timer.info/bin/astro.php?lon=${topText}&lat=${bottomText}&ac=0&lang=en&unit=metric&output=internal&tzshift=0`, { responseType: 'arraybuffer' }) 26 | 27 | await message.client.sendMessage(message.jid,Buffer.from(webimage.data), MessageType.image, {mimetype: Mimetype.jpg ,quoted: message.data,thumbnail:"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"}) 28 | 29 | })); 30 | 31 | 32 | Asena.addCommand({pattern: 'mmap ?(.*)', fromMe: false, dontAddCommandList: true}, async (message, match) => { 33 | 34 | data = await fetchJson(`https://mnazria.herokuapp.com/api/maps?search=${match[1]}`) 35 | hasil = await getBuffer(data.gambar) 36 | await message.client.sendMessage(message.jid,from, hasil, MessageType.image, {mimetype: Mimetype.jpg}) 37 | 38 | }); 39 | 40 | 41 | -------------------------------------------------------------------------------- /plugins/bitly.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | Licensed under the GPL-3.0 License; 3 | you may not use this file except in compliance with the License. 4 | WhatsAsena - Yusuf Usta 5 | */ 6 | 7 | const Asena = require('../events'); 8 | const {MessageType} = require('@adiwajshing/baileys'); 9 | const got = require('got'); 10 | const Config = require('../config'); 11 | const Language = require('../language'); 12 | const Lang = Language.getString('weather'); 13 | 14 | Asena.addCommand({pattern: 'bitly ?(.*)', fromMe: false, desc: Lang.BIT_DESC}, async (message, match) => { 15 | if (match[1] === '') return await message.reply(Lang.NEED_LINK); 16 | const url = `https://tobz-api.herokuapp.com/api/bitly?url=${match[1]}&apikey=${Config.TOBZ_API_KEY}`; 17 | try { 18 | const response = await got(url); 19 | const json = JSON.parse(response.body); 20 | if (response.statusCode === 200) return await message.client.sendMessage(message.jid, 21 | '\n *🔗 ' + Lang.SLINK +'* ```' + json.result + '```\n\n', MessageType.text); 22 | } catch { 23 | return await message.client.sendMessage(message.jid, Lang.NOT_FOUNDLI, MessageType.text); 24 | } 25 | }); 26 | -------------------------------------------------------------------------------- /plugins/carbon.js: -------------------------------------------------------------------------------- 1 | /* Codded by @phaticusthiccy 2 | Telegram: t.me/phaticusthiccy 3 | Instagram: www.instagram.com/kyrie.baran 4 | */ 5 | 6 | const Asena = require('../events'); 7 | const {MessageType, MessageOptions, Mimetype} = require('@adiwajshing/baileys'); 8 | const axios = require('axios'); 9 | 10 | const Language = require('../language'); 11 | const Lang = Language.getString('carbon'); 12 | 13 | Asena.addCommand({pattern: 'carbon ?(.*)', fromMe: false, desc: Lang.CARBON_DESC, warn: Lang.CARBON_WARN}, (async (message, match) => { 14 | 15 | if (match[1] === '') return await message.client.sendMessage(message.jid,Lang.CARBON_NEEDWORD, MessageType.text); 16 | 17 | var rgbafmin = 0; 18 | var rgbafmax = 255; 19 | var rgbafirst = Math.floor(Math.random() * (+rgbafmax - +rgbafmin) + +rgbafmin) 20 | 21 | var rgbasmin = 0; 22 | var rgbasmax = 255; 23 | var rgbasecond = Math.floor(Math.random() * (+rgbasmax - +rgbasmin) + +rgbasmin) 24 | 25 | var rgbatmin = 0; 26 | var rgbatmax = 255; 27 | var rgbathird = Math.floor(Math.random() * (+rgbatmax - +rgbatmin) + +rgbatmin) 28 | 29 | var Theme = new Array () 30 | Theme[0] = "twilight"; 31 | Theme[1] = "panda"; 32 | Theme[2] = "blackboard"; 33 | Theme[3] = "seti"; 34 | Theme[4] = "verminal"; 35 | Theme[5] = "nord"; 36 | Theme[6] = "monokai"; 37 | Theme[7] = "cobalt"; 38 | Theme[8] = "vscode"; 39 | Theme[9] = "material"; 40 | Theme[10] = "hopscotch"; 41 | Theme[11] = "shades-of-purple"; 42 | Theme[12] = "oceanic-next"; 43 | Theme[13] = "one-light"; 44 | Theme[14] = "one-dark"; 45 | Theme[15] = "synthwave-84"; 46 | Theme[16] = "zenburn"; 47 | Theme[17] = "3024-night"; 48 | Theme[18] = "a11y-dark"; 49 | Theme[19] = "dracula-pro"; 50 | Theme[20] = "night-owl"; 51 | var i = Math.floor(21*Math.random()) 52 | 53 | var Language = new Array () 54 | Language[0] = "Apache"; 55 | Language[1] = "Python"; 56 | Language[2] = "Javascript"; 57 | Language[3] = "Bash"; 58 | Language[4] = "cobol"; 59 | Language[5] = "coffeescript"; 60 | Language[6] = "Crystal"; 61 | Language[7] = "Erlang"; 62 | Language[8] = "GraphQL"; 63 | var l = Math.floor(9*Math.random()) 64 | 65 | var payload = `${match[1].replace('#', '\n')}` 66 | var uri = encodeURI(payload) 67 | 68 | var respoimage = await axios.get('https://thiccyscarbonapi.herokuapp.com/?code=' + uri + '&theme=' + Theme[i] + '&exportSize=3x&paddingVertical=200px&paddingHorizontal=200px&backgroundColor=rgba(' + rgbafirst + ',' + rgbasecond + ',' + rgbathird + ')&language=' + Language[l], { responseType: 'arraybuffer' }) 69 | 70 | await message.client.sendMessage(message.jid,Buffer.from(respoimage.data), MessageType.image, { mimetype: Mimetype.png}) 71 | })); 72 | -------------------------------------------------------------------------------- /plugins/compliment.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2021 Vai838. 2 | Licensed under the GPL-3.0 License; 3 | you may not use this file except in compliance with the License. 4 | WhatsAsenaDuplicated 5 | */ 6 | 7 | const Asena = require('../events'); 8 | const {MessageType} = require('@adiwajshing/baileys'); 9 | const got = require('got'); 10 | 11 | const Language = require('../language'); 12 | const Lang = Language.getString('weather'); 13 | 14 | Asena.addCommand({pattern: 'compliment ?(.*)', fromMe: false, desc: Lang.CM_DESC}, async (message, match) => { 15 | if (match[1] === 'xx') return await message.reply(Lang.NEED_LOCATIONA); 16 | const url = `https://complimentr.com/api`; 17 | try { 18 | const response = await got(url); 19 | const json = JSON.parse(response.body); 20 | if (response.statusCode === 200) return await message.client.sendMessage(message.jid, '*🤗 ' + Lang.CM +'* ```' + json.compliment + '```\n\n' , MessageType.text); 21 | } catch { 22 | return await message.client.sendMessage(message.jid, Lang.NOT_FOUNDAC, MessageType.text); 23 | } 24 | }); 25 | -------------------------------------------------------------------------------- /plugins/conventer.js: -------------------------------------------------------------------------------- 1 | /*Codded by @phaticusthiccy 2 | Telegram: https://t.me/phaticusthiccy 3 | Instagram: https://instagram.com/kyrie.baran 4 | */ 5 | 6 | const Asena = require('../events'); 7 | const {MessageType,Mimetype} = require('@adiwajshing/baileys'); 8 | const fs = require('fs'); 9 | const ffmpeg = require('fluent-ffmpeg'); 10 | const {execFile} = require('child_process'); 11 | const cwebp = require('cwebp-bin'); 12 | 13 | const Language = require('../language'); 14 | const Lang = Language.getString('conventer'); 15 | 16 | Asena.addCommand({pattern: 'mp4audio', fromMe: false, desc: Lang.MP4TOAUDİO_DESC}, (async (message, match) => { 17 | if (message.reply_message === false) return await message.sendMessage(Lang.MP4TOAUDİO_NEEDREPLY); 18 | var downloading = await message.client.sendMessage(message.jid,Lang.MP4TOAUDİO,MessageType.text); 19 | var location = await message.client.downloadAndSaveMediaMessage({ 20 | key: { 21 | remoteJid: message.reply_message.jid, 22 | id: message.reply_message.id 23 | }, 24 | message: message.reply_message.data.quotedMessage 25 | }); 26 | 27 | ffmpeg(location) 28 | .withNoVideo() 29 | .save('output.mp3') 30 | .on('end', async () => { 31 | await message.sendMessage(fs.readFileSync('output.mp3'), MessageType.audio, {mimetype: Mimetype.mp4Audio, ptt: false}); 32 | }); 33 | return await message.client.deleteMessage(message.jid, {id: downloading.key.id, remoteJid: message.jid, fromMe: true}) 34 | })); 35 | 36 | Asena.addCommand({pattern: 'imagesticker', fromMe: false, desc: Lang.STİCKER_DESC}, (async (message, match) => { 37 | if (message.reply_message === false) return await message.sendMessage(Lang.STİCKER_NEEDREPLY); 38 | var downloading = await message.client.sendMessage(message.jid,Lang.STİCKER,MessageType.text); 39 | var location = await message.client.downloadAndSaveMediaMessage({ 40 | key: { 41 | remoteJid: message.reply_message.jid, 42 | id: message.reply_message.id 43 | }, 44 | message: message.reply_message.data.quotedMessage 45 | }); 46 | 47 | ffmpeg(location) 48 | .fromFormat('webp_pipe') 49 | .save('output.jpg') 50 | .on('end', async () => { 51 | await message.sendMessage(fs.readFileSync('output.jpg'), MessageType.image, {mimetype: Mimetype.jpg,quoted: message.data, thumbnail: "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA0JCgsKCA0LCgsODg0PEyAVExISEyccHhcgLikxMC4pLSwzOko+MzZGNywtQFdBRkxOUlNSMj5aYVpQYEpRUk//2wBDAQ4ODhMREyYVFSZPNS01T09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0//wAARCAEbARsDASIAAhEBAxEB/8QAGwABAAMBAQEBAAAAAAAAAAAAAAECBgUEAwf/xABEEAACAgECBAMDBwgJAwUAAAAAAQIDBAURBhIhMRNBURRhcRUWIjKBkcFCUlSSk6Gx0QcjMzQ1Q2NyczZEYkVTguHx/8QAGQEBAAMBAQAAAAAAAAAAAAAAAAECAwUE/8QAHxEBAQACAgMAAwAAAAAAAAAAAAECEQMhBBIxIkFR/9oADAMBAAIRAxEAPwD9OAAAN7IFW9+gEp7kkRJAAAAAAAAAAht+RG79ALAAAAAAAAAAAPIFWwJT36kkRWyJAAAAAAAAAAjcbgSAAABVvqAbIS3CTLpAEtgAAAAAAACH32JIf1kBABIBEgAAAAAAAAo5bvoBLl5EbbhLqXQBLZAAAAAAAAEMkh9wIBPkQBKJAAMrt1LAAkAAAAAAAAAAAAAjYkAAAAAAAAACO+5VR2LgCEiQAAAAAAAAAAAAjYlAAAAAAAAAAAAAAAAAAAAAAAAAACJSUVu2kveScHjiUocJZ8oSlGSh0cXs11A7ilv26ljmcOtz0HBlJtt0x6t7t9DpgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3Rn+OmvmhqHX8hfxO7Z5NfaYzjDWKs7DzNE06mzKyrIpT5F9Gvr2b9QNFw3/ANP4H/DH+B1DK8K65Q6cfSMmqzFy6YKKhZ2nsu6ZqhSXYAAAAAAAAAAAAAAAAAAAAAAAACN35Ecz37AWAQAAAAAAIIffZFLLY1RcrGoxXdt7GR1rjPHlT7NpFrlkWWKtXOH0IbvuJ30Nhzbd5L3FJ5FNa3sthFe+SM182Z3xfyhrGfkPz5beRfcTVwholfV40rW/OybkB3LNX06tf1mdRH4zR5ZcT6FDo9Uxt/dM89fDOhwjutLx2/Vx6nohpOnQX0cDHjs9ukEBzdY4w0qrTMmeFm12Xqt8kY9d2Z/RtV0jB0+FbyU7ZLntls95SffqbiOFiR7YtK2/8EW9lx/KitfCKLY3SmfH7MDrmrabfhxyMXKXtdDU6Wl13Xka7D4r0a3EqnZqVEJuCcoyls9z3Sw8WX1sep//ABRSWm4E1tLDoa9HBEXLZhh69PpVrelW/wBlqGPL4TR6K8zGt38O+t/CSOVZw9otu/PpeK368p57OE9Cl/2MY/7W0Qu0amn2kvsYT67NmWXCWDX/AHXKzqX5KF72PJPPzeGNTqpysy/Pw74t8slvZXt6eqA2xJzdL1rC1ap2YVylyvaUX0kn6NHQ5uiAsCI7+ZIAAAAAAAKt+gFk9wVj2LACGSQ+4EbAkAESAAAIYDc+OXl1YeJbk3vauqLlJ+4+3kZbji2UsPCwo/VysiMZ/wC1dfwK26ltHJlDL4in7XqNs68WTbpxoScU15N+pyK63HhjLo2W+Jktr3JSRrlBQikkto9F7kZ6FMldruOlurP6yC8nun/I83ic15OSysMsrq1uca3x8Wm3ynBS+O6L2TVVU5v6sU2c7hm72nh7Ct/01Fr0a6HU5VKLjLs1sz1t35Lmcca1fmztxsiNNKl9GtwT2XvZ+i8M6t8taLVluCjPrGcfLddDJ5v9HVk82U8POhDHct1GUOsV6e82mjabTpGm1YeP1jBdZPvJvuwPb6r0BIAgiUlGEpPtFbssQ47xaez3WwH5dqXHeqz1CbwJwqx4T2jDlT516tm54X1n5c0mOVOHJbGXJYl23MpqX9HuRPPnZgZNcaLJuXLJdYfzNhoGj1aJpkMSp8z+tOX50gOny79jJalvfxrU+sliYrb+LZrU32T2MXlZcXl65lVv+yj4bl6tImTtTkuo8Gl6ZHLptz6bbcfMsulKNkJdtnsk/VdDW8NaxbnRtws/aOdjdLNlsprykjjaDS6dExotdeTmfvb6kubxeLdLvgklkc1Fnv8ANfwOfw+RbzXG/EY3tt4stuVXREo90aJABIAFW/QA5b9CEtwl1LpAEtgAAAAEbEgAAAAIZIAgyvHMXCvTcnb6FOUud+ia2NW10OfrWnw1TS78Ozp4kej9JeT+8rlNywcbq/gzkNurieyveThkY3ReW66fifTScyai9Oz/AOrzcf6Eoy/LS7SXuPjqf9Vr2mX+UnKt+/f/APDneLjePnkrHLHqx1eB7N9EnQ3vKi+yD/WZozLcIS8LUtYxf9ZWJe5o1B1LNVrjdxIAISDZ+hiuP6dUqVWfp+RdCqK5bI1t7R9H0MGtb1Pb/EMjZf6jA/cQYj+j6rVL3dqGoZF8qJRUao2S7v1+BtwAAApNqEJSfaKbPzeTc+Hs21P6WblNL3py2/gb3Wr/AGbRcy7fblql1/cYaVLWm6FhpbOdiskvVbbjesbWXJ/Gloj4VFcF2hBRS+CPDZF5HFOkY9a3dcpXWP0S6fierLy6MKmV+RYowiu78/cj68JYFtt12tZtTqtyPo01y7wr8t/ezl+JxW8lzqcI1K7EoRXTsSdNoAAkH1K8uxYAEgAAAAAAAAAAAAAAACHHdbbkgDj6voGFqyUrYyrvh9S6t7SiZzP4U1tqqzH1SvJePNSrhbDlf6xueVkcr9SupuVGvrBY0NU4f1i3VNWxoyx8mChY8f6Xhtdm0dZcY6Lvs7rfj4TNO4Np77EKqO+7jH7i3f7TJpmvnjon/v2fsmV+eehp8ryLOb/jZ2cvV9Kwp8mVlY9c/OLa3Rls/WtJnxlh5EMyh0wxpRlPdbJ7sDoS4w0OS2ldNp+TqbOZ8ocFvI8d40HZvvzeC+52VxBof6fjfeh8v6H+n433oD4R4v0KEUo3TiktklU0S+MtF3/trNl/ps+z4g0Pb+/Y33o+OZr2iSw71HPxnKVbiuq69AJXGWiNbrIsafZqtsn546Kv8217vptUzy8Ka5o+Pw5iU5GbjwsjD6UZNbmnxMrCza3ZiW02x83Bp7AZLWtXhxBhS0nRq7brMhqM7JQcYVx77tnwhwvr2RlUTuzMbGWLDlqnXHm5vivI3nIu0Uk/hsTyMfZqos3YzeDwlTC+OTqeTZnXQe8OfpGL9yNLGKUdkhye8suxEkk1EiWwAJAAAAAAAAAAAAAAAAAAAAAAAAAAADn69mTwdEzcqrZ2VVOUfie99jJcV5t+fKzQtL2dkoN5NnlVD0+LA+ug6Jp602nIyKK8nJyYKy22xczk38To/JOmcvTT8X4eEjy8JXeNwzgbvdxqUG/Vo7AHh+R9LXT5Oxf2Uf5E/JGl+WnYv7KP8j2gDwvSNM89Oxf2S/kPkfS+b/DsX9kj3ADwrR9Mf/YYu/8Awx/kcDXIYvDWfhariJY9dlnhZFdf1ZR9dvVGtM5xFBZOu6LiySlHxJzkmt+iQGmxMijLohkY9kbKpreMovuffdepjK2+E9VUN5PSM2zou6x7H+DNhBp9e6l1QFwAAAAAAAAAAAAAAAAAAHkCje/QC6e4KxLAAAAAAAq99+hYrLo92By+INVWk6XZfFc98voUw/Om+yPHoOmvTdOssypKWTkb25Fjfm1239EeaUflniuUm98XTOkV5Ssfn9iJ4ktuzLMfRMSe1mU97ZJ9Y1ebA+XAl9dmj3V1TUoU5Vih/t36GlM1w1RXp2tavp1UeWqEoWQj6bpmkXYCQAAAADyMZxNLM+dWNPA6zw8Z3Sj+cm3vH7kbPYz+mrx+ONVk+qpohWvv3/ED2QlicQ6HvupU5EPtg/5pnw4Vzboq7SM+TeVgvlUn/mQ8pHmxYvQuJp4HbC1Heyj0hZ5pfE+mvQjhZ+JrVb5ZVyVVzb23g35galPddCV2PlVYp1xlBpxa36eh9V2AAAAAAAAAArzNvoTv6gSAAABVvqAb37EJMJF0AQAAAAAAAG5m+K9Qy65Uadps/DyMlNuz8yK8zRoy3FlNmNnYmqxhKdVUXXdyrdqL8/gTEZXUePg3MwsLRZU5eT4eUrZu52dG3v395Th3Plk8Y6hZfW5LIjtjWPyhHukW9p0vIhG2duNJPs5Nbno0DbP1p5ePBxxMaDhCbWym3329xNkjPDkt+x9f7vx/Z0+jlYiffzi9vxNAcHXX4HFWi5K7T56n9vX8DvFWoAAAAALfbY4PC21uqa5lfnZXJv8ACKO7N8seZvbl6nC4IrfyNdfLvfk2T39fpNfgB4+Nb8izNw8XErUrKX7Q3t1W3kvjufDVuIqdQ0y7BxsLKllXQ25HDZQfq2dLirEyarsfVsOmVzoThbCPdwfn9hylxFpiTcr5RsXTw3F83w2L4yX6x5M8sb1H14SsydJ1NaLkXytqspVtXN1cX+UvgbiPZGQ4ZxMnN1WzW8mmVNah4eNCa2k4+bZsF2K2aaY+2vyAAQsAAAVl+4sQ+4ELt0HxJ7kASiQgAK7dSwAIAAAAAAAAAAQfOyMZJxkk01s0+zPqNl6Ach8P6TK7xngU867PbsdCquumKhVCMIR6JRWyPvsiNl6AZvjKq2OFjZtNbm8LIjbJRXVx7Pb7z242rYGVQr6cuqUJdt5bbe5o67jFpppNPujJ8VcM6dZo+XkYuHVXk1rxOaK2326tfaB2/bsT9Jp/XQ9txP0mn9dHE0zQdBztNxsqOn0tW1p77feepcLaE/8A02n7gOj7bifpNP66HtuJ+k0/ro5/zV0Lb/DqfuOTxNoei6fot1lGn1K+bVdb2/Kb8gOvrOt4WFp90vaK52Si411we8pN9Oh6OFsKzB4fxaL1tZyuUl6Ntv8AEpovDem6bRjzhh1PJhWlK1rdt7dWdtbbAQ+3uPM8PFlPnljUuT83Wtz17DZAfNJryPouw2QBAAAAAAAAEbEoAAAAAAAAAAAAAAAAAAAAAAAHzsjGyE4SScZLZr1PoVcQMjwxkw0+3K0LMshC7GsbqUntzVvqmv3mhWRjyXS6v3fSOdxXodOqaXdKNMXl1wbpmujT9Nzj6Ho/D+q6dXesfa5La2vxJbxl5rbcDUrIx9t/HqW3/kZ/LthrXFGFh48lZRgt3Xyi91zfkp/vObxHoui4eIsfDx28/IfJRGNkm0359zX6PpeNpWDXRj1RhLlTsa7yfqwOil0JS2CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFZLz2bOHn8Mafm5Lyo+NjZD7zx5uHN8du53gBxtL4dwNNyJZFcbLciX+ddLnl9jfY66W23UsAC7AEJprdNNe4CQAAAAAAAAAAAAAAAAAAAAAEbvyHMBIAAAAAAABh3XbxHxrq2Bl5uZj42n1wjRXj3Ov6Ulu5vbu/j7jcHE1LhfA1DUXqCuzMTKlBQnbi3ut2RXk9u4HBv4yzMTMtVWHVbpmHmQwbLLLG7py7OS8vL7f4c/ibXs3VcmqOPVXVgYesV43ic78Wyxb79Oyj3/caaXBmkz1H2yTynvZG6dDufhWWR7TlHzf82UyuC9Hycy/In7VF3W+O4QvahGzfdzS9X+IHPhxtk38TPT8TEpsxoZcseaUpO5KP1rdttlBe85kdczdc4m4cz5VV4+Dbk3wx4xm3OSikm5+Xpt9prKOF8KjVrNQxsjNodtvjW0V3uNVk/WUfP4dj4YvBOj4mZTk0+1KWPd4tMXc3Gp92or0fn8AOdxlZmw4q4bWnxhO9yu5IWyag3yrq9vTqNL40yc+7SIey0wWZVkO7q3yyqTf0fc9kd7W+HsPWrca7Ityabcbm8KzHt5JLm79fsONrvCtNeDp1ekaZO94TlCMIZngPkl9beWz33ff4sDp6Fm2cTcJQycmKonl12Ql4La5erjun336bmNx9Tzc7T9L4buybYZdGZZDNsU5Kaqp6vd9+qe32Gz4O0rJ0fh6rDzORWqc5+HCXMq1KTain57H3x+HtOx9dytYrrl7VlQ5J7veO3TfZer2W4Gd0rjDUNQ1TTIWYONXgarK5UbTk7Yxhv1l5dWvI4sNUux+CNKlprnhwvzpwnj4tkndbHme6rct3v8A/RrsHgrSMHMoycd5SnjWOymLvbjWnvvFL8179SseCtKrwq8aq3MrVN7vosjd9OmT7qL26Lp2A4un5mqalwHXk/KGo35Fd0oyWCou9rsoSbXRro215epz569qc+ENGm9TvtvtyZ1ZFeN9HJsS/Ji9u66bv3o1seE9PhpsMHGvzqFC2VzuqyHGyU5LZtvz6FfmdpMcHExafaceWJOVlORVbtapS+s99uu+y8vIC/Audk6hwtjZGZlrJv3lGU/yls+kZdF1S2NCeDRtJxNFwFh4UZKvmc5SnLmlOT7tv1PeAAAAAAAAAIb2DfQo+4F0SEABDJIAgkEASiQgAAAAAAACsn12ANkJdQupdIAgAAAAAAACst29vIsQ+4EbdASACJCAAAAAAADIfYpzdQD3bLRXqEvMsAAAAAARsSgAAAAAAAAABXl6lgAQAAAAAAAAAAAACNiUAAAAAAAAAAfVFUtiwAAAAAAP/9k="}); 52 | }); 53 | return await message.client.deleteMessage(message.jid, {id: downloading.key.id, remoteJid: message.jid, fromMe: true}) 54 | })); 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | Asena.addCommand({pattern: 'pmp4audio', fromMe: false, dontAddCommandList: true}, (async (message, match) => { 63 | if (message.reply_message === false) return await message.sendMessage(Lang.MP4TOAUDİO_NEEDREPLY); 64 | var downloading = await message.client.sendMessage(message.jid,Lang.MP4TOAUDİO,MessageType.text); 65 | var location = await message.client.downloadAndSaveMediaMessage({ 66 | key: { 67 | remoteJid: message.reply_message.jid, 68 | id: message.reply_message.id 69 | }, 70 | message: message.reply_message.data.quotedMessage 71 | }); 72 | 73 | ffmpeg(location) 74 | .withNoVideo() 75 | .save('output.mp3') 76 | .on('end', async () => { 77 | await message.sendMessage(fs.readFileSync('output.mp3'), MessageType.audio, {mimetype: Mimetype.mp4Audio, ptt: false}); 78 | }); 79 | return await message.client.deleteMessage(message.jid, {id: downloading.key.id, remoteJid: message.jid, fromMe: true}) 80 | })); 81 | 82 | Asena.addCommand({pattern: 'pimagesticker', fromMe: false, dontAddCommandList: true}, (async (message, match) => { 83 | if (message.reply_message === false) return await message.sendMessage(Lang.STİCKER_NEEDREPLY); 84 | var downloading = await message.client.sendMessage(message.jid,Lang.STİCKER,MessageType.text); 85 | var location = await message.client.downloadAndSaveMediaMessage({ 86 | key: { 87 | remoteJid: message.reply_message.jid, 88 | id: message.reply_message.id 89 | }, 90 | message: message.reply_message.data.quotedMessage 91 | }); 92 | 93 | ffmpeg(location) 94 | .fromFormat('webp_pipe') 95 | .save('output.jpg') 96 | .on('end', async () => { 97 | await message.sendMessage(fs.readFileSync('output.jpg'), MessageType.image, {mimetype: Mimetype.jpg}); 98 | }); 99 | return await message.client.deleteMessage(message.jid, {id: downloading.key.id, remoteJid: message.jid, fromMe: true}) 100 | })); 101 | -------------------------------------------------------------------------------- /plugins/del.js: -------------------------------------------------------------------------------- 1 | const Asena = require('../events'); 2 | const {MessageType} = require('@adiwajshing/baileys'); 3 | 4 | 5 | Asena.addCommand({pattern: 'del', fromMe: true, dontAddCommandList: true}, (async (message, match) => { 6 | 7 | await message.reply_message.delete(); 8 | 9 | })); 10 | -------------------------------------------------------------------------------- /plugins/dictionary.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2021 Vai838. 2 | Licensed under the GPL-3.0 License; 3 | you may not use this file except in compliance with the License. 4 | WhatsAsenaDuplicated 5 | */ 6 | const Asena = require('../events'); 7 | const {MessageType} = require('@adiwajshing/baileys'); 8 | /*const got = require('got'); 9 | const fs = require('fs');*/ 10 | const axios = require('axios'); 11 | 12 | const Language = require('../language'); 13 | const Lang = Language.getString('weather'); 14 | const { errorMessage, infoMessage } = require('../helpers'); 15 | 16 | 17 | Asena.addCommand({pattern: 'lngcode', fromMe: false, dontAddCommandList: true}, (async (message, match) => { 18 | 19 | await message.sendMessage('*Code:* en_US \n *Language:* English (US) \n\n *Code:* hi \n *Language:* Hindi \n\n *Code:* es \n *Language:* Spanish \n\n *Code:* fr \n *Language:* French \n\n *Code:* ja \n *Language:* Japanese \n\n *Code:* ru \n *Language:* Russian \n\n *Code:* en_GB \n *Language:* English (UK) \n\n *Code:* de \n *Language:* German \n\n *Code:* it \n *Language:* Italian \n\n *Code:* ko \n *Language:* Korean \n\n *Code:* pt-BR \n *Language:* Brazilian Portuguese \n\n *Code:* ar \n *Language:* Arabic \n\n *Code:* tr \n *Language:* Turkish \n\n'); 20 | 21 | })); 22 | 23 | 24 | 25 | /*Asena.addCommand({pattern: 'dict ?(.*)', fromMe: false, dontAddCommandList: true }, async (message, match) => { 26 | if (match[1] === '') return await message.reply("Need word to translate"); 27 | 28 | if (match[1].includes(';')) { 29 | var split = match[1].split(';'); 30 | word = split[1]; 31 | langcode = split[0]; 32 | } 33 | else { 34 | word = match[1]; 35 | langcode = 'en_US'; 36 | } 37 | 38 | 39 | const url = `https://api.dictionaryapi.dev/api/v2/entries/${langcode}/${word}`; 40 | try { 41 | const response = await got(url); 42 | const json = JSON.parse(response.body); 43 | if (response.statusCode === 200) return await message.client.sendMessage(message.jid, 44 | '* ' + "Word:" +'* ```' + json[0].word + '```\n' + 45 | '* ' + "Phonetics:" +'* ```' + json[0].phonetics[0].text + '```\n\n' + 46 | '* ' + "Part of Speech:" +'* ```' + json.result[0][0].partOfSpeech + '```\n' + 47 | '* ' + "Definition 1:" +'* ```' + json[0].meanings[0].definitions[0].definition + '```\n' + 48 | '* ' + "Synonyms:" +'* ```' + json[0].meanings[0].definitions[0].synonyms[0] + '```\n' + 49 | '* ' + "-" +'* ```' + json[0].meanings[0].definitions[0].synonyms[1] + '```\n' + 50 | '* ' + "-" +'* ```' + json[0].meanings[0].definitions[0].synonyms[2] + '```\n' + 51 | '* ' + "Usage:" +'* ```' + json[0].meanings[0].definitions[0].example + '```\n\n' + 52 | '* ' + "Definition 2:" +'* ```' + json[0].meanings[0].definitions[1].definition + '```\n' + 53 | '* ' + "Usage:" +'* ```' + json[0].meanings[0].definitions[1].example + '```\n\n\n' + 54 | '* ' + "Part of Speech:" +'* ```' + json[0].meanings[1].partOfSpeech + '```\n\n' + 55 | '* ' + "Definition :" +'* ```' + json[0].meanings[0].definitions[0].definition + '```\n' + 56 | '* ' + "Synonyms:" +'* ```' + json[0].meanings[0].definitions[0].synonyms[0] + '```\n' + 57 | '* ' + "-" +'* ```' + json[0].meanings[0].definitions[0].synonyms[1] + '```\n' + 58 | '* ' + "Usage:" +'* ```' + json[0].meanings[0].definitions[0].example + '```\n\n', MessageType.text); 59 | } catch { 60 | return await message.client.sendMessage(message.jid, "error", MessageType.text); 61 | } 62 | }); 63 | */ 64 | 65 | 66 | 67 | /*Asena.addCommand({ pattern: 'dict ?(.*)', fromMe: false, desc: "Use it as a dictionary.\nEg: .dict en_US;lead\n For supporting languages send *.lngcode*" }, async (message, match) => { 68 | 69 | if (!match[1]) return await message.sendMessage(errorMessage("Need word")) 70 | 71 | if (match[1].includes(';')) { 72 | var split = match[1].split(';'); 73 | word = split[1]; 74 | langcode = split[0]; 75 | } 76 | else { 77 | word = match[1]; 78 | langcode = 'en_US'; 79 | } 80 | 81 | await message.sendMessage(infoMessage("Loading")) 82 | 83 | 84 | 85 | for (var i = 0; i < 5 ; i++) { 86 | 87 | await axios 88 | .get(`https://api.dictionaryapi.dev/api/v2/entries/${langcode}/${word}`) 89 | .then(async (response) => { 90 | const { 91 | definition, 92 | example, 93 | } = response.data[i].meanings[i].definitions[i] 94 | 95 | 96 | 97 | const msg = ` 98 | *${"Definition"}*: ${definition} 99 | *${"Example"}*: ${example}` 100 | 101 | await message.client.sendMessage(message.jid, msg , MessageType.text, { 102 | quoted: message.data, 103 | }) 104 | 105 | }) 106 | .catch( 107 | async (err) => await message.sendMessage(""), 108 | )} 109 | }, 110 | ) 111 | */ 112 | 113 | Asena.addCommand({ pattern: 'dict ?(.*)', fromMe: false, desc: "Use it as a dictionary.\nEg: .dict en_US;lead\n For supporting languages send *.lngcode*" }, async (message, match) => { 114 | 115 | if (!match[1]) return await message.sendMessage(errorMessage("Need word")) 116 | 117 | if (match[1].includes(';')) { 118 | var split = match[1].split(';'); 119 | word = split[1]; 120 | langcode = split[0]; 121 | } 122 | else { 123 | word = match[1]; 124 | langcode = 'en_US'; 125 | } 126 | 127 | await message.sendMessage(infoMessage("Loading")) 128 | 129 | 130 | await axios 131 | .get(`https://api.dictionaryapi.dev/api/v2/entries/${langcode}/${word}`) 132 | .then(async (response) => { 133 | const { 134 | definition, 135 | example, 136 | } = response.data[0].meanings[0].definitions[0] 137 | 138 | 139 | 140 | const msg = ` 141 | *${"Definition"}*: ${definition} 142 | *${"Example"}*: ${example}` 143 | 144 | await message.client.sendMessage(message.jid, msg , MessageType.text, { 145 | quoted: message.data, 146 | }) 147 | }) 148 | 149 | 150 | await axios 151 | .get(`https://api.dictionaryapi.dev/api/v2/entries/${langcode}/${word}`) 152 | .then(async (response) => { 153 | const { 154 | definition, 155 | example, 156 | } = response.data[0].meanings[0].definitions[1] 157 | 158 | 159 | 160 | const msg = ` 161 | *${"Definition"}*: ${definition} 162 | *${"Example"}*: ${example}` 163 | 164 | await message.client.sendMessage(message.jid, msg , MessageType.text, { 165 | quoted: message.data, 166 | }) 167 | }) 168 | 169 | await axios 170 | .get(`https://api.dictionaryapi.dev/api/v2/entries/${langcode}/${word}`) 171 | .then(async (response) => { 172 | const { 173 | definition, 174 | example, 175 | } = response.data[0].meanings[1].definitions[0] 176 | 177 | 178 | 179 | const msg = ` 180 | *${"Definition"}*: ${definition} 181 | *${"Example"}*: ${example}` 182 | 183 | await message.client.sendMessage(message.jid, msg , MessageType.text, { 184 | quoted: message.data, 185 | }) 186 | }) 187 | 188 | await axios 189 | .get(`https://api.dictionaryapi.dev/api/v2/entries/${langcode}/${word}`) 190 | .then(async (response) => { 191 | const { 192 | definition, 193 | example, 194 | } = response.data[0].meanings[1].definitions[1] 195 | 196 | 197 | 198 | const msg = ` 199 | *${"Definition"}*: ${definition} 200 | *${"Example"}*: ${example}` 201 | 202 | await message.client.sendMessage(message.jid, msg , MessageType.text, { 203 | quoted: message.data, 204 | }) 205 | }) 206 | 207 | await axios 208 | .get(`https://api.dictionaryapi.dev/api/v2/entries/${langcode}/${word}`) 209 | .then(async (response) => { 210 | const { 211 | definition, 212 | example, 213 | } = response.data[1].meanings[0].definitions[0] 214 | 215 | 216 | 217 | const msg = ` 218 | *${"Definition"}*: ${definition} 219 | *${"Example"}*: ${example}` 220 | 221 | await message.client.sendMessage(message.jid, msg , MessageType.text, { 222 | quoted: message.data, 223 | }) 224 | 225 | 226 | }) 227 | 228 | }, 229 | ) 230 | -------------------------------------------------------------------------------- /plugins/evaluators.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | const Asena = require('../events'); 10 | const {MessageType} = require('@adiwajshing/baileys'); 11 | const exec = require('child_process').exec; 12 | const os = require("os"); 13 | 14 | const Language = require('../language'); 15 | const Lang = Language.getString('evaluators'); 16 | 17 | Asena.addCommand({pattern: 'term ?(.*)', fromMe: true, desc: Lang.TERM_DESC, dontAddCommandList: true}, (async (message, match) => { 18 | var user = os.userInfo().username; 19 | if (match[1] === '') return await message.client.sendMessage(message.jid,Lang.GIVE_ME_CODE,MessageType.text); 20 | 21 | exec(match[1], async (err, stdout, stderr) => { 22 | if (err) { 23 | return await message.client.sendMessage(message.jid,'```' + user + ':~# ' + match[1] + '\n' + err + '```',MessageType.text); 24 | } 25 | 26 | return await message.client.sendMessage(message.jid,'```' + user + ':~# ' + match[1] + '\n' + stdout + '```',MessageType.text); 27 | }); 28 | })); 29 | -------------------------------------------------------------------------------- /plugins/evilinsult.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2021 Vai838. 2 | Licensed under the GPL-3.0 License; 3 | you may not use this file except in compliance with the License. 4 | WhatsAsenaDuplicated 5 | */ 6 | 7 | const Asena = require('../events'); 8 | const {MessageType} = require('@adiwajshing/baileys'); 9 | const got = require('got'); 10 | 11 | const Language = require('../language'); 12 | const Lang = Language.getString('weather'); 13 | 14 | Asena.addCommand({pattern: 'insult ?(.*)', fromMe: false, desc: Lang.EVINS_DESC}, async (message, match) => { 15 | if (match[1] === 'xx') return await message.reply(Lang.NEED_LOCATIONA); 16 | const url = `https://evilinsult.com/generate_insult.php?lang=en&type=json`; 17 | try { 18 | const response = await got(url); 19 | const json = JSON.parse(response.body); 20 | if (response.statusCode === 200) return await message.client.sendMessage(message.jid, '*👿🤬 ' + Lang.EVINS +'* ```' + json.insult + '```\n\n', MessageType.text); 21 | } catch { 22 | return await message.client.sendMessage(message.jid, Lang.NOT_FOUNDAC, MessageType.text); 23 | } 24 | }); 25 | -------------------------------------------------------------------------------- /plugins/ffmpeg.js: -------------------------------------------------------------------------------- 1 | /* Codded by @phaticusthiccy 2 | Telegram: t.me/phaticusthiccy 3 | Instagram: www.instagram.com/kyrie.baran 4 | */ 5 | 6 | const Asena = require('../events'); 7 | const {MessageType,Mimetype} = require('@adiwajshing/baileys'); 8 | const fs = require('fs'); 9 | const ffmpeg = require('fluent-ffmpeg'); 10 | const {execFile} = require('child_process'); 11 | const cwebp = require('cwebp-bin'); 12 | 13 | const Language = require('../language'); 14 | const Lang = Language.getString('ffmpeg'); 15 | 16 | 17 | Asena.addCommand({pattern: 'ffmpeg ?(.*)', fromMe: true, desc: Lang.FF_DESC, warn: 'Dont use on photos! Only for Videos.'}, (async (message, match) => { 18 | if (match[1] === '') return await message.sendMessage('Need Video and Filter Name!\nℹ️ Ex: ```.ffmpeg fade=in:0:30```\nℹ️ Ex: ```.ffmpeg fade=in:0:30, fps=fps=25```'); 19 | var downloading = await message.client.sendMessage(message.jid,Lang.FF_PROC,MessageType.text); 20 | var location = await message.client.downloadAndSaveMediaMessage({ 21 | key: { 22 | remoteJid: message.reply_message.jid, 23 | id: message.reply_message.id 24 | }, 25 | message: message.reply_message.data.quotedMessage 26 | }); 27 | 28 | ffmpeg(location) 29 | .videoFilters(`${match[1]}`) 30 | .format('mp4') 31 | .save('output.mp4') 32 | .on('end', async () => { 33 | await message.sendMessage(fs.readFileSync('output.mp4'), MessageType.video, {mimetype: Mimetype.mpeg}); 34 | }); 35 | return await message.client.deleteMessage(message.jid, {id: downloading.key.id, remoteJid: message.jid, fromMe: true}) 36 | })); 37 | -------------------------------------------------------------------------------- /plugins/filters.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | const Asena = require('../events'); 10 | const {MessageType} = require('@adiwajshing/baileys'); 11 | const FilterDb = require('./sql/filters'); 12 | 13 | const Language = require('../language'); 14 | const Lang = Language.getString('filters'); 15 | 16 | Asena.addCommand({pattern: 'filter ?(.*)', fromMe: true, desc: Lang.FILTER_DESC, dontAddCommandList: true}, (async (message, match) => { 17 | match = match[1].match(/[\'\"\“](.*?)[\'\"\“]/gsm); 18 | 19 | if (match === null) { 20 | filtreler = await FilterDb.getFilter(message.jid); 21 | if (filtreler === false) { 22 | await message.client.sendMessage(message.jid,Lang.NO_FILTER,MessageType.text) 23 | } else { 24 | var mesaj = Lang.FILTERS + '\n'; 25 | filtreler.map((filter) => mesaj += '```' + filter.dataValues.pattern + '```\n'); 26 | await message.client.sendMessage(message.jid,mesaj,MessageType.text); 27 | } 28 | } else { 29 | if (match.length < 2) { 30 | return await message.client.sendMessage(message.jid,Lang.NEED_REPLY + ' ```.filter "sa" "as"',MessageType.text); 31 | } 32 | await FilterDb.setFilter(message.jid, match[0].replace(/['"“]+/g, ''), match[1].replace(/['"“]+/g, '').replace(/[#]+/g, '\n'), match[0][0] === "'" ? true : false); 33 | await message.client.sendMessage(message.jid,Lang.FILTERED.format(match[0].replace(/['"]+/g, '')),MessageType.text); 34 | } 35 | })); 36 | 37 | Asena.addCommand({pattern: 'stop ?(.*)', fromMe: true, desc: Lang.STOP_DESC, dontAddCommandList: true}, (async (message, match) => { 38 | match = match[1].match(/[\'\"\“](.*?)[\'\"\“]/gsm); 39 | if (match === null) { 40 | return await message.client.sendMessage(message.jid,Lang.NEED_REPLY + '\n*Example:* ```.stop "hello"```',MessageType.text) 41 | } 42 | 43 | del = await FilterDb.deleteFilter(message.jid, match[0].replace(/['"“]+/g, '')); 44 | 45 | if (!del) { 46 | await message.client.sendMessage(message.jid,Lang.ALREADY_NO_FILTER, MessageType.text) 47 | } else { 48 | await message.client.sendMessage(message.jid,Lang.DELETED, MessageType.text) 49 | } 50 | })); 51 | 52 | 53 | Asena.addCommand({on: 'text', fromMe: false}, (async (message, match) => { 54 | var filtreler = await FilterDb.getFilter(message.jid); 55 | if (!filtreler) return; 56 | filtreler.map( 57 | async (filter) => { 58 | pattern = new RegExp(filter.dataValues.regex ? filter.dataValues.pattern : ('\\b(' + filter.dataValues.pattern + ')\\b'), 'gm'); 59 | if (pattern.test(message.message)) { 60 | await message.client.sendMessage(message.jid,filter.dataValues.text, MessageType.text, {quoted: message.data}); 61 | } 62 | } 63 | ); 64 | })); 65 | 66 | Asena.addCommand({on: 'text', fromMe: true, deleteCommand: false, dontAddCommandList: true}, (async (message, match) => { 67 | var filtreler = await FilterDb.getFilter(message.jid); 68 | if (!filtreler) return; 69 | return filtreler.map( 70 | async (filter) => { 71 | pattern = new RegExp(filter.dataValues.regex ? filter.dataValues.pattern : ('\\b(' + filter.dataValues.pattern + ')\\b'), 'gm'); 72 | var fo = message.message.replace('$', '') 73 | if (fo == filter.dataValues.pattern && message.message.startsWith('$')) { 74 | await new Promise(r => setTimeout(r, 100)); 75 | return await message.client.sendMessage(message.jid,filter.dataValues.text, MessageType.text, {quoted: message.data}); 76 | } 77 | } 78 | ); 79 | })); 80 | -------------------------------------------------------------------------------- /plugins/fsong.js: -------------------------------------------------------------------------------- 1 | const Asena = require('../events'); 2 | const {MessageType,Mimetype} = require('@adiwajshing/baileys'); 3 | 4 | const fs = require('fs'); 5 | const axios = require('axios'); 6 | const FormData = require('form-data'); 7 | const ffmpeg = require('fluent-ffmpeg'); 8 | 9 | Asena.addCommand({pattern: 'find', fromMe: false, desc: 'Shazam plugin'}, (async (message, match) => { 10 | if (message.reply_message === false) return await message.client.sendMessage(message.jid, 'replay to a audio!', MessageType.text); 11 | var filePath = await message.client.downloadAndSaveMediaMessage({ 12 | key: { 13 | remoteJid: message.reply_message.jid, 14 | id: message.reply_message.id 15 | }, 16 | message: message.reply_message.data.quotedMessage 17 | }); 18 | var form = new FormData(); 19 | ffmpeg(filePath).format('mp3').save('music.mp3').on('end', async () => { 20 | form.append('api_token', '2bd1fcb3ccd15607f72cdbb527907ce6'); 21 | form.append('file', fs.createReadStream('./music.mp3')); 22 | form.append('return', 'apple_music, spotify'); 23 | var configs = { 24 | headers: { 25 | ...form.getHeaders() 26 | } 27 | } 28 | await axios.post('https://api.audd.io/', form, configs).then(async (response) => { 29 | var res = response.data 30 | if (res === 'success') { 31 | await message.client.sendMessage(message.jid, `Title: ${res.title}\nArtist: ${res.artist}`, MessageType.text); 32 | } else { 33 | await message.client.sendMessage(message.jid, 'No results found', MessageType.text); 34 | } 35 | }).catch((error) => { 36 | console.log(error); 37 | }); 38 | }); 39 | 40 | })); 41 | -------------------------------------------------------------------------------- /plugins/greetings.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | const Asena = require('../events'); 10 | const {MessageType} = require('@adiwajshing/baileys'); 11 | const sql = require('./sql/greetings'); 12 | 13 | const Language = require('../language'); 14 | const Lang = Language.getString('greetings'); 15 | 16 | Asena.addCommand({pattern: 'welcome$', fromMe: true, desc: Lang.WELCOME_DESC, dontAddCommandList: true}, (async (message, match) => { 17 | var hg = await sql.getMessage(message.jid); 18 | if (hg === false) { 19 | await message.client.sendMessage(message.jid,Lang.NOT_SET_WELCOME,MessageType.text); 20 | } else { 21 | await message.client.sendMessage(message.jid,Lang.WELCOME_ALREADY_SETTED + hg.message + '```',MessageType.text); 22 | } 23 | })); 24 | 25 | Asena.addCommand({pattern: 'welcome (.*)', fromMe: true, dontAddCommandList: true}, (async (message, match) => { 26 | if (match[1] === '') { 27 | return await message.client.sendMessage(message.jid,Lang.NEED_WELCOME_TEXT); 28 | } else { 29 | if (match[1] === 'delete') { await message.client.sendMessage(message.jid,Lang.WELCOME_DELETED,MessageType.text); return await sql.deleteMessage(message.jid, 'welcome'); } 30 | await sql.setMessage(message.jid, 'welcome', match[1].replace(/#/g, '\n')); 31 | return await message.client.sendMessage(message.jid,Lang.WELCOME_SETTED,MessageType.text) 32 | } 33 | })); 34 | 35 | Asena.addCommand({pattern: 'goodbye$', fromMe: true, desc: Lang.GOODBYE_DESC, dontAddCommandList: true}, (async (message, match) => { 36 | var hg = await sql.getMessage(message.jid, 'goodbye'); 37 | if (hg === false) { 38 | await message.client.sendMessage(message.jid,Lang.NOT_SET_GOODBYE,MessageType.text) 39 | } else { 40 | await message.client.sendMessage(message.jid,Lang.GOODBYE_ALREADY_SETTED + hg.message + '```',MessageType.text); 41 | } 42 | })); 43 | 44 | Asena.addCommand({pattern: 'goodbye (.*)', fromMe: true, dontAddCommandList: true}, (async (message, match) => { 45 | if (match[1] === '') { 46 | return await message.client.sendMessage(message.jid,Lang.NEED_GOODBYE_TEXT,MessageType.text); 47 | } else { 48 | if (match[1] === 'delete') { await message.client.sendMessage(message.jid,Lang.GOODBYE_DELETED,MessageType.text); return await sql.deleteMessage(message.jid, 'goodbye'); } 49 | await sql.setMessage(message.jid, 'goodbye', match[1].replace(/#/g, '\n')); 50 | return await message.client.sendMessage(message.jid,Lang.GOODBYE_SETTED,MessageType.text) 51 | } 52 | })); 53 | -------------------------------------------------------------------------------- /plugins/happymod.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2021 Vai838. 2 | Licensed under the GPL-3.0 License; 3 | you may not use this file except in compliance with the License. 4 | WhatsAsenaDuplicated*/ 5 | 6 | 7 | const Asena = require('../events'); 8 | const {MessageType} = require('@adiwajshing/baileys'); 9 | const got = require('got'); 10 | const Config = require('../config'); 11 | 12 | const Language = require('../language'); 13 | const Lang = Language.getString('weather'); 14 | 15 | Asena.addCommand({pattern: 'happymod ?(.*)', fromMe: false, desc: Lang.HMODD_DESC, dontAddCommandList: true }, async (message, match) => { 16 | if (match[1] === '') return await message.reply(Lang.NEED_APPNAME); 17 | const url = `https://tobz-api.herokuapp.com/api/happymod?q=${match[1]}&apikey=${Config.TOBZ_API_KEY}`; 18 | try { 19 | const response = await got(url); 20 | const json = JSON.parse(response.body); 21 | if (response.statusCode === 200) return await message.client.sendMessage(message.jid, 22 | '*🏷️ ' + Lang.NAMEY +'* ```' + json.result[0].title + '```\n\n' + 23 | '*📦 ' + Lang.SIZE +'* ```' + json.result[0].size + '```\n\n\n' + 24 | '*⬇️ ' + Lang.DOWNLOAD +':* ```' + json.result[0].link + '```\n', MessageType.text); 25 | } catch { 26 | return await message.client.sendMessage(message.jid, Lang.NOT_FOUNDMD, MessageType.text); 27 | } 28 | }); 29 | 30 | -------------------------------------------------------------------------------- /plugins/heroku.js: -------------------------------------------------------------------------------- 1 | /* 2 | Heroku plugin for WhatsAsena - W4RR10R 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | WhatsAsena - Yusuf Usta 6 | */ 7 | 8 | const Asena = require('../events'); 9 | const Config = require('../config'); 10 | const Heroku = require('heroku-client'); 11 | const {secondsToHms} = require('./afk'); 12 | const got = require('got'); 13 | const Language = require('../language'); 14 | const Lang = Language.getString('heroku'); 15 | 16 | const heroku = new Heroku({ 17 | token: Config.HEROKU.API_KEY 18 | }); 19 | 20 | 21 | let baseURI = '/apps/' + Config.HEROKU.APP_NAME; 22 | 23 | Asena.addCommand({pattern: 'restart', fromMe: true, desc: Lang.RESTART_DESC, dontAddCommandList: true}, (async (message, match) => { 24 | await message.sendMessage(Lang.RESTART_MSG); 25 | console.log(baseURI); 26 | await heroku.delete(baseURI + '/dynos').catch(async (error) => { 27 | await message.sendMessage(error.message); 28 | }); 29 | })); 30 | 31 | Asena.addCommand({pattern: 'shutdown', fromMe: true, desc: Lang.SHUTDOWN_DESC, dontAddCommandList: true}, (async(message, match) => { 32 | await heroku.get(baseURI + '/formation').then(async (formation) => { 33 | forID = formation[0].id; 34 | await message.sendMessage(Lang.SHUTDOWN_MSG); 35 | await heroku.patch(baseURI + '/formation/' + forID, { 36 | body: { 37 | quantity: 0 38 | } 39 | }); 40 | }).catch(async (err) => { 41 | await message.sendMessage(error.message); 42 | }); 43 | })); 44 | 45 | Asena.addCommand({pattern: 'dyno', fromMe: false, desc: Lang.DYNO_DESC}, (async (message, match) => { 46 | heroku.get('/account').then(async (account) => { 47 | // have encountered some issues while calling this API via heroku-client 48 | // so let's do it manually 49 | url = "https://api.heroku.com/accounts/" + account.id + "/actions/get-quota" 50 | headers = { 51 | "User-Agent": "Chrome/80.0.3987.149 Mobile Safari/537.36", 52 | "Authorization": "Bearer " + Config.HEROKU.API_KEY, 53 | "Accept": "application/vnd.heroku+json; version=3.account-quotas", 54 | } 55 | await got(url, {headers: headers}).then(async (res) => { 56 | const resp = JSON.parse(res.body); 57 | total_quota = Math.floor(resp.account_quota); 58 | quota_used = Math.floor(resp.quota_used); 59 | percentage = Math.round((quota_used / total_quota) * 100); 60 | remaining = total_quota - quota_used; 61 | await message.sendMessage( 62 | Lang.DYNO_TOTAL + ": ```{}```\n\n".format(secondsToHms(total_quota)) + 63 | Lang.DYNO_USED + ": ```{}```\n".format(secondsToHms(quota_used)) + 64 | Lang.PERCENTAGE + ": ```{}```\n\n".format(percentage) + 65 | Lang.DYNO_LEFT + ": ```{}```\n".format(secondsToHms(remaining)) 66 | ); 67 | }).catch(async (err) => { 68 | await message.sendMessage(err.message); 69 | }); 70 | }); 71 | })); 72 | 73 | Asena.addCommand({pattern: 'setvar ?(.*)', fromMe: true, desc: Lang.SETVAR_DESC, dontAddCommandList: true}, (async(message, match) => { 74 | if (match[1] === '') return await message.sendMessage(Lang.KEY_VAL_MISSING); 75 | if ((varKey = match[1].split(':')[0]) && (varValue = match[1].split(':')[1])) { 76 | await heroku.patch(baseURI + '/config-vars', { 77 | body: { 78 | [varKey]: varValue 79 | } 80 | }).then(async (app) => { 81 | await message.sendMessage(Lang.SET_SUCCESS.format(varKey, varValue)); 82 | }); 83 | } else { 84 | await message.sendMessage(Lang.INVALID); 85 | } 86 | })); 87 | 88 | 89 | Asena.addCommand({pattern: 'delvar ?(.*)', fromMe: true, desc: Lang.DELVAR_DESC, dontAddCommandList: true}, (async (message, match) => { 90 | if (match[1] === '') return await message.reply(Lang.KEY_VAL_MISSING); 91 | await heroku.get(baseURI + '/config-vars').then(async (vars) => { 92 | key = match[1].trim(); 93 | for (vr in vars) { 94 | if (key == vr) { 95 | await heroku.patch(baseURI + '/config-vars', { 96 | body: { 97 | [key]: null 98 | } 99 | }); 100 | return await message.sendMessage(Lang.DEL_SUCCESS.format(key)); 101 | } 102 | } 103 | await message.sendMessage(Lang.NOT_FOUND); 104 | }).catch(async (error) => { 105 | await message.sendMessage(error.message); 106 | }); 107 | 108 | })); 109 | 110 | Asena.addCommand({pattern: 'getvar ?(.*)', fromMe: true, desc: Lang.GETVAR_DESC, dontAddCommandList: true}, (async (message, match) => { 111 | if (match[1] === '') return await message.reply(Lang.KEY_VAL_MISSING); 112 | await heroku.get(baseURI + '/config-vars').then(async (vars) => { 113 | for (vr in vars) { 114 | if (match[1].trim() == vr) return await message.sendMessage("```{} - {}```".format(vr, vars[vr])); 115 | } 116 | await message.sendMessage(Lang.NOT_FOUND); 117 | }).catch(async (error) => { 118 | await message.sendMessage(error.message); 119 | }); 120 | })); 121 | -------------------------------------------------------------------------------- /plugins/horoscope.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2021 Vai838. 2 | Licensed under the GPL-3.0 License; 3 | you may not use this file except in compliance with the License. 4 | WhatsAsenaDuplicated 5 | */ 6 | 7 | const Asena = require('../events'); 8 | const {MessageType} = require('@adiwajshing/baileys'); 9 | const got = require('got'); 10 | 11 | const Language = require('../language'); 12 | const Lang = Language.getString('weather'); 13 | 14 | Asena.addCommand({pattern: 'zodiac ?(.*)', fromMe: false, desc: Lang.ZODIAC_DESC}, async (message, match) => { 15 | if (match[1] === '') return await message.reply(Lang.NEED_ZOD); 16 | const url = `https://horoscope-api.herokuapp.com/horoscope/today/${match[1]}`; 17 | try { 18 | const response = await got(url); 19 | const json = JSON.parse(response.body); 20 | if (response.statusCode === 200) return await message.client.sendMessage(message.jid, '*☸️ ' + Lang.SUNSIGN +':* ```' + match[1] + '```\n\n' + 21 | '*🔮 ' + Lang.HOROSCOPE +':* ```' + json.horoscope + '```\n' , MessageType.text); 22 | } catch { 23 | return await message.client.sendMessage(message.jid, Lang.NOT_FOUNDAC, MessageType.text); 24 | } 25 | }); 26 | -------------------------------------------------------------------------------- /plugins/instagram.js: -------------------------------------------------------------------------------- 1 | /* 2 | # Copyright (C) 2020 MuhammedKpln. 3 | # edited and brought into action by Vai838 4 | # WhatsAsena is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU General Public License as published by 6 | # the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # WhatsAsena is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with this program. If not, see . 16 | # 17 | */ 18 | 19 | 20 | const Asena = require('../events'); 21 | const { MessageType } = require('@adiwajshing/baileys'); 22 | const axios = require('axios'); 23 | 24 | const Language = require('../language'); 25 | const { errorMessage, infoMessage } = require('../helpers'); 26 | const Lang = Language.getString('instagram') ; 27 | 28 | 29 | 30 | 31 | 32 | Asena.addCommand({ pattern: 'profinsta ?(.*)', fromMe: false, usage: Lang.USAGE, desc: Lang.DESC }, async (message, match) => { 33 | 34 | const userName = match[1] 35 | 36 | if (!userName) return await message.sendMessage(errorMessage(Lang.NEED_WORD)) 37 | 38 | await message.sendMessage(infoMessage(Lang.LOADING)) 39 | 40 | await axios 41 | .get(`https://api-anoncybfakeplayer.herokuapp.com/igstalk?username=${userName}`) 42 | .then(async (response) => { 43 | const { 44 | pic, 45 | username, 46 | bio, 47 | follower, 48 | following, 49 | } = response.data 50 | 51 | const profileBuffer = await axios.get(pic, {responseType: 'arraybuffer'}) 52 | 53 | const msg = ` 54 | *${Lang.USERNAME}*: ${username} 55 | *${Lang.BIO}*: ${bio} 56 | *${Lang.FOLLOWERS}*: ${follower} 57 | *${Lang.FOLLOWS}*: ${following}` 58 | 59 | await message.sendMessage(Buffer.from(profileBuffer.data), MessageType.image, { 60 | caption: msg 61 | }) 62 | }) 63 | .catch( 64 | async (err) => await message.sendMessage(errorMessage(Lang.NOT_FOUND + userName)), 65 | ) 66 | }, 67 | 68 | ) 69 | 70 | 71 | -------------------------------------------------------------------------------- /plugins/ip.js: -------------------------------------------------------------------------------- 1 | const Asena = require('../events'); 2 | const Config = require('../config'); 3 | const {MessageType} = require('@adiwajshing/baileys'); 4 | const got = require('got'); 5 | 6 | // List 7 | const IPSTATUS_DESC = "It Sends Your IP details" 8 | const NEED_IP = "*Enter Your IP Address..!*" 9 | const IP = "IP :" 10 | const ST = "STATUS :" 11 | const CONTINENT = "CONTINENT :" 12 | const COUNTRY = "COUNTRY :" 13 | const COUNTRYCODE = "COUNTRYCODE :" 14 | const REGIONNAME = "REGIONNAME :" 15 | const CITY = "CITY :" 16 | const ZIP = "ZIP :" 17 | const CURRENCY = "CURRENCY :" 18 | const ISP = "ISP :" 19 | const MOBILE = "MOBILE :" 20 | const PROXY = "PROXY :" 21 | const NOT_FOUNDIP = "```Sorry,I could not your IP 😖```" 22 | 23 | 24 | 25 | 26 | Asena.addCommand({pattern: 'ip ?(.*)', desc: 'gives you the detail of your IP' ,fromMe: false}, async (message, match) => { 27 | 28 | if (match[1] === '') return await message.reply(NEED_IP); 29 | const url = `https://api.techniknews.net/ipgeo/${match[1]}`; 30 | try { 31 | const response = await got(url); 32 | const ipjson = JSON.parse(response.body); 33 | if (response.statusCode === 200) return await message.client.sendMessage(message.jid, '*🔴 ' + IP +'* ```' + match[1] + '```\n\n' + 34 | '*✅' + ST +'* ```' + ipjson.status+ '```\n' + 35 | '*🌐' + CONTINENT +'* ```' + ipjson.continent+ '```\n' + 36 | '*🗺' + COUNTRY +'* ```' + ipjson.country+ '```\n' + 37 | '*🔢' + COUNTRYCODE +'* ```' + ipjson.countryCode+ '```\n' + 38 | '*🌍' + REGIONNAME +'* ```' + ipjson.regionName+ '```\n' + 39 | '*🚩' + CITY +'* ```' + ipjson.city+ '```\n' + 40 | '*🏛' + ZIP +'* ```' + ipjson.zip+ '```\n' + 41 | '*💸' + CURRENCY +'* ```' + ipjson.currency+ '```\n\n' + 42 | '*📡' + ISP +'* ```' + ipjson.isp+ '```\n' + 43 | '*🛡' + PROXY +'* ```' + ipjson.proxy+ '```\n' + 44 | '*📱' + MOBILE +'* ```' + ipjson.mobile+ '```\n', MessageType.text); 45 | } 46 | catch { 47 | return await message.client.sendMessage(message.jid, NOT_FOUNDIP, MessageType.text); 48 | } 49 | }); 50 | -------------------------------------------------------------------------------- /plugins/joke.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2021 Vai838. 2 | Licensed under the GPL-3.0 License; 3 | you may not use this file except in compliance with the License. 4 | WhatsAsenaDuplicated 5 | */ 6 | 7 | const Asena = require('../events'); 8 | const {MessageType} = require('@adiwajshing/baileys'); 9 | const got = require('got'); 10 | 11 | const Language = require('../language'); 12 | const Lang = Language.getString('weather'); 13 | 14 | Asena.addCommand({pattern: 'joke ?(.*)', fromMe: false, desc: Lang.JOKE_DESC}, async (message, match) => { 15 | if (match[1] === 'xx') return await message.reply(Lang.NEED_LOCATIONA); 16 | const url = `https://official-joke-api.appspot.com/random_joke`; 17 | try { 18 | const response = await got(url); 19 | const json = JSON.parse(response.body); 20 | if (response.statusCode === 200) return await message.client.sendMessage(message.jid, '*🗣️ ' + Lang.JOKE +'* ```' + json.setup + '```\n\n' + 21 | '*😆' + Lang.PUNCHLINE +'* ```' + json.punchline+ '```\n', MessageType.text); 22 | } catch { 23 | return await message.client.sendMessage(message.jid, Lang.NOT_FOUNDAC, MessageType.text); 24 | } 25 | }); 26 | -------------------------------------------------------------------------------- /plugins/location.js: -------------------------------------------------------------------------------- 1 | /* Codded by @phaticusthiccy 2 | Telegram: t.me/phaticusthiccy 3 | Instagram: www.instagram.com/kyrie.baran 4 | */ 5 | 6 | const Asena = require('../events'); 7 | const {MessageType, GroupSettingChange} = require('@adiwajshing/baileys'); // Boredom 😬 8 | 9 | const Language = require('../language'); 10 | const Lang = Language.getString('locate'); // Language supp. 😉 11 | 12 | 13 | Asena.addCommand({pattern: 'locate', fromMe: true, dontAddCommandList: true}, (async (message, match) => { 14 | 15 | var r_text = new Array (); 16 | r_text[0] = "degreesLatitude: 24.121231, degreesLongitude: 55.1121221"; // Actually, I don't know where is this place.. 17 | r_text[1] = "degreesLatitude: 8.838637, degreesLongitude: -13.721434"; // U too homie 18 | 19 | var i = Math.floor(2*Math.random()) // Random func. 🤪 20 | 21 | await message.sendMessage(`My Location! ${r_text[i]}`, MessageType.location); // It sends ur location. Cool tho 😱 22 | 23 | })); 24 | -------------------------------------------------------------------------------- /plugins/lydia.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | const Asena = require('../events'); 10 | const Config = require('../config'); 11 | const {MessageType} = require('@adiwajshing/baileys'); 12 | const {LydiaDB} = require('./sql/lydia'); 13 | const {LydiaAI} = require('coffeehouse'); 14 | 15 | const Language = require('../language'); 16 | const Lang = Language.getString('lydia'); 17 | 18 | Asena.addCommand({pattern: 'addlydia$', fromMe: true, desc: Lang.ADDLYDIA_DESC, dontAddCommandList: true}, (async (message, match) => { 19 | if (!message.reply_message) return await message.reply(Lang.NEED_REPLY); 20 | if (!Config.COFFEEHOUSE_API_KEY) return await message.reply(Lang.COFFEEHOUSE); 21 | var unix = Date.now() / 1000 | 0; 22 | 23 | var veriler = await LydiaDB.findAll(); 24 | var lydia = new LydiaAI(Config.COFFEEHOUSE_API_KEY); 25 | 26 | if (veriler.length < 1) { 27 | var session = await lydia.createSession(); 28 | await LydiaDB.create({session_id: session.id, expires: session.expires, users: message.reply_message.jid.split('@')[0]}); 29 | } else { 30 | if (unix > veriler[0].dataValues.expires) { 31 | var session = await lydia.createSession(); 32 | await veriler[0].update({session_id: session.id, expires: session.expires, users: veriler[0].dataValues.users + ',' + message.reply_message.jid.split('@')[0]}); 33 | } else { 34 | await veriler[0].update({users: veriler[0].dataValues.users + (veriler[0].dataValues.users != '' ? ',' : '') + message.reply_message.jid.split('@')[0]}); 35 | } 36 | } 37 | 38 | return await message.reply(Lang.ENABLED_LYDIA); 39 | })); 40 | 41 | Asena.addCommand({pattern: 'rmlydia$', fromMe: true, desc: Lang.RMLYDIA_DESC, dontAddCommandList: true}, (async (message, match) => { 42 | if (!message.reply_message) return await message.reply(Lang.NEED_REPLY); 43 | if (!Config.COFFEEHOUSE_API_KEY) return await message.reply(Lang.COFFEEHOUSE); 44 | var unix = Date.now() / 1000 | 0; 45 | 46 | var veriler = await LydiaDB.findAll(); 47 | var lydia = new LydiaAI(Config.COFFEEHOUSE_API_KEY); 48 | 49 | if (veriler.length < 1) { 50 | return await message.reply(Lang.ALREADY_EMPTY) 51 | } else { 52 | if (veriler[0].dataValues.users == '') return await message.reply(Lang.ALREADY_EMPTY) 53 | var users = veriler[0].dataValues.users.split(','); 54 | if (users.includes(message.reply_message.jid.split('@')[0])) { users = users.remove(message.reply_message.jid.split('@')[0]).join(','); } else { 55 | return await message.reply(Lang.NOT_ADDED); 56 | } 57 | 58 | if (unix > veriler[0].dataValues.expires) { 59 | var session = await lydia.createSession(); 60 | await veriler[0].update({'session_id': session.id, 'expires': session.expires, 'users': users}); 61 | } else { 62 | await veriler[0].update({'users': users}); 63 | } 64 | } 65 | 66 | return await message.reply(Lang.DISABLED); 67 | })); 68 | 69 | Asena.addCommand({on: 'text', fromMe: false, deleteCommand: false}, (async (message, match) => { 70 | if (Config.COFFEEHOUSE_API_KEY === false) return; 71 | var unix = Date.now() / 1000 | 0; 72 | 73 | var fromId; 74 | if (message.jid.includes('-')) { 75 | if (message.reply_message === false && message.mention === false) return; 76 | if (message.reply_message && (message.reply_message.jid.split('@')[0] != message.client.user.jid.split('@')[0])) return; 77 | if (message.mention !== false && message.mention.length >= 1 && (message.mention[0].split('@')[0] != message.client.user.jid.split('@')[0])) return; 78 | } 79 | 80 | if (message.data.participant) { fromId = message.data.participant.split('@')[0]; } else { fromId = message.jid.split('@')[0]; } 81 | var veriler = await LydiaDB.findAll(); 82 | var lydia = new LydiaAI(Config.COFFEEHOUSE_API_KEY); 83 | var session; 84 | 85 | if (veriler.length < 1) { 86 | return; 87 | } else { 88 | if (unix > veriler[0].dataValues.expires) { 89 | session = await lydia.createSession(); 90 | await veriler[0].update({session_id: session.id, expires: session.expires}); 91 | } else { 92 | session = await lydia.getSession(veriler[0].dataValues.session_id); 93 | } 94 | 95 | var isLydiaEnabled = false; 96 | if (veriler[0].users.includes(',')) { 97 | veriler[0].users.split(',').map((user) => { 98 | if (user == fromId) isLydiaEnabled = true; 99 | }); 100 | } else { 101 | if (veriler[0].users == fromId) isLydiaEnabled = true; 102 | } 103 | 104 | if (isLydiaEnabled) { 105 | await message.sendTyping(); 106 | 107 | await session.think_thought(message.message).then(async (data) => { 108 | 109 | await message.client.sendMessage(message.jid,data.output, MessageType.text, {quoted: message.data}); 110 | 111 | }) 112 | } 113 | } 114 | })); 115 | -------------------------------------------------------------------------------- /plugins/lyrics.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2021 Vai838. 2 | Licensed under the GPL-3.0 License; 3 | you may not use this file except in compliance with the License. 4 | WhatsAsena 5 | */ 6 | 7 | const Asena = require('../events'); 8 | const {MessageType} = require('@adiwajshing/baileys'); 9 | const got = require('got'); 10 | 11 | const Language = require('../language'); 12 | const Lang = Language.getString('weather'); 13 | 14 | Asena.addCommand({pattern: 'lyrics ?(.*)', fromMe: false, desc: Lang.LYRICS_DESC,dontAddCommandList: true}, async (message, match) => { 15 | if (match[1] === '') return await message.reply(Lang.NEED_SONG); 16 | const url = `https://api.lolhuman.xyz/api/lirik?apikey=7cd4d26836bbc3615812c7fa&query=${match[1]}`; 17 | try { 18 | const response = await got(url); 19 | const json = JSON.parse(response.body); 20 | if (response.statusCode === 200) return await message.client.sendMessage(message.jid, '*🎙️ ' + Lang.SONG +':* ```' + match[1] + '```\n\n' + 21 | /*'*🎧 ' + Lang.ALBUM +':* ```' + json.result.album + '```\n' + 22 | '*🔊 ' + Lang.TITLE +':* ```' + json.result.title + '```\n' + 23 | '*🎚️ ' + Lang.PUBLICATION +':* ```' + json.result.artist + '```\n' +*/ 24 | '*🎼 ' + Lang.SONGLI +':* ```' + json.result + '```\n' , MessageType.text); 25 | 26 | } catch { 27 | return await message.client.sendMessage(message.jid, Lang.NOT_FOUNDS, MessageType.text); 28 | } 29 | }); 30 | 31 | 32 | /*https://tobz-api.herokuapp.com/api/lirik?q=${match[1]}&apikey=BotWeA 33 | https://scrap.terhambar.com/lirik?word=*/ 34 | -------------------------------------------------------------------------------- /plugins/map.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2021 Vai838. 2 | Licensed under the GPL-3.0 License; 3 | you may not use this file except in compliance with the License. 4 | WhatsAsenaDuplicated 5 | 6 | this plugin works rarely only 7 | 8 | 9 | const Asena = require('../events'); 10 | const {MessageType, MessageOptions, Mimetype} = require('@adiwajshing/baileys'); 11 | const fs = require('fs'); 12 | const axios = require('axios'); 13 | const request = require('request'); 14 | const got = require("got"); 15 | 16 | const Language = require('../language'); 17 | const Lang = Language.getString('webss'); 18 | 19 | Asena.addCommand({pattern: 'map ?(.*)', fromMe: false, desc: Lang.MAP_DESC}, (async (message, match) => { 20 | 21 | if (match[1] === '') return await message.sendMessage(Lang.LİNK); 22 | 23 | var webimage = await axios.get(`https://mnazria.herokuapp.com/api/maps?search=${match[1]}`, { responseType: 'arraybuffer' }) 24 | 25 | await message.client.sendMessage(message.jid,Buffer.from(webimage.gambar.data), MessageType.image, {mimetype: Mimetype.jpg }) 26 | 27 | })); 28 | */ 29 | -------------------------------------------------------------------------------- /plugins/memes.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | Coded by @KursadHD 8 | */ 9 | 10 | const Asena = require('../events'); 11 | const {MessageType, Mimetype} = require('@adiwajshing/baileys'); 12 | const memeMaker = require('meme-maker') 13 | const fs = require('fs') 14 | const Language = require('../language'); 15 | const Lang = Language.getString('memes'); 16 | 17 | Asena.addCommand({pattern: 'meme ?(.*)', fromMe: false, desc: Lang.MEMES_DESC}, (async (message, match) => { 18 | if (message.reply_message === false) return await message.sendMessage(Lang.NEED_REPLY); 19 | var topText, bottomText; 20 | if (match[1].includes(';')) { 21 | var split = match[1].split(';'); 22 | topText = split[1]; 23 | bottomText = split[0]; 24 | } 25 | else { 26 | topText = match[1]; 27 | bottomText = ''; 28 | } 29 | 30 | var info = await message.reply(Lang.DOWNLOADING); 31 | 32 | var location = await message.client.downloadAndSaveMediaMessage({ 33 | key: { 34 | remoteJid: message.reply_message.jid, 35 | id: message.reply_message.id 36 | }, 37 | message: message.reply_message.data.quotedMessage 38 | }); 39 | 40 | memeMaker({ 41 | image: location, 42 | outfile: 'asena-meme.png', 43 | topText: topText, 44 | bottomText: bottomText, 45 | }, async function(err) { 46 | if(err) throw new Error(err) 47 | await message.client.sendMessage(message.jid, fs.readFileSync('asena-meme.png'), MessageType.image, {filename: 'asena-meme.png', mimetype: Mimetype.png}); 48 | await info.delete(); 49 | }); 50 | })); 51 | -------------------------------------------------------------------------------- /plugins/moddroid.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2021 Vai838. 2 | Licensed under the GPL-3.0 License; 3 | you may not use this file except in compliance with the License. 4 | WhatsAsenaDuplicated 5 | */ 6 | 7 | const Asena = require('../events'); 8 | const {MessageType} = require('@adiwajshing/baileys'); 9 | const got = require('got'); 10 | const Config = require('../config'); 11 | 12 | const Language = require('../language'); 13 | const Lang = Language.getString('weather'); 14 | 15 | Asena.addCommand({pattern: 'modd ?(.*)', fromMe: false, desc: Lang.MODD_DESC}, async (message, match) => { 16 | if (match[1] === '') return await message.reply(Lang.NEED_APPNAME); 17 | const url = `https://tobz-api.herokuapp.com/api/moddroid?q=${match[1]}&apikey=${Config.TOBZ_API_KEY}`; 18 | try { 19 | const response = await got(url); 20 | const json = JSON.parse(response.body); 21 | if (response.statusCode === 200) return await message.client.sendMessage(message.jid, 22 | '*🏷️ ' + Lang.NAMEY +'* ```' + json.result[0].title + '```\n\n' + 23 | '*🅿️ ' + Lang.PUBLISHER +':* ```' + json.result[0].publisher+ '```\n\n' + 24 | '*📝 ' + Lang.MODINFO +':* ```' + json.result[0].mod_info + '```\n\n' + 25 | '*📦 ' + Lang.SIZE +'* ```' + json.result[0].size + '```\n\n' + 26 | '*⬇️ ' + Lang.DOWNLOAD +':* ```' + json.result[0].download + '```\n', MessageType.text); 27 | } catch { 28 | return await message.client.sendMessage(message.jid, Lang.NOT_FOUNDMD, MessageType.text); 29 | } 30 | }); 31 | 32 | /* 33 | Asena.addCommand({pattern: 'apkp ?(.*)', fromMe: false, desc: "Mod apk from apkpure"}, async (message, match) => { 34 | if (match[1] === '') return await message.reply(Lang.NEED_APPNAME); 35 | const url = `https://docs-jojo.herokuapp.com/api/apk-pure?q=${match[1]}`; 36 | try { 37 | const response = await got(url); 38 | const json = JSON.parse(response.body); 39 | if (response.statusCode === 200) return await message.client.sendMessage(message.jid, 40 | '*🏷️ ' + Lang.NAMEY +'* ```' + match[1] + '```\n\n' + 41 | '*📝 ' + Lang.MODINFO +':* ```' + json.result[0].version + '```\n\n' + 42 | '*📦 ' + Lang.SIZE +'* ```' + json.result[0].filesize + '```\n\n' + 43 | '*⬇️ ' + Lang.DOWNLOAD +':* ```' + json.result[0].url + '```\n', MessageType.text); 44 | } catch { 45 | return await message.client.sendMessage(message.jid, "oops ;)", MessageType.text); 46 | } 47 | }); 48 | 49 | Asena.addCommand({pattern: 'apkp ?(.*)', fromMe: false, desc: "Mod apk from apkpure"}, async (message, match) => { 50 | const url = `https://leyscoders-api.herokuapp.com/api/apkpure?q=${match[1]}&apikey=VFCQVEWL`; 51 | try { 52 | const response = await got(url); 53 | const json = JSON.parse(response.body); 54 | if (response.statusCode === 200) return await message.client.sendMessage(message.jid, 55 | '*🏷️ ' + Lang.NAMEY +'* ```' + match[1] + '```\n\n' + 56 | '*⬇️ ' + Lang.DOWNLOAD +':* ```' + json.result[0].url + '```\n', MessageType.text); 57 | } catch { 58 | return await message.client.sendMessage(message.jid, Lang.NOT_FOUNDMD, MessageType.text); 59 | } 60 | }); 61 | 62 | 63 | */ 64 | 65 | -------------------------------------------------------------------------------- /plugins/mv.js: -------------------------------------------------------------------------------- 1 | const Asena = require('../events'); 2 | const { MessageType } = require('@adiwajshing/baileys'); 3 | const got = require('got'); 4 | //LyFE 5 | Asena.addCommand({ pattern: 'movie ?(.*)', fromMe: false, desc: "Shows movie info." }, (async (message, match) => { 6 | if (match[1] === '') return await message.client.sendMessage(message.jid, '```Give me a name.```', MessageType.text, { quoted: message.data }); 7 | let url = `http://www.omdbapi.com/?apikey=742b2d09&t=${match[1]}&plot=full` 8 | const response = await got(url); 9 | const json = JSON.parse(response.body); 10 | if (json.Response != 'True') return await message.client.sendMessage(message.jid, '*Not found.*', MessageType.text, { quoted: message.data }); 11 | let msg = '```'; 12 | msg += 'Title : ' + json.Title + '\n\n'; 13 | msg += 'Year : ' + json.Year + '\n\n'; 14 | msg += 'Rated : ' + json.Rated + '\n\n'; 15 | msg += 'Released : ' + json.Released + '\n\n'; 16 | msg += 'Runtime : ' + json.Runtime + '\n\n'; 17 | msg += 'Genre : ' + json.Genre + '\n\n'; 18 | msg += 'Director : ' + json.Director + '\n\n'; 19 | msg += 'Writer : ' + json.Writer + '\n\n'; 20 | msg += 'Actors : ' + json.Actors + '\n\n'; 21 | msg += 'Plot : ' + json.Plot + '\n\n'; 22 | msg += 'Language : ' + json.Language + '\n\n'; 23 | msg += 'Country : ' + json.Country + '\n\n'; 24 | msg += 'Awards : ' + json.Awards + '\n\n'; 25 | msg += 'BoxOffice : ' + json.BoxOffice + '\n\n'; 26 | msg += 'Production : ' + json.Production + '\n\n'; 27 | msg += 'imdbRating : ' + json.imdbRating + '\n\n'; 28 | msg += 'imdbVotes : ' + json.imdbVotes + '```'; 29 | await message.client.sendMessage(message.jid, msg, MessageType.text, { quoted: message.data }); 30 | })); 31 | -------------------------------------------------------------------------------- /plugins/neko.js: -------------------------------------------------------------------------------- 1 | /* 2 | Nekobin for WhatsAsena - W4RR10R 3 | 4 | Licensed under the GPL-3.0 License; 5 | you may not use this file except in compliance with the License. 6 | 7 | WhatsAsena - Yusuf Usta 8 | */ 9 | 10 | const Asena = require('../events'); 11 | const {MessageType} = require('@adiwajshing/baileys'); 12 | const got = require('got'); 13 | 14 | const Language = require('../language'); 15 | const Lang = Language.getString('nekobin'); 16 | 17 | 18 | Asena.addCommand({pattern: 'neko', fromMe: false, desc: Lang.NEKO_DESC}, (async (message, match) => { 19 | if (!message.reply_message) return await message.sendMessage(Lang.NEED_REPLY); 20 | if (!message.reply_message.text) return await message.sendMessage(Lang.MUST_TEXT); 21 | let base_URI = "https://nekobin.com/api/documents"; 22 | try { 23 | const response = await got.post(base_URI, {json : {content : message.reply_message.text}}); 24 | json = JSON.parse(response.body); 25 | neko_url = 'https://nekobin.com/' + json.result.key; 26 | await message.reply(neko_url); 27 | } catch (err) { 28 | await message.reply(err.message, MessageType.text); 29 | console.log(err.message); 30 | } 31 | 32 | })); 33 | -------------------------------------------------------------------------------- /plugins/news.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2021 Vai838. 2 | Licensed under the GPL-3.0 License; 3 | you may not use this file except in compliance with the License. 4 | WhatsAsenaDuplicated 5 | */ 6 | 7 | const Asena = require('../events'); 8 | const {MessageType} = require('@adiwajshing/baileys'); 9 | const got = require('got'); 10 | 11 | const Language = require('../language'); 12 | const Lang = Language.getString('weather'); 13 | 14 | Asena.addCommand({pattern: 'news ?(.*)', fromMe: false, desc: Lang.NEWS_DESC}, async (message, match) => { 15 | if (match[1] === '') return await message.reply(Lang.NEED_CATEGORY); 16 | const url = `https://inshortsapi.vercel.app/news?category=${match[1]}`; 17 | try { 18 | const response = await got(url); 19 | const json = JSON.parse(response.body); 20 | if (response.statusCode === 200) return await message.client.sendMessage(message.jid, '*📁 ' + Lang.CATEGORY +':* ```' + match[1] + '```\n\n\n' + 21 | '*🗞️ ' + Lang.NEWST +':* ```' + json.data[0].title + '```\n' + 22 | '*📰 ' + Lang.NEWS +':* ```' + json.data[0].content + '```\n' + 23 | '*🔗 ' + Lang.RMLINK +':* ```' + json.data[0].readMoreUrl + '```\n\n' + 24 | '*🗞️ ' + Lang.NEWST +':* ```' + json.data[1].title + '```\n' + 25 | '*📰 ' + Lang.NEWS +':* ```' + json.data[1].content + '```\n' + 26 | '*🔗 ' + Lang.RMLINK +':* ```' + json.data[1].readMoreUrl + '```\n\n' + 27 | '*🗞️ ' + Lang.NEWST +':* ```' + json.data[2].title + '```\n' + 28 | '*📰 ' + Lang.NEWS +':* ```' + json.data[2].content + '```\n' + 29 | '*🔗 ' + Lang.RMLINK +':* ```' + json.data[2].readMoreUrl + '```\n\n' + 30 | '*🗞️ ' + Lang.NEWST +':* ```' + json.data[3].title + '```\n' + 31 | '*📰 ' + Lang.NEWS +':* ```' + json.data[3].content + '```\n' + 32 | '*🔗 ' + Lang.RMLINK +':* ```' + json.data[3].readMoreUrl + '```\n\n' + 33 | '*🗞️ ' + Lang.NEWST +':* ```' + json.data[4].title + '```\n' + 34 | '*📰 ' + Lang.NEWS +':* ```' + json.data[4].content + '```\n' + 35 | '*🔗 ' + Lang.RMLINK +':* ```' + json.data[4].readMoreUrl + '```\n\n'+ 36 | '*🗞️ ' + Lang.NEWST +':* ```' + json.data[5].title + '```\n' + 37 | '*📰 ' + Lang.NEWS +':* ```' + json.data[5].content + '```\n' + 38 | '*🔗 ' + Lang.RMLINK +':* ```' + json.data[5].readMoreUrl + '```\n\n'+ 39 | '*🗞️ ' + Lang.NEWST +':* ```' + json.data[6].title + '```\n' + 40 | '*📰 ' + Lang.NEWS +':* ```' + json.data[6].content + '```\n' + 41 | '*🔗 ' + Lang.RMLINK +':* ```' + json.data[6].readMoreUrl + '```\n\n'+ 42 | '*🗞️ ' + Lang.NEWST +':* ```' + json.data[7].title + '```\n' + 43 | '*📰 ' + Lang.NEWS +':* ```' + json.data[7].content + '```\n' + 44 | '*🔗 ' + Lang.RMLINK +':* ```' + json.data[7].readMoreUrl + '```\n\n'+ 45 | '*🗞️ ' + Lang.NEWST +':* ```' + json.data[8].title + '```\n' + 46 | '*📰 ' + Lang.NEWS +':* ```' + json.data[8].content + '```\n' + 47 | '*🔗 ' + Lang.RMLINK +':* ```' + json.data[8].readMoreUrl + '```\n\n'+ 48 | '*🗞️ ' + Lang.NEWST +':* ```' + json.data[9].title + '```\n' + 49 | '*📰 ' + Lang.NEWS +':* ```' + json.data[9].content + '```\n' + 50 | '*🔗 ' + Lang.RMLINK +':* ```' + json.data[9].readMoreUrl + '```\n\n'+ 51 | '*🗞️ ' + Lang.NEWST +':* ```' + json.data[10].title + '```\n' + 52 | '*📰 ' + Lang.NEWS +':* ```' + json.data[10].content + '```\n' + 53 | '*🔗 ' + Lang.RMLINK +':* ```' + json.data[10].readMoreUrl + '```\n\n', MessageType.text); 54 | } catch { 55 | return await message.client.sendMessage(message.jid, Lang.NOT_FOUNDC, MessageType.text); 56 | } 57 | }); 58 | -------------------------------------------------------------------------------- /plugins/notes.js: -------------------------------------------------------------------------------- 1 | /* 2 | # Copyright (C) 2020 MuhammedKpln. 3 | # 4 | # WhatsAsena is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU General Public License as published by 6 | # the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # WhatsAsena is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with this program. If not, see . 16 | # 17 | */ 18 | 19 | const fs = require('fs/promises') 20 | const path = require('path') 21 | const { MessageType } = require('@adiwajshing/baileys') 22 | const Asena = require('../events'); 23 | const { successfullMessage, errorMessage, infoMessage } = require('../helpers'); 24 | const NotesDB = require('./sql/notes'); 25 | const Language = require('../language') 26 | const Lang = Language.getString('notes') 27 | 28 | Asena.addCommand({ pattern: 'notes', fromMe: false, desc: Lang.NOTES_USAGE }, async (message, match) => { 29 | 30 | 31 | const _notes = await NotesDB.getNotes() 32 | const notes = [] 33 | _notes.map(note => { 34 | if (!note.note.includes('IMG;;;')) { 35 | notes.push('📜' + note.note) 36 | } 37 | }) 38 | 39 | if (notes.length < 1) { 40 | return await message.sendMessage(infoMessage(Lang.NO_SAVED)) 41 | } 42 | 43 | await message.sendMessage(infoMessage(Lang.SAVED)) 44 | 45 | await message.sendMessage(notes.join('\n\n')) 46 | _notes.filter(note => note.note.includes('IMG;;;')).forEach(async (note) => { 47 | const imageName = note.note.replace('IMG;;;', '') 48 | const image = await fs.readFile(path.resolve('media', imageName)) 49 | await message.sendMessage(image, MessageType.image) 50 | }) 51 | 52 | 53 | }) 54 | 55 | 56 | 57 | Asena.addCommand({ pattern: 'save ?(.*)', fromMe: true, desc: Lang.SAVE_USAGE }, async (message, match) => { 58 | 59 | const userNote = match[1] 60 | 61 | if (!userNote && !message.reply_message) { 62 | await message.sendMessage(errorMessage(Lang.REPLY)) 63 | 64 | return 65 | } 66 | 67 | if (userNote) { 68 | await NotesDB.saveNote(userNote) 69 | await message.sendMessage(successfullMessage(Lang.SUCCESSFULLY_ADDED), MessageType.text) 70 | 71 | return 72 | 73 | } else if (!userNote && message.reply_message) { 74 | if (!message.reply_message.video) { 75 | 76 | if (message.reply_message.image) { 77 | const savedFileName = await message.client.downloadAndSaveMediaMessage({ 78 | key: { 79 | remoteJid: message.reply_message.jid, 80 | id: message.reply_message.id 81 | }, 82 | message: message.reply_message.data.quotedMessage 83 | }) 84 | 85 | const randomFileName = savedFileName.split('.')[0] + Math.floor(Math.random() * 50) + path.extname(savedFileName) 86 | await fs.copyFile(savedFileName, path.resolve('media', randomFileName)) 87 | await NotesDB.saveNote("IMG;;;" + randomFileName) 88 | await message.sendMessage(successfullMessage(Lang.SUCCESSFULLY_ADDED), MessageType.text) 89 | 90 | 91 | } 92 | 93 | await NotesDB.saveNote(message.reply_message.text) 94 | await message.sendMessage(successfullMessage(Lang.SUCCESSFULLY_ADDED), MessageType.text) 95 | 96 | return 97 | } 98 | } else { 99 | await message.sendMessage(errorMessage(Lang.UNSUCCESSFUL)) 100 | 101 | return 102 | } 103 | }) 104 | 105 | Asena.addCommand({ pattern: 'deleteNotes', fromMe: true, desc: Lang.DELETE_USAGE }, async (message, match) => { 106 | 107 | await NotesDB.deleteAllNotes() 108 | 109 | const mediaFolder = await fs.readdir(path.resolve('media')) 110 | 111 | mediaFolder.forEach(async (file) => { 112 | await fs.unlink(path.resolve('media', file)) 113 | }) 114 | 115 | return await message.sendMessage(successfullMessage(Lang.SUCCESSFULLY_DELETED)) 116 | }) 117 | -------------------------------------------------------------------------------- /plugins/ocr.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | Thanks to github/@justinthoms for base and helps. 8 | */ 9 | 10 | const Asena = require('../events'); 11 | const Config = require('../config'); 12 | const {MessageType} = require('@adiwajshing/baileys'); 13 | const tesseract = require("node-tesseract-ocr") 14 | const langs = require('langs'); 15 | const Language = require('../language'); 16 | const Lang = Language.getString('ocr'); 17 | 18 | Asena.addCommand({pattern: 'ocr ?(.*)', fromMe: false, desc: Lang.OCR_DESC}, (async (message, match) => { 19 | if (message.reply_message === false) return await message.sendMessage(Lang.NEED_REPLY); 20 | var info = await message.reply(Lang.DOWNLOADING); 21 | var location = await message.client.downloadAndSaveMediaMessage({ 22 | key: { 23 | remoteJid: message.reply_message.jid, 24 | id: message.reply_message.id 25 | }, 26 | message: message.reply_message.data.quotedMessage 27 | }); 28 | 29 | var dil; 30 | if (match[1] !== '') { 31 | dil = langs.where("1", match[1]); 32 | } else { 33 | dil = langs.where("1", Config.LANG.toLowerCase()); 34 | } 35 | 36 | try { 37 | var result = await tesseract.recognize(location, { 38 | lang: dil[2] 39 | }); 40 | } catch (e) { 41 | return await message.reply(Lang.ERROR.format(e)); 42 | } 43 | 44 | await info.delete(); 45 | if ( result === ' ' || result.length == 1 ) { 46 | return await message.reply(Lang.ERROR.format(' Empty text')); 47 | } 48 | 49 | return await message.reply(Lang.RESULT.format(dil[2], result)); 50 | })); 51 | -------------------------------------------------------------------------------- /plugins/profile.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | const Asena = require('../events'); 10 | const {MessageType} = require('@adiwajshing/baileys'); 11 | 12 | const fs = require('fs'); 13 | const Language = require('../language'); 14 | const Lang = Language.getString('profile'); 15 | 16 | Asena.addCommand({pattern: 'kickme', fromMe: true, desc: Lang.KICKME_DESC, onlyGroup: true, dontAddCommandList: true}, (async (message, match) => { 17 | await message.client.sendMessage(message.jid,Lang.KICKME,MessageType.text); 18 | await message.client.groupLeave(message.jid); 19 | })); 20 | 21 | Asena.addCommand({pattern: 'pp', fromMe: true, desc: Lang.PP_DESC, dontAddCommandList: true}, (async (message, match) => { 22 | if (message.reply_message === false || message.reply_message.image === false) return await message.client.sendMessage(message.jid,Lang.NEED_PHOTO); 23 | 24 | var load = await message.client.sendMessage(message.jid,Lang.PPING,MessageType.text); 25 | var location = await message.client.downloadAndSaveMediaMessage({ 26 | key: { 27 | remoteJid: message.reply_message.jid, 28 | id: message.reply_message.id 29 | }, 30 | message: message.reply_message.data.quotedMessage 31 | }); 32 | 33 | await message.client.updateProfilePicture(message.client.user.jid, fs.readFileSync(location)); 34 | await load.delete(); 35 | })); 36 | 37 | Asena.addCommand({pattern: 'block ?(.*)', fromMe: true, desc: Lang.BLOCK_DESC, dontAddCommandList: true}, (async (message, match) => { 38 | if (message.reply_message !== false) { 39 | await message.client.sendMessage(message.jid, '@' + message.reply_message.jid.split('@')[0] + '```, ' + Lang.BLOCKED + '!```', MessageType.text, { 40 | quotedMessage: message.reply_message.data, contextInfo: {mentionedJid: [message.reply_message.jid.replace('c.us', 's.whatsapp.net')]} 41 | }); 42 | await message.client.blockUser(message.reply_message.jid, "add"); 43 | } else if (message.mention !== false) { 44 | message.mention.map(async user => { 45 | await message.client.sendMessage(message.jid, '@' + user.split('@')[0] + '```, ' + Lang.BLOCKED + '!```', MessageType.text, { 46 | previewType: 0, contextInfo: {mentionedJid: [user.replace('c.us', 's.whatsapp.net')]} 47 | }); 48 | await message.client.blockUser(user, "add"); 49 | }); 50 | } else if (!message.jid.includes('-')) { 51 | await message.client.sendMessage(message.jid, '*' + Lang.BLOCKED_UPPER + '*', MessageType.text); 52 | await message.client.blockUser(message.jid, "add"); 53 | } else { 54 | await message.client.sendMessage(message.jid, '*' + Lang.NEED_USER + '*', MessageType.text); 55 | } 56 | })); 57 | 58 | Asena.addCommand({pattern: 'unblock ?(.*)', fromMe: true, desc: Lang.UNBLOCK_DESC, dontAddCommandList: true}, (async (message, match) => { 59 | if (message.reply_message !== false) { 60 | await message.client.blockUser(message.reply_message.jid, "remove"); 61 | await message.client.sendMessage(message.jid, '@' + message.reply_message.jid.split('@')[0] + '```, ' + Lang.UNBLOCKED + '!```', MessageType.text, { 62 | quotedMessage: message.reply_message.data, contextInfo: {mentionedJid: [message.reply_message.jid.replace('c.us', 's.whatsapp.net')]} 63 | }); 64 | } else if (message.mention !== false) { 65 | message.mention.map(async user => { 66 | await message.client.blockUser(user, "remove"); 67 | await message.client.sendMessage(message.jid, '@' + user.split('@')[0] + '```, ' + Lang.UNBLOCKED + '!```', MessageType.text, { 68 | contextInfo: {mentionedJid: [user.replace('c.us', 's.whatsapp.net')]} 69 | }); 70 | }); 71 | } else if (!message.jid.includes('-')) { 72 | await message.client.blockUser(message.jid, "remove"); 73 | await message.client.sendMessage(message.jid, '*' + Lang.UNBLOCKED_UPPER + '*', MessageType.text,); 74 | } else { 75 | await message.client.sendMessage(message.jid, '*' + Lang.NEED_USER + '*', MessageType.text,); 76 | } 77 | })); 78 | 79 | Asena.addCommand({pattern: 'jid ?(.*)', fromMe: true, desc: Lang.JID_DESC, dontAddCommandList: true}, (async (message, match) => { 80 | if (message.reply_message !== false) { 81 | await message.client.sendMessage(message.jid, Lang.JID.format(message.reply_message.jid.split('@')[0], message.reply_message.jid), MessageType.text, { 82 | quotedMessage: message.reply_message.data, contextInfo: {mentionedJid: [message.reply_message.jid.replace('c.us', 's.whatsapp.net')]} 83 | }); 84 | } else if (message.mention !== false) { 85 | message.mention.map(async user => { 86 | await message.client.sendMessage(message.jid, Lang.JID.format(user.split('@')[0], user), MessageType.text, { 87 | contextInfo: {mentionedJid: [user.replace('c.us', 's.whatsapp.net')]} 88 | }); 89 | }); 90 | } else { 91 | await message.client.sendMessage(message.jid, Lang.JID_CHAT.format(message.jid), MessageType.text); 92 | } 93 | })); 94 | -------------------------------------------------------------------------------- /plugins/qrgenerator.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2021 Vai838. 2 | Licensed under the GPL-3.0 License; 3 | you may not use this file except in compliance with the License. 4 | WhatsAsenaDuplicated 5 | */ 6 | 7 | const Asena = require('../events'); 8 | const {MessageType, MessageOptions, Mimetype} = require('@adiwajshing/baileys'); 9 | const fs = require('fs'); 10 | const axios = require('axios'); 11 | const request = require('request'); 12 | const got = require("got"); 13 | 14 | const Language = require('../language'); 15 | const Lang = Language.getString('qrgenerator'); 16 | 17 | Asena.addCommand({pattern: 'qr ?(.*)', fromMe: false, desc: Lang.QR_DESC}, (async (message, match) => { 18 | 19 | if (match[1] === '') return await message.sendMessage(Lang.TEXT); 20 | 21 | var webimage = await axios.get(`https://api.qrserver.com/v1/create-qr-code/?size=500x500&data=${match[1].replace(/#/g, '\n')} `, { responseType: 'arraybuffer' }) 22 | 23 | await message.sendMessage(Buffer.from(webimage.data), MessageType.image, {mimetype: Mimetype.jpg, caption: 'Coded by Vai838',quoted: message.data,thumbnail: "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"}) 24 | 25 | })); 26 | -------------------------------------------------------------------------------- /plugins/quotes.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2021 Vai838. 2 | Licensed under the GPL-3.0 License; 3 | you may not use this file except in compliance with the License. 4 | WhatsAsenaDuplicated 5 | */ 6 | 7 | const Asena = require('../events'); 8 | const {MessageType} = require('@adiwajshing/baileys'); 9 | const got = require('got'); 10 | 11 | const Language = require('../language'); 12 | const Lang = Language.getString('weather'); 13 | 14 | 15 | 16 | 17 | 18 | 19 | Asena.addCommand({pattern: 'quote ?(.*)', fromMe: false, desc: Lang.QUOTE_DESC}, async (message, match) => { 20 | if (match[1] === 'xx') return await message.reply(Lang.NEED_LOCATIONA); 21 | const url = `https://api.quotable.io/random`; 22 | try { 23 | const response = await got(url); 24 | const json = JSON.parse(response.body); 25 | if (response.statusCode === 200) return await message.client.sendMessage(message.jid, '*📌 ' + Lang.QUOTE +'* ```' + json.content + '```\n\n' + 26 | '*✒️' + Lang.AUTHOR +'* ```' + json.author+ '```\n', MessageType.text); 27 | } catch { 28 | return await message.client.sendMessage(message.jid, Lang.NOT_FOUNDA, MessageType.text); 29 | } 30 | }); 31 | 32 | 33 | Asena.addCommand({pattern: 'pquote ?(.*)', fromMe: true, dontAddCommandList: true}, async (message, match) => { 34 | if (match[1] === 'xx') return await message.reply(Lang.NEED_LOCATIONA); 35 | const url = `https://api.quotable.io/random`; 36 | try { 37 | const response = await got(url); 38 | const json = JSON.parse(response.body); 39 | if (response.statusCode === 200) return await message.client.sendMessage(message.jid, '*📌 ' + Lang.QUOTE +'* ```' + json.content + '```\n\n' + 40 | '*✒️' + Lang.AUTHOR +'* ```' + json.author+ '```\n', MessageType.text); 41 | } catch { 42 | return await message.client.sendMessage(message.jid, Lang.NOT_FOUNDA, MessageType.text); 43 | } 44 | }); 45 | 46 | -------------------------------------------------------------------------------- /plugins/removebg.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | const Asena = require('../events'); 10 | const {MessageType, Mimetype} = require('@adiwajshing/baileys'); 11 | const Config = require('../config'); 12 | const fs = require('fs'); 13 | const got = require('got'); 14 | const FormData = require('form-data'); 15 | const stream = require('stream'); 16 | const {promisify} = require('util'); 17 | 18 | const pipeline = promisify(stream.pipeline); 19 | 20 | const Language = require('../language'); 21 | const Lang = Language.getString('removebg'); 22 | 23 | Asena.addCommand({pattern: 'removebg ?(.*)', fromMe: false, desc: Lang.REMOVEBG_DESC}, (async (message, match) => { 24 | if (message.reply_message === false || message.reply_message.image === false) return await message.client.sendMessage(message.jid,Lang.NEED_PHOTO,MessageType.text); 25 | if (Config.RBG_API_KEY === false) return await message.client.sendMessage(message.jid,Lang.NO_API_KEY,MessageType.text); 26 | 27 | var load = await message.reply(Lang.RBGING); 28 | var location = await message.client.downloadAndSaveMediaMessage({ 29 | key: { 30 | remoteJid: message.reply_message.jid, 31 | id: message.reply_message.id 32 | }, 33 | message: message.reply_message.data.quotedMessage 34 | }); 35 | 36 | 37 | 38 | 39 | Asena.addCommand({pattern: 'premovebg ?(.*)', fromMe: true, dontAddCommandList: true}, (async (message, match) => { 40 | if (message.reply_message === false || message.reply_message.image === false) return await message.client.sendMessage(message.jid,Lang.NEED_PHOTO,MessageType.text); 41 | if (Config.RBG_API_KEY === false) return await message.client.sendMessage(message.jid,Lang.NO_API_KEY,MessageType.text); 42 | 43 | var load = await message.reply(Lang.RBGING); 44 | var location = await message.client.downloadAndSaveMediaMessage({ 45 | key: { 46 | remoteJid: message.reply_message.jid, 47 | id: message.reply_message.id 48 | }, 49 | message: message.reply_message.data.quotedMessage 50 | }); 51 | 52 | var form = new FormData(); 53 | form.append('image_file', fs.createReadStream(location)); 54 | form.append('size', 'auto'); 55 | 56 | var rbg = await got.stream.post('https://api.remove.bg/v1.0/removebg', { 57 | body: form, 58 | headers: { 59 | 'X-Api-Key': Config.RBG_API_KEY 60 | } 61 | }); 62 | 63 | await pipeline( 64 | rbg, 65 | fs.createWriteStream('rbg.png') 66 | ); 67 | await message.client.sendMessage(message.jid,fs.readFileSync('rbg.png'), MessageType.image, {filename: 'WhatsAsena.png', mimetype: Mimetype.png}); 68 | await message.client.sendMessage(message.jid,fs.readFileSync('rbg.png'), MessageType.document, {filename: 'WhatsAsena.png', mimetype: Mimetype.png}); 69 | await load.delete(); 70 | })); 71 | 72 | 73 | 74 | 75 | var form = new FormData(); 76 | form.append('image_file', fs.createReadStream(location)); 77 | form.append('size', 'auto'); 78 | 79 | var rbg = await got.stream.post('https://api.remove.bg/v1.0/removebg', { 80 | body: form, 81 | headers: { 82 | 'X-Api-Key': Config.RBG_API_KEY 83 | } 84 | }); 85 | 86 | await pipeline( 87 | rbg, 88 | fs.createWriteStream('rbg.png') 89 | ); 90 | await message.client.sendMessage(message.jid,fs.readFileSync('rbg.png'), MessageType.image, {filename: 'WhatsAsena.png', mimetype: Mimetype.png}); 91 | await message.client.sendMessage(message.jid,fs.readFileSync('rbg.png'), MessageType.document, {filename: 'WhatsAsena.png', mimetype: Mimetype.png}); 92 | await load.delete(); 93 | })); 94 | -------------------------------------------------------------------------------- /plugins/screenshot.js: -------------------------------------------------------------------------------- 1 | /* Codded by @phaticusthiccy 2 | Telegram: t.me/phaticusthiccy 3 | Instagram: www.instagram.com/kyrie.baran 4 | */ 5 | 6 | const Asena = require('../events'); 7 | const {MessageType, MessageOptions, Mimetype} = require('@adiwajshing/baileys'); 8 | const fs = require('fs'); 9 | const axios = require('axios'); 10 | const request = require('request'); 11 | const got = require("got"); 12 | const Config = require('../config'); 13 | const Language = require('../language'); 14 | const Lang = Language.getString('webss'); 15 | 16 | Asena.addCommand({pattern: 'ss ?(.*)', fromMe: false, desc: Lang.SS_DESC}, (async (message, match) => { 17 | 18 | if (match[1] === '') return await message.sendMessage(Lang.LİNK); 19 | 20 | var webimage = await axios.get(`https://screenshotapi.net/api/v1/screenshot?url=${match[1]}&output=image&full_page=true`, { responseType: 'arraybuffer' }) 21 | 22 | await message.sendMessage(Buffer.from(webimage.data), MessageType.image, {mimetype: Mimetype.jpg,quoted:message.data}) 23 | 24 | })); 25 | 26 | Asena.addCommand({pattern: 'pss ?(.*)', fromMe: true, dontAddCommandList: true }, (async (message, match) => { 27 | 28 | if (match[1] === '') return await message.sendMessage(Lang.LİNK); 29 | 30 | var webimage = await axios.get(`https://screenshotapi.net/api/v1/screenshot?url=${match[1]}&output=image&full_page=true`, { responseType: 'arraybuffer' }) 31 | 32 | await message.sendMessage(Buffer.from(webimage.data), MessageType.image, {mimetype: Mimetype.jpg}) 33 | 34 | })); 35 | 36 | 37 | 38 | Asena.addCommand({pattern: 'spdf ?(.*)', fromMe: true, desc:"Converts a site into pdf" }, (async (message, match) => { 39 | 40 | if (match[1] === '') return await message.sendMessage(Lang.LİNK); 41 | 42 | var webimage = await axios.get(` 43 | https://api.html2pdf.app/v1/generate?url=${match[1]}&apiKey=${Config.PDF_API_KEY}`, { responseType: 'arraybuffer' }) 44 | 45 | await message.sendMessage(Buffer.from(webimage.data), MessageType.document, {mimetype: Mimetype.pdf}) 46 | 47 | })); 48 | 49 | 50 | Asena.addCommand({pattern: 'emoji ?(.*)', fromMe: false, dontAddCommandList: true}, (async (message, match) => { 51 | 52 | if (match[1] === '') return await message.sendMessage(Lang.LİNK); 53 | 54 | var webimage = await axios.get(`https://docs-jojo.herokuapp.com/api/emoji2png?emoji=${match[1]}&type=whatsapp`, { responseType: 'arraybuffer' }) 55 | 56 | await message.sendMessage(Buffer.from(webimage.data), MessageType.image, {mimetype: Mimetype.png,quoted:message.data}) 57 | 58 | })); 59 | 60 | -------------------------------------------------------------------------------- /plugins/simsimih.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2021 Vai838. 2 | Licensed under the GPL-3.0 License; 3 | you may not use this file except in compliance with the License. 4 | WhatsAsenaDuplicated 5 | */ 6 | 7 | const Asena = require('../events'); 8 | const {MessageType} = require('@adiwajshing/baileys'); 9 | const got = require('got'); 10 | 11 | const Language = require('../language'); 12 | const Lang = Language.getString('weather'); 13 | 14 | Asena.addCommand({pattern: 'bot ?(.*)', fromMe: false, desc: Lang.BOT_DESC}, async (message, match) => { 15 | if (match[1] === 'xx') return await message.reply(Lang.NEED_LOCATIONA); 16 | const url = `https://api.simsimi.net/v1/?text=${match[1]}&lang=en&cf=true`; 17 | try { 18 | const response = await got(url); 19 | const json = JSON.parse(response.body); 20 | if (response.statusCode === 200) return await message.client.sendMessage(message.jid, '\n*🤖 ' + Lang.BOT +'* ```' + json.messages[0].response + '```\n\n' , MessageType.text,{quoted: message.data}); 21 | } catch { 22 | return await message.client.sendMessage(message.jid, Lang.NOT_FOUNDAC, MessageType.text); 23 | } 24 | }); 25 | 26 | -------------------------------------------------------------------------------- /plugins/sql/filters.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | const config = require('../../config'); 10 | const { DataTypes } = require('sequelize'); 11 | 12 | const FiltersDB = config.DATABASE.define('filter', { 13 | chat: { 14 | type: DataTypes.STRING, 15 | allowNull: false 16 | }, 17 | pattern: { 18 | type: DataTypes.TEXT, 19 | allowNull: false 20 | }, 21 | text: { 22 | type: DataTypes.TEXT, 23 | allowNull: false 24 | }, 25 | regex: { 26 | type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false 27 | } 28 | }); 29 | 30 | async function getFilter(jid = null, filter = null) { 31 | var Wher = {chat: jid}; 32 | if (filter !== null) Wher.push({pattern: filter}); 33 | var Msg = await FiltersDB.findAll({ 34 | where: Wher 35 | }); 36 | 37 | if (Msg.length < 1) { 38 | return false; 39 | } else { 40 | return Msg; 41 | } 42 | } 43 | 44 | 45 | async function setFilter(jid = null, filter = null, tex = null, regx = false) { 46 | var Msg = await FiltersDB.findAll({ 47 | where: { 48 | chat: jid, 49 | pattern: filter 50 | } 51 | }); 52 | 53 | if (Msg.length < 1) { 54 | return await FiltersDB.create({ chat: jid, pattern: filter, text: tex, regex: regx }); 55 | } else { 56 | return await Msg[0].update({ chat: jid, pattern: filter, text: tex, regex: regx }); 57 | } 58 | } 59 | 60 | async function deleteFilter(jid = null, filter) { 61 | var Msg = await FiltersDB.findAll({ 62 | where: { 63 | chat: jid, 64 | pattern: filter 65 | } 66 | }); 67 | if (Msg.length < 1) { 68 | return false; 69 | } else { 70 | return await Msg[0].destroy(); 71 | } 72 | } 73 | 74 | module.exports = { 75 | FiltersDB: FiltersDB, 76 | getFilter: getFilter, 77 | setFilter: setFilter, 78 | deleteFilter: deleteFilter 79 | }; -------------------------------------------------------------------------------- /plugins/sql/greetings.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | const config = require('../../config'); 10 | const { DataTypes } = require('sequelize'); 11 | 12 | const GreetingsDB = config.DATABASE.define('Greeting', { 13 | chat: { 14 | type: DataTypes.STRING, 15 | allowNull: false 16 | }, 17 | type: { 18 | type: DataTypes.STRING, 19 | allowNull: false 20 | }, 21 | message: { 22 | type: DataTypes.TEXT, 23 | allowNull: false 24 | } 25 | }); 26 | 27 | async function getMessage(jid = null, tip = 'welcome') { 28 | var Msg = await GreetingsDB.findAll({ 29 | where: { 30 | chat: jid, 31 | type: tip 32 | } 33 | }); 34 | 35 | if (Msg.length < 1) { 36 | return false; 37 | } else { 38 | return Msg[0].dataValues; 39 | } 40 | } 41 | 42 | async function setMessage(jid = null, tip = 'welcome', text = null) { 43 | var Msg = await GreetingsDB.findAll({ 44 | where: { 45 | chat: jid, 46 | type: tip 47 | } 48 | }); 49 | 50 | if (Msg.length < 1) { 51 | return await GreetingsDB.create({ chat: jid, type: tip, message:text }); 52 | } else { 53 | return await Msg[0].update({ chat: jid, type: tip, message:text }); 54 | } 55 | } 56 | 57 | async function deleteMessage(jid = null, tip = 'welcome') { 58 | var Msg = await GreetingsDB.findAll({ 59 | where: { 60 | chat: jid, 61 | type: tip 62 | } 63 | }); 64 | 65 | return await Msg[0].destroy(); 66 | } 67 | 68 | module.exports = { 69 | GreetingsDB: GreetingsDB, 70 | getMessage: getMessage, 71 | setMessage: setMessage, 72 | deleteMessage: deleteMessage 73 | }; -------------------------------------------------------------------------------- /plugins/sql/lydia.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | const config = require('../../config'); 10 | const { DataTypes } = require('sequelize'); 11 | 12 | const LydiaDB = config.DATABASE.define('Lydia', { 13 | session_id: { 14 | type: DataTypes.STRING, 15 | allowNull: false 16 | }, 17 | expires: { 18 | type: DataTypes.INTEGER, 19 | allowNull: false 20 | }, 21 | users: { 22 | type: DataTypes.TEXT, 23 | allowNull: false 24 | } 25 | }); 26 | 27 | module.exports = { LydiaDB: LydiaDB }; 28 | -------------------------------------------------------------------------------- /plugins/sql/notes.js: -------------------------------------------------------------------------------- 1 | /* 2 | # Copyright (C) 2020 MuhammedKpln. 3 | # 4 | # WhatsAsena is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU General Public License as published by 6 | # the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # WhatsAsena is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with this program. If not, see . 16 | # 17 | */ 18 | 19 | const config = require('../../config'); 20 | const { DataTypes } = require('sequelize'); 21 | 22 | const NotesDB = config.DATABASE.define('notes', { 23 | note: { 24 | type: DataTypes.TEXT, 25 | allowNull: false 26 | } 27 | }); 28 | 29 | 30 | async function getNotes() { 31 | const Notes = await NotesDB.findAll() 32 | 33 | return Notes 34 | } 35 | 36 | async function saveNote(note) { 37 | return await NotesDB.create({ note }); 38 | } 39 | 40 | async function deleteAllNotes() { 41 | return await NotesDB.destroy({ 42 | where: {}, 43 | truncate: true 44 | }) 45 | } 46 | 47 | module.exports = { 48 | NotesDB, 49 | getNotes, 50 | saveNote, 51 | deleteAllNotes 52 | }; 53 | -------------------------------------------------------------------------------- /plugins/sql/plugin.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | const config = require('../../config'); 10 | const { DataTypes } = require('sequelize'); 11 | 12 | const PluginDB = config.DATABASE.define('Plugin', { 13 | name: { 14 | type: DataTypes.STRING, 15 | allowNull: false 16 | }, 17 | url: { 18 | type: DataTypes.TEXT, 19 | allowNull: false 20 | } 21 | }); 22 | 23 | async function installPlugin(adres, file) { 24 | var Plugin = await PluginDB.findAll({ 25 | where: {url: adres} 26 | }); 27 | 28 | if (Plugin.length >= 1) { 29 | return false; 30 | } else { 31 | return await PluginDB.create({ url: adres, name: file }); 32 | } 33 | } 34 | module.exports = { PluginDB: PluginDB, installPlugin: installPlugin }; -------------------------------------------------------------------------------- /plugins/stickers.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | const Asena = require('../events'); 10 | const {MessageType} = require('@adiwajshing/baileys'); 11 | const fs = require('fs'); 12 | const ffmpeg = require('fluent-ffmpeg'); 13 | const {execFile} = require('child_process'); 14 | const cwebp = require('cwebp-bin'); 15 | 16 | const Language = require('../language'); 17 | const Lang = Language.getString('sticker'); 18 | 19 | Asena.addCommand({pattern: 'sticker$', fromMe: false, desc: Lang.STICKER_DESC}, (async (message, match) => { 20 | 21 | if (message.reply_message === false) return await message.client.sendMessage(message.jid,Lang.NEED_REPLY, MessageType.text); 22 | var downloading = await message.client.sendMessage(message.jid,Lang.DOWNLOADING,MessageType.text); 23 | var location = await message.client.downloadAndSaveMediaMessage({ 24 | key: { 25 | remoteJid: message.reply_message.jid, 26 | id: message.reply_message.id 27 | }, 28 | message: message.reply_message.data.quotedMessage 29 | }); 30 | 31 | if (message.reply_message.video === false && message.reply_message.image) { 32 | ffmpeg(location) 33 | .outputOptions(["-y", "-vcodec libwebp"]) 34 | .videoFilters('scale=2000:2000:flags=lanczos:force_original_aspect_ratio=decrease,format=rgba,pad=2000:2000:(ow-iw)/2:(oh-ih)/2:color=#00000000,setsar=1') 35 | .save('st.webp') 36 | .on('end', async () => { 37 | await message.sendMessage(fs.readFileSync('st.webp'), MessageType.sticker); 38 | }); 39 | return await message.client.deleteMessage(message.jid, {id: downloading.key.id, remoteJid: message.jid, fromMe: true}) 40 | 41 | } 42 | 43 | ffmpeg(location) 44 | .outputOptions(["-y", "-vcodec libwebp", "-lossless 1", "-qscale 1", "-preset default", "-loop 0", "-an", "-vsync 0", "-s 600x600"]) 45 | .videoFilters('scale=600:600:flags=lanczos:force_original_aspect_ratio=decrease,format=rgba,pad=600:600:(ow-iw)/2:(oh-ih)/2:color=#00000000,setsar=1') 46 | .save('sticker.webp') 47 | .on('end', async () => { 48 | await message.sendMessage(fs.readFileSync('sticker.webp'), MessageType.sticker); 49 | }); 50 | return await message.client.deleteMessage(message.jid, {id: downloading.key.id, remoteJid: message.jid, fromMe: true}) 51 | })); 52 | 53 | Asena.addCommand({pattern: 'S', fromMe: false , dontAddCommandList: true}, (async (message, match) => { 54 | if (message.reply_message === false) return await message.sendMessage(Lang.NEED_REPLY); 55 | var downloading = await message.client.sendMessage(message.jid,Lang.DOWNLOADING,MessageType.text); 56 | var location = await message.client.downloadAndSaveMediaMessage({ 57 | key: { 58 | remoteJid: message.reply_message.jid, 59 | id: message.reply_message.id 60 | }, 61 | message: message.reply_message.data.quotedMessage 62 | }); 63 | 64 | if (message.reply_message.video === false && message.reply_message.image) { 65 | execFile(cwebp, [location, '-o', 'output.webp'], async err => { 66 | if (err) { 67 | throw err; 68 | } 69 | 70 | await message.sendMessage(fs.readFileSync('./output.webp'), MessageType.sticker); 71 | }); 72 | return await message.client.deleteMessage(message.jid, {id: downloading.key.id, remoteJid: message.jid, fromMe: false}) 73 | } 74 | 75 | ffmpeg(location) 76 | .outputOptions(["-y", "-vcodec libwebp", "-lossless 1", "-qscale 1", "-preset default", "-loop 0", "-an", "-vsync 0", "-s 512x512"]) 77 | .save('sticker.webp') 78 | .on('end', async () => { 79 | await message.sendMessage(fs.readFileSync('sticker.webp'), MessageType.sticker); 80 | }); 81 | return await message.client.deleteMessage(message.jid, {id: downloading.key.id, remoteJid: message.jid, fromMe: true}) 82 | })); 83 | 84 | 85 | 86 | Asena.addCommand({pattern: 'psticker', fromMe: true , dontAddCommandList: true }, (async (message, match) => { 87 | 88 | if (message.reply_message === false) return await message.client.sendMessage(message.jid,Lang.NEED_REPLY, MessageType.text); 89 | var downloading = await message.client.sendMessage(message.jid,Lang.DOWNLOADING,MessageType.text); 90 | var location = await message.client.downloadAndSaveMediaMessage({ 91 | key: { 92 | remoteJid: message.reply_message.jid, 93 | id: message.reply_message.id 94 | }, 95 | message: message.reply_message.data.quotedMessage 96 | }); 97 | 98 | if (message.reply_message.video === false && message.reply_message.image) { 99 | ffmpeg(location) 100 | .outputOptions(["-y", "-vcodec libwebp"]) 101 | .videoFilters('scale=2000:200Asena.addCommand({pattern: 'sticker', fromMe: false, desc: Lang.STICKER_DESC}, (async (message, match) => { 102 | if (message.reply_message === false) return await message.sendMessage(Lang.NEED_REPLY); 103 | var downloading = await message.client.sendMessage(message.jid,Lang.DOWNLOADING,MessageType.text); 104 | var location = await message.client.downloadAndSaveMediaMessage({ 105 | key: { 106 | remoteJid: message.reply_message.jid, 107 | id: message.reply_message.id 108 | }, 109 | message: message.reply_message.data.quotedMessage 110 | }); 111 | 112 | if (message.reply_message.video === false && message.reply_message.image) { 113 | execFile(cwebp, [location, '-o', 'output.webp'], async err => { 114 | if (err) { 115 | throw err; 116 | } 117 | 118 | await message.sendMessage(fs.readFileSync('./output.webp'), MessageType.sticker,{quoted: message.data}); 119 | }); 120 | return await message.client.deleteMessage(message.jid, {id: downloading.key.id, remoteJid: message.jid, fromMe: false}) 121 | } 122 | 123 | ffmpeg(location) 124 | .outputOptions(["-y", "-vcodec libwebp", "-lossless 1", "-qscale 1", "-preset default", "-loop 0", "-an", "-vsync 0", "-s 512x512"]) 125 | .save('sticker.webp') 126 | .on('end', async () => { 127 | await message.sendMessage(fs.readFileSync('sticker.webp'), MessageType.sticker); 128 | }); 129 | return await message.client.deleteMessage(message.jid, {id: downloading.key.id, remoteJid: message.jid, fromMe: true}) 130 | })); 131 | 0:flags=lanczos:force_original_aspect_ratio=decrease,format=rgba,pad=2000:2000:(ow-iw)/2:(oh-ih)/2:color=#00000000,setsar=1') 132 | .save('st.webp') 133 | .on('end', async () => { 134 | await message.sendMessage(fs.readFileSync('st.webp'), MessageType.sticker); 135 | }); 136 | return await message.client.deleteMessage(message.jid, {id: downloading.key.id, remoteJid: message.jid, fromMe: true}) 137 | 138 | } 139 | 140 | ffmpeg(location) 141 | .outputOptions(["-y", "-vcodec libwebp", "-lossless 1", "-qscale 1", "-preset default", "-loop 0", "-an", "-vsync 0", "-s 600x600"]) 142 | .videoFilters('scale=600:600:flags=lanczos:force_original_aspect_ratio=decrease,format=rgba,pad=600:600:(ow-iw)/2:(oh-ih)/2:color=#00000000,setsar=1') 143 | .save('sticker.webp') 144 | .on('end', async () => { 145 | await message.sendMessage(fs.readFileSync('sticker.webp'), MessageType.sticker); 146 | }); 147 | return await message.client.deleteMessage(message.jid, {id: downloading.key.id, remoteJid: message.jid, fromMe: true}) 148 | })); 149 | 150 | -------------------------------------------------------------------------------- /plugins/system_stats.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | Developer & Co-Founder - Phaticusthiccy 8 | */ 9 | 10 | const Asena = require('../events'); 11 | const {MessageType} = require('@adiwajshing/baileys'); 12 | const {spawnSync} = require('child_process'); 13 | const Config = require('../config'); 14 | const chalk = require('chalk'); 15 | 16 | const Language = require('../language'); 17 | const Lang = Language.getString('system_stats'); 18 | 19 | const Asena = require('../events'); 20 | const {MessageType} = require('@adiwajshing/baileys'); 21 | const {spawnSync} = require('child_process'); 22 | const Config = require('../config'); 23 | const chalk = require('chalk'); 24 | const axios = require('axios'); 25 | const Language = require('../language'); 26 | const Lang = Language.getString('system_stats'); 27 | 28 | Asena.addCommand({pattern: 'alive', fromMe: false, desc: Lang.ALIVE_DESC}, (async (message, match) => { 29 | 30 | let pp 31 | try { pp = await message.client.getProfilePicture(message.jid.includes('-') ? message.data.participant : message.jid ); } catch { pp = await message.client.getProfilePicture(); } 32 | await axios.get(pp, {responseType: 'arraybuffer'}).then(async (res) => { await message.client.sendMessage(message.jid, res.data, MessageType.image, { caption: Config.ALIVEMSG }); }); 33 | })); 34 | 35 | Asena.addCommand({pattern: 'sysd', fromMe: false, desc: Lang.SYSD_DESC}, (async (message, match) => { 36 | const child = spawnSync('neofetch', ['--stdout']).stdout.toString('utf-8') 37 | await message.sendMessage( 38 | '```' + child + '```', MessageType.text 39 | ); 40 | })); 41 | 42 | 43 | Asena.addCommand({pattern: 'palive', fromMe: true, dontAddCommandList: true }, (async (message, match) => { 44 | if (Config.ALIVEMSG == 'default') { 45 | await message.client.sendMessage(message.jid,'```Tanrı Türk\'ü Korusun. 🐺 Asena Hizmetinde!```\n\n*Version:* ```'+Config.VERSION+'```\n*Branch:* ```'+Config.BRANCH+'```\n*Telegram Group:* https://t.me/AsenaSupport\n*Telegram Channel:* https://t.me/whatsasenaremaster' , MessageType.text); 46 | } 47 | else { 48 | await message.client.sendMessage(message.jid,Config.ALIVEMSG, MessageType.text); 49 | } 50 | })); 51 | 52 | Asena.addCommand({pattern: 'psysd', fromMe: true , dontAddCommandList: true}, (async (message, match) => { 53 | const child = spawnSync('neofetch', ['--stdout']).stdout.toString('utf-8') 54 | await message.sendMessage( 55 | '```' + child + '```', MessageType.text 56 | ); 57 | })); 58 | -------------------------------------------------------------------------------- /plugins/tagall.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | Licensed under the GPL-3.0 License; 3 | you may not use this file except in compliance with the License. 4 | WhatsAsena - Yusuf Usta 5 | */ 6 | 7 | const Asena = require('../events'); 8 | const {MessageType} = require('@adiwajshing/baileys'); 9 | 10 | const Language = require('../language'); 11 | const Lang = Language.getString('tagall'); 12 | 13 | /*async function checkImAdmin(message, user = message.client.user.jid) { 14 | var grup = await message.client.groupMetadata(message.jid); 15 | var sonuc = grup['participants'].map((member) => { 16 | if (member.id.split('@')[0] === user.split('@')[0] && member.isAdmin) return true; else; return false; 17 | }); 18 | return sonuc.includes(true); 19 | }*/ 20 | 21 | Asena.addCommand({pattern: 'tagall', fromMe: true, desc: Lang.TAGALL_DESC, dontAddCommandList: true}, (async (message, match) => { 22 | 23 | /*var im = await checkImAdmin(message); 24 | if (!im) return await message.client.sendMessage(message.jid,mesaj, MessageType.extendedText, {contextInfo: {mentionedJid: jids}, previewType: 0})*/ 25 | /*message.client.sendMessage(message.jid,Lang.ADMİN,MessageType.text);*/ 26 | 27 | grup = await message.client.groupMetadata(message.jid); 28 | var jids = []; 29 | mesaj = ''; 30 | grup['participants'].map( 31 | async (uye) => { 32 | mesaj += '@' + uye.id.split('@')[0] + ' '; 33 | jids.push(uye.id.replace('c.us', 's.whatsapp.net')); 34 | } 35 | ); 36 | await message.client.sendMessage(message.jid,`${match[1]}`, MessageType.extendedText, {contextInfo: {mentionedJid: jids}, previewType: 0}) 37 | } 38 | else if (match[1] == '') { 39 | grup = await message.client.groupMetadata(message.jid); 40 | var jids = []; 41 | mesaj = ''; 42 | grup['participants'].map( 43 | async (uye) => { 44 | mesaj += '▫️ @' + uye.id.split('@')[0] + '\n'; 45 | jids.push(uye.id.replace('c.us', 's.whatsapp.net')); 46 | } 47 | ); 48 | await message.client.sendMessage(message.jid,mesaj, MessageType.extendedText, {contextInfo: {mentionedJid: jids}, previewType: 0}) 49 | } 50 | } 51 | else if (message.reply_message) { 52 | grup = await message.client.groupMetadata(message.jid); 53 | var jids = []; 54 | mesaj = ''; 55 | grup['participants'].map( 56 | async (uye) => { 57 | mesaj += '@' + uye.id.split('@')[0] + ' '; 58 | jids.push(uye.id.replace('c.us', 's.whatsapp.net')); 59 | } 60 | ); 61 | var tx = message.reply_message.text 62 | await message.client.sendMessage(message.jid,tx, MessageType.extendedText, {contextInfo: {mentionedJid: jids}, previewType: 0}) 63 | } 64 | })); 65 | 66 | 67 | 68 | Asena.addCommand({pattern: 'tagadmin', fromMe: false, dontAddCommandList: true }, (async (message, match) => { 69 | let grup = await message.client.groupMetadata(message.jid); 70 | var jids = []; 71 | mesaj = ''; 72 | grup['participants'].map(async (uye) => { 73 | if (uye.isAdmin) { 74 | mesaj += '▫️@' + uye.id.split('@')[0] + '\n'; 75 | jids.push(uye.id.replace('c.us', 's.whatsapp.net')); 76 | } 77 | }); 78 | await message.client.sendMessage(message.jid,mesaj, MessageType.extendedText, {contextInfo: {mentionedJid: jids}, previewType: 0}) 79 | })); 80 | 81 | -------------------------------------------------------------------------------- /plugins/tinyurl.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | Licensed under the GPL-3.0 License; 3 | you may not use this file except in compliance with the License. 4 | WhatsAsena - Yusuf Usta 5 | */ 6 | 7 | const Asena = require('../events'); 8 | const {MessageType} = require('@adiwajshing/baileys'); 9 | const got = require('got'); 10 | const Config = require('../config'); 11 | const Language = require('../language'); 12 | const Lang = Language.getString('weather'); 13 | 14 | Asena.addCommand({pattern: 'tiny ?(.*)', fromMe: false, desc: Lang.TIN_DESC}, async (message, match) => { 15 | if (match[1] === '') return await message.reply(Lang.NEED_LINK); 16 | const url = `https://tobz-api.herokuapp.com/api/tinyurl?url=${match[1]}&apikey=${Config.TOBZ_API_KEY}`; 17 | try { 18 | const response = await got(url); 19 | const json = JSON.parse(response.body); 20 | if (response.statusCode === 200) return await message.client.sendMessage(message.jid, 21 | '\n *🔗 ' + Lang.SLINK +'* ```' + json.result + '```\n\n', MessageType.text); 22 | } catch { 23 | return await message.client.sendMessage(message.jid, Lang.NOT_FOUNDLI, MessageType.text); 24 | } 25 | }); 26 | 27 | Asena.addCommand({pattern: 'ptiny ?(.*)', fromMe: true, dontAddCommandList: true }, async (message, match) => { 28 | if (match[1] === '') return await message.reply(Lang.NEED_LINK); 29 | const url = `https://tobz-api.herokuapp.com/api/tinyurl?url=${match[1]}&apikey=${Config.TOBZ_API_KEY}`; 30 | try { 31 | const response = await got(url); 32 | const json = JSON.parse(response.body); 33 | if (response.statusCode === 200) return await message.client.sendMessage(message.jid, 34 | '\n *🔗 ' + Lang.SLINK +'* ```' + json.result + '```\n\n', MessageType.text); 35 | } catch { 36 | return await message.client.sendMessage(message.jid, Lang.NOT_FOUNDLI, MessageType.text); 37 | } 38 | }); 39 | -------------------------------------------------------------------------------- /plugins/up_down.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | const Asena = require('../events'); 10 | const {MessageType, Mimetype} = require('@adiwajshing/baileys'); 11 | const got = require('got') 12 | const fs = require('fs') 13 | const Language = require('../language'); 14 | /*const Lang = Language.getString('up_down'); 15 | 16 | Asena.addCommand({pattern: 'download ?(.*)', fromMe: true, desc: Lang.MEMES_DESC, usage: 'meme top;bottom'}, (async (message, match) => { 17 | if (message.reply_message === false) return await message.sendMessage(Lang.NEED_REPLY); 18 | 19 | }));*/ -------------------------------------------------------------------------------- /plugins/updater.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | const simpleGit = require('simple-git'); 10 | const git = simpleGit(); 11 | const Asena = require('../events'); 12 | const {MessageType} = require('@adiwajshing/baileys'); 13 | const Config = require('../config'); 14 | const exec = require('child_process').exec; 15 | const Heroku = require('heroku-client'); 16 | const { PassThrough } = require('stream'); 17 | const heroku = new Heroku({ token: Config.HEROKU.API_KEY }) 18 | 19 | const Language = require('../language'); 20 | const Lang = Language.getString('updater'); 21 | 22 | 23 | Asena.addCommand({pattern: 'update$', fromMe: true, desc: Lang.UPDATER_DESC, dontAddCommandList: true}, (async (message, match) => { 24 | await git.fetch(); 25 | var commits = await git.log([Config.BRANCH + '..origin/' + Config.BRANCH]); 26 | if (commits.total === 0) { 27 | await message.client.sendMessage( 28 | message.jid, 29 | Lang.UPDATE, MessageType.text 30 | ); 31 | } else { 32 | var degisiklikler = Lang.NEW_UPDATE; 33 | commits['all'].map( 34 | (commit) => { 35 | degisiklikler += '🔸 [' + commit.date.substring(0, 10) + ']: ' + commit.message + ' <' + commit.author_name + '>\n'; 36 | } 37 | ); 38 | 39 | await message.client.sendMessage( 40 | message.jid, 41 | degisiklikler + '```', MessageType.text 42 | ); 43 | } 44 | })); 45 | 46 | Asena.addCommand({pattern: 'update now$', fromMe: true, desc: Lang.UPDATE_NOW_DESC, dontAddCommandList: true}, (async (message, match) => { 47 | await git.fetch(); 48 | var commits = await git.log([Config.BRANCH + '..origin/' + Config.BRANCH]); 49 | if (commits.total === 0) { 50 | return await message.client.sendMessage( 51 | message.jid, 52 | Lang.UPDATE, MessageType.text 53 | ); 54 | } else { 55 | var guncelleme = await message.reply(Lang.UPDATING); 56 | if (Config.HEROKU.HEROKU) { 57 | try { 58 | var app = await heroku.get('/apps/' + Config.HEROKU.APP_NAME) 59 | } catch { 60 | return await message.client.sendMessage( 61 | message.jid,Lang.INVALID_HEROKU, MessageType.text); 62 | } 63 | 64 | git.fetch('upstream', Config.BRANCH); 65 | git.reset('hard', ['FETCH_HEAD']); 66 | 67 | var git_url = app.git_url.replace( 68 | "https://", "https://api:" + Config.HEROKU.API_KEY + "@" 69 | ) 70 | 71 | try { 72 | await git.addRemote('heroku', git_url); 73 | } catch { console.log('heroku remote ekli'); } 74 | await git.push('heroku', Config.BRANCH); 75 | 76 | await message.client.sendMessage( 77 | message.jid,Lang.UPDATED, MessageType.text); 78 | 79 | await messageclient.sendMessage(message.jid,'💬 *BOT Restarting Automatically!* '); 80 | 81 | } else { 82 | git.pull((async (err, update) => { 83 | if(update && update.summary.changes) { 84 | await message.client.sendMessage( 85 | message.jid,Lang.UPDATED_LOCAL, MessageType.text); 86 | exec('npm install').stderr.pipe(process.stderr); 87 | } else if (err) { 88 | await message.client.sendMessage( 89 | message.jid,'*❌ Update failed!*\n*Error:* ```' + err + '```', MessageType.text); 90 | } 91 | })); 92 | await guncelleme.delete(); 93 | } 94 | } 95 | })); 96 | -------------------------------------------------------------------------------- /plugins/updown.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | // to-do download -------------------------------------------------------------------------------- /plugins/voicy.js: -------------------------------------------------------------------------------- 1 | const Asena = require('../events'); 2 | const ffmpeg = require('fluent-ffmpeg'); 3 | const fs = require('fs'); 4 | const { MessageType } = require('@adiwajshing/baileys'); 5 | const Language = require('../language'); 6 | const Lang = Language.getString('voicy'); 7 | const conf = require('../config'); 8 | 9 | 10 | const recognizeAudio = () => { 11 | 12 | const headers = new Headers({ 13 | 'Content-Type': 'audio/wav', 14 | "Authorization": `Bearer ${conf.WITAI_API}`, 15 | 'Cache-Control': 'no-cache', 16 | 'Transfer-Encoding': 'chunked' 17 | }) 18 | 19 | const requestBody = { 20 | method: "POST", 21 | body: fs.readFileSync('output.wav'), 22 | headers: headers 23 | } 24 | 25 | return fetch("https://api.wit.ai/speech?v=20200219", requestBody) 26 | .then(response => response.json()) 27 | .then(json => json._text) 28 | } 29 | 30 | const convertToWav = file => { 31 | return ffmpeg(file) 32 | .inputFormat('ogg') 33 | .audioCodec('pcm_s16le') 34 | .format('wav') 35 | .save('output.wav') 36 | } 37 | 38 | Asena.addCommand({ pattern: 'voicy', desc: Lang.USAGE, fromMe: false }, (async (message, match) => { 39 | try { 40 | if (message.reply_message) { 41 | if (!message.reply_message.text && !message.reply_message.video && !message.reply_message.image) { 42 | const file = await message.client.downloadAndSaveMediaMessage({ 43 | key: { 44 | remoteJid: message.reply_message.jid, 45 | id: message.reply_message.id 46 | }, 47 | message: message.reply_message.data.quotedMessage 48 | }) 49 | 50 | 51 | convertToWav(file).on('end', async () => { 52 | const recognizedText = await recognizeAudio() 53 | 54 | await message.client.sendMessage(message.jid, Lang.TEXT + '```' + recognizedText + '```', MessageType.text) 55 | }); 56 | 57 | 58 | } else { 59 | await message.client.sendMessage(message.jid, Lang.ONLY_AUDIO, MessageType.text) 60 | 61 | } 62 | } else { 63 | await message.client.sendMessage(message.jid, Lang.NEED_REPLY, MessageType.text) 64 | 65 | } 66 | 67 | } catch (err) { 68 | console.log(err) 69 | } 70 | 71 | 72 | })); 73 | 74 | Asena.addCommand({ pattern: 'pvoicy', fromMe: true ,dontAddCommandList: true }, (async (message, match) => { 75 | try { 76 | if (message.reply_message) { 77 | if (!message.reply_message.text && !message.reply_message.video && !message.reply_message.image) { 78 | const file = await message.client.downloadAndSaveMediaMessage({ 79 | key: { 80 | remoteJid: message.reply_message.jid, 81 | id: message.reply_message.id 82 | }, 83 | message: message.reply_message.data.quotedMessage 84 | }) 85 | 86 | 87 | convertToWav(file).on('end', async () => { 88 | const recognizedText = await recognizeAudio() 89 | 90 | await message.client.sendMessage(message.jid, Lang.TEXT + '```' + recognizedText + '```', MessageType.text) 91 | }); 92 | 93 | 94 | } else { 95 | await message.client.sendMessage(message.jid, Lang.ONLY_AUDIO, MessageType.text) 96 | 97 | } 98 | } else { 99 | await message.client.sendMessage(message.jid, Lang.NEED_REPLY, MessageType.text) 100 | 101 | } 102 | 103 | } catch (err) { 104 | console.log(err) 105 | } 106 | 107 | 108 | })); 109 | 110 | -------------------------------------------------------------------------------- /plugins/wame.js: -------------------------------------------------------------------------------- 1 | const Asena = require('../events'); 2 | const {MessageType} = require('@adiwajshing/baileys'); 3 | const Config = require('../config'); 4 | const fs = require('fs'); 5 | 6 | const WAME_DESC = "Get a link to the user chat." 7 | const WAME = "```Chat link from```@{}: https://wa.me/{}" 8 | const NEED_UWONG = "*Give me a user!*" 9 | 10 | Asena.addCommand({pattern: 'wame ?(.*)', fromMe: false, desc: WAME_DESC}, (async (message, match) => { 11 | if (message.reply_message !== false) { 12 | await message.client.sendMessage(message.jid, WAME.format(message.reply_message.jid.split('@')[0], message.reply_message.jid.replace('@s.whatsapp.net', ' ')), MessageType.text, { 13 | quotedMessage: message.reply_message.data, contextInfo: {mentionedJid: [message.reply_message.jid.replace('c.us', 's.whatsapp.net')]} 14 | }); 15 | } else if (message.mention !== false) { 16 | message.mention.map(async user => { 17 | await message.client.sendMessage(message.jid, WAME.format(user.split('@')[0], user.replace('@s.whatsapp.net', ' ')), MessageType.text, { 18 | contextInfo: {mentionedJid: [user.replace('c.us', 's.whatsapp.net')]} 19 | }); 20 | }); 21 | } else { 22 | await message.client.sendMessage(message.jid, NEED_UWONG, MessageType.text); 23 | } 24 | })); 25 | -------------------------------------------------------------------------------- /plugins/weather.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | const Asena = require('../events'); 10 | const {MessageType} = require('@adiwajshing/baileys'); 11 | const got = require('got'); 12 | 13 | const Language = require('../language'); 14 | const Lang = Language.getString('weather'); 15 | 16 | Asena.addCommand({pattern: 'weather ?(.*)', desc: Lang.WEATHER_DESC}, async (message, match) => { 17 | 18 | 19 | 20 | if (match[1] === '') return await message.reply(Lang.NEED_LOCATION); 21 | const url = `http://api.openweathermap.org/data/2.5/weather?q=${match[1]}&units=metric&appid=060a6bcfa19809c2cd4d97a212b19273&language=tr`; 22 | try { 23 | const response = await got(url); 24 | const json = JSON.parse(response.body); 25 | if (response.statusCode === 200) return await message.client.sendMessage(message.jid, '*📍 ' + Lang.LOCATION +':* ```' + match[1] + '```\n' + 26 | '*🌐 ' + Lang.LAT +':* ```' + json.coord.lat + '```\n' + 27 | '*🌐 ' + Lang.LONG +':* ```' + json.coord.lon + '```\n\n' + 28 | '*ℹ ' + Lang.DESC +':* ```' + json.weather[0].description + '```\n' + 29 | '*☀ ' + Lang.TEMP +':* ```' + json.main.temp_max + '°```\n' + 30 | '*💧 ' + Lang.HUMI +':* ```%' + json.main.humidity + '```\n' + 31 | '*🔆 ' + Lang.FEEL +':* ```' + json.main.feels_like + '°```\n' + 32 | '*💨 ' + Lang.WIND +':* ```' + json.wind.speed + 'm/s```\n' + 33 | '*☁ ' + Lang.CLOUD +':* ```%' + json.clouds.all + '```\n', MessageType.text,{quoted: message.data}); 34 | } catch { 35 | return await message.client.sendMessage(message.jid, Lang.NOT_FOUND, MessageType.text ); 36 | } 37 | }); 38 | 39 | Asena.addCommand({pattern: 'pweather ?(.*)', fromMe: true, dontAddCommandList: true}, async (message, match) => { 40 | if (match[1] === '') return await message.reply(Lang.NEED_LOCATION); 41 | const url = `http://api.openweathermap.org/data/2.5/weather?q=${match[1]}&units=metric&appid=060a6bcfa19809c2cd4d97a212b19273&language=tr`; 42 | try { 43 | const response = await got(url); 44 | const json = JSON.parse(response.body); 45 | if (response.statusCode === 200) return await message.client.sendMessage(message.jid, '*📍 ' + Lang.LOCATION +':* ```' + match[1] + '```\n' + 46 | '*🌐 ' + Lang.LAT +':* ```' + json.coord.lat + '```\n' + 47 | '*🌐 ' + Lang.LONG +':* ```' + json.coord.lon + '```\n\n' + 48 | '*ℹ ' + Lang.DESC +':* ```' + json.weather[0].description + '```\n' + 49 | '*☀ ' + Lang.TEMP +':* ```' + json.main.temp_max + '°```\n' + 50 | '*💧 ' + Lang.HUMI +':* ```%' + json.main.humidity + '```\n' + 51 | '*🔆 ' + Lang.FEEL +':* ```' + json.main.feels_like + '°```\n' + 52 | '*💨 ' + Lang.WIND +':* ```' + json.wind.speed + 'm/s```\n' + 53 | '*☁ ' + Lang.CLOUD +':* ```%' + json.clouds.all + '```\n', MessageType.text); 54 | } catch { 55 | return await message.client.sendMessage(message.jid, Lang.NOT_FOUND, MessageType.text); 56 | } 57 | }); 58 | -------------------------------------------------------------------------------- /plugins/web.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | const Asena = require('../events'); 10 | const {MessageType} = require('@adiwajshing/baileys'); 11 | const speedTest = require('@lh2020/speedtest-net'); 12 | const TinyURL = require('tinyurl'); 13 | 14 | const Language = require('../language'); 15 | const Lang = Language.getString('web'); 16 | const SLang = Language.getString('webss'); 17 | 18 | // https://github.com/ddsol/speedtest.net/blob/master/bin/index.js#L86 19 | function speedText(speed) { 20 | let bits = speed * 8; 21 | const units = ['', 'K', 'M', 'G', 'T']; 22 | const places = [0, 1, 2, 3, 3]; 23 | let unit = 0; 24 | while (bits >= 2000 && unit < 4) { 25 | unit++; 26 | bits /= 1000; 27 | } 28 | 29 | return `${bits.toFixed(places[unit])} ${units[unit]}bps`; 30 | } 31 | 32 | Asena.addCommand({pattern: 'speedtest', fromMe: false, desc: Lang.SPEEDTEST_DESC}, (async (message, match) => { 33 | var msg = await message.reply(Lang.SPEEDTESTING); 34 | var st = await speedTest({acceptLicense: true, acceptGdpr: true}); 35 | 36 | await message.client.sendMessage( 37 | message.jid,Lang.SPEEDTEST_RESULT + '\n\n' + 38 | '*ISP:* ```' + st.isp + '```\n' + 39 | '*Ping:* ```' + st.ping.latency + 'ms```\n' + 40 | '*' + Lang.UPLOAD + ':* ```' + speedText(st.upload.bandwidth) + '```\n' + 41 | '*' + Lang.DOWNLOAD + ':* ```' + speedText(st.download.bandwidth) + '```\n',MessageType.text 42 | ); 43 | await msg.delete(); 44 | })); 45 | 46 | Asena.addCommand({pattern: 'ping', fromMe: false, deleteCommand: false, desc: Lang.PING_DESC}, (async (message, match) => { 47 | var start = new Date().getTime(); 48 | var msg = await message.reply('```Ping!```'); 49 | var end = new Date().getTime(); 50 | 51 | await msg.delete(); 52 | await message.client.sendMessage( 53 | message.jid,'*Pong!*\n```' + (end - start) + 'ms```', MessageType.text); 54 | })); 55 | 56 | Asena.addCommand({pattern: 'short ?(.*)', fromMe: false, desc: Lang.URL}, (async (message, match) => { 57 | 58 | if (match[1] === '') return await message.client.sendMessage(message.jid, SLang.LİNK, MessageType.text); 59 | 60 | TinyURL.shorten(`${match[1]}`, async(res, err) => { 61 | if (err) 62 | await message.client.sendMessage(message.jid, '*#### Error! ####*\n\n' + '```' + err + '```', MessageType.text); 63 | 64 | await message.client.sendMessage(message.jid,`*Original Link:* ${match[1]}\n*Short Link:* ` + res, MessageType.text) 65 | }); 66 | })); 67 | 68 | Asena.addCommand({pattern: 'pping', fromMe: true, deleteCommand: false, dontAddCommandList: true}, (async (message, match) => { 69 | var start = new Date().getTime(); 70 | var msg = await message.reply('```Ping!```'); 71 | var end = new Date().getTime(); 72 | 73 | await msg.delete(); 74 | await message.client.sendMessage( 75 | message.jid,'*Pong!*\n```' + (end - start) + 'ms```', MessageType.text); 76 | })); 77 | 78 | Asena.addCommand({pattern: 'pshort ?(.*)', fromMe: true, dontAddCommandList: true}, (async (message, match) => { 79 | 80 | if (match[1] === '') return await message.client.sendMessage(message.jid, SLang.LİNK, MessageType.text); 81 | 82 | TinyURL.shorten(`${match[1]}`, async(res, err) => { 83 | if (err) 84 | await message.client.sendMessage(message.jid, '*#### Error! ####*\n\n' + '```' + err + '```', MessageType.text); 85 | 86 | await message.client.sendMessage(message.jid,`*Original Link:* ${match[1]}\n*Short Link:* ` + res, MessageType.text) 87 | }); 88 | })); 89 | 90 | Asena.addCommand({pattern: 'pspeedtest', fromMe: true, dontAddCommandList: true}, (async (message, match) => { 91 | var msg = await message.reply(Lang.SPEEDTESTING); 92 | var st = await speedTest({acceptLicense: true, acceptGdpr: true}); 93 | 94 | await message.client.sendMessage( 95 | message.jid,Lang.SPEEDTEST_RESULT + '\n\n' + 96 | '*ISP:* ```' + st.isp + '```\n' + 97 | '*Ping:* ```' + st.ping.latency + 'ms```\n' + 98 | '*' + Lang.UPLOAD + ':* ```' + speedText(st.upload.bandwidth) + '```\n' + 99 | '*' + Lang.DOWNLOAD + ':* ```' + speedText(st.download.bandwidth) + '```\n',MessageType.text 100 | ); 101 | await msg.delete(); 102 | })); 103 | -------------------------------------------------------------------------------- /plugins/whois.js: -------------------------------------------------------------------------------- 1 | const Asena = require('../events'); 2 | const { MessageType, Mimetype, GroupSettingChange, MessageOptions } = require('@adiwajshing/baileys'); 3 | const Axios = require('axios'); 4 | const fs = require('fs'); 5 | const ffmpeg = require('fluent-ffmpeg'); 6 | const {execFile} = require('child_process'); 7 | const CON = require('../config'); 8 | const Language = require('../language'); 9 | const Lang = Language.getString('whois'); // Language Support 10 | var ADMİN_USER = '' 11 | var USER_USER = '' 12 | var TR_USER = '' 13 | var Hİ_USER = '' 14 | var AZ_USER = '' 15 | var SRİ_USER = '' 16 | var RU_USER = '' 17 | var USA_USER = '' 18 | var OTHER = '' 19 | if (CON.LANG == 'TR') ADMİN_USER = '*Admin Sayısı:*', USER_USER = '*Üye Sayısı:*', TR_USER = '*Türk Üye Sayısı:*', Hİ_USER = '*Hint Üye Sayısı:*', AZ_USER = '*Azeri Üye Sayısı:*', SRİ_USER = '*Sri Lanka Üye Sayısı:*', RU_USER = '*Rus Üye Sayısı:*', USA_USER = '*ABD Üye Sayısı:*', OTHER = '*Diğer Üye Sayısı:*' 20 | if (CON.LANG == 'EN') ADMİN_USER = '*Admin Count:*', USER_USER = '*Member Count:*', TR_USER = '*Turkish Member Count:*', Hİ_USER = '*Indian Member Count:*', AZ_USER = '*Azerbayjan Member Count:*', SRİ_USER = '*Sri Lanka Member Count:*', RU_USER = '*Russian Member Count:*', USA_USER = '*USA Member Count:*', OTHER = '*Other Member Count:*' 21 | if (CON.LANG == 'AZ') ADMİN_USER = '*Admin sayı:*', USER_USER = '*Üzv sayı:*', TR_USER = '*Türk Üzv Sayısı:*', Hİ_USER = '*Hindistan üzv sayı:*', AZ_USER = '*Azərbaycan Üzv Sayısı:*', SRİ_USER = '*Şri Lanka üzv sayı:*', RU_USER = '*Rusiya Üzv Sayısı:*', USA_USER = '*ABD Üzv sayı:*', OTHER = '*Digər üzv sayı:*' 22 | if (CON.LANG == 'ES') ADMİN_USER = '*Recuento de administradores:*', USER_USER = '*Cuenta de miembro:*', TR_USER = '*Recuento de miembros turcos:*', Hİ_USER = '*Recuento de miembros indios:*', AZ_USER = '*Recuento de miembros de Azerbaiyán:*', SRİ_USER = '*Recuento de miembros de Sri Lanka:*', RU_USER = '*Recuento de miembros rusos:*', USA_USER = '*Recuento de miembros de USA:*', OTHER = '*Otro recuento de miembros:*' 23 | if (CON.LANG == 'PT') ADMİN_USER = '*Contagem de Admin:*', USER_USER = '*Contagem de membro:*', TR_USER = '*Contagem de membros turcos:*', Hİ_USER = '*Contagem de membros indianos:*', AZ_USER = '*Contagem de membros do Azerbaijão:*', SRİ_USER = '*Contagem de membros do Sri Lanka:*', RU_USER = '*Contagem de membros russos:*', USA_USER = '*Contagem de membros dos USA:*', OTHER = '*Contagem de outros membros:*' 24 | if (CON.LANG == 'RU') ADMİN_USER = '*Количество администраторов:*', USER_USER = '*Количество участников:*', TR_USER = '*Количество членов в Турции:*', Hİ_USER = '*Количество членов в Индии:*', AZ_USER = '*Количество участников из Азербайджана:*', SRİ_USER = '*Количество членов из Шри-Ланки:*', RU_USER = '*Количество участников в России:*', USA_USER = '*Количество участников в США:*', OTHER = '*Количество других участников:*' 25 | if (CON.LANG == 'HI') ADMİN_USER = '*व्यवस्थापक गणना:*', USER_USER = '*सदस्य गणना:*', TR_USER = '*तुर्की सदस्य संख्या:*', Hİ_USER = '*भारतीय सदस्य संख्या:*', AZ_USER = '*अज़रबैजान सदस्य संख्या:*', SRİ_USER = '*श्रीलंका सदस्य संख्या:*', RU_USER = '*रूसी सदस्य संख्या:*', USA_USER = '*यूएसए सदस्य संख्या:*', OTHER = '*अन्य सदस्य संख्या:*' 26 | if (CON.LANG == 'ID') ADMİN_USER = '*Jumlah Admin:*', USER_USER = '*Jumlah anggota:*', TR_USER = '*Jumlah Anggota Turki:*', Hİ_USER = '*Jumlah Anggota India:*', AZ_USER = '*Jumlah Anggota Azerbaijan:*', SRİ_USER = '*Jumlah Anggota Sri Lanka:*', RU_USER = '*Jumlah Anggota Rusia:*', USA_USER = '*Jumlah Anggota USA:*', OTHER = '*Jumlah Anggota Lainnya:*' 27 | if (CON.LANG == 'ML') ADMİN_USER = '*അഡ്‌മിൻ എണ്ണം:*', USER_USER = '*അംഗങ്ങളുടെ എണ്ണം:*', TR_USER = '*ടർക്കിഷ് അംഗങ്ങളുടെ എണ്ണം:*', Hİ_USER = '*ഇന്ത്യൻ അംഗങ്ങളുടെ എണ്ണം:*', AZ_USER = '*അസർബൈജാൻ അംഗങ്ങളുടെ എണ്ണം:*', SRİ_USER = '*ശ്രീലങ്ക അംഗങ്ങളുടെ എണ്ണം:*', RU_USER = '*റഷ്യൻ അംഗങ്ങളുടെ എണ്ണം:*', USA_USER = '*യു‌എസ്‌എ അംഗങ്ങളുടെ എണ്ണം:*', OTHER = '*മറ്റ് അംഗങ്ങളുടെ എണ്ണം:*' 28 | 29 | 30 | Asena.addCommand({ pattern: 'whois$', fromMe: false, desc: Lang.PL_DESC }, async (message, match) => { 31 | if (message.jid.includes('-')) { 32 | var json = await message.client.groupMetadataMinimal(message.jid) 33 | var code = await message.client.groupInviteCode(message.jid) 34 | var nwjson = await message.client.groupMetadata(message.jid) 35 | let region = await message.client.groupMetadata(message.jid); 36 | let grup = await message.client.groupMetadata(message.jid); 37 | var jids = []; 38 | mesaj = ''; 39 | var users1 = []; 40 | grup['participants'].map(async (uye) => { 41 | if (uye.isAdmin) { 42 | mesaj += '@' + uye.id.split('@')[0] + ' '; 43 | jids.push(uye.id.replace('c.us', 's.whatsapp.net')); 44 | } 45 | users1.push(uye.id.replace('c.us', 's.whatsapp.net')); 46 | }); 47 | var admin_count = jids.length + '\n' 48 | var user_count = users1.length + '\n' 49 | var tr_user = []; 50 | var hi_user = []; 51 | var az_user = []; 52 | var sri_user = []; 53 | var ru_user = []; 54 | var usa_user = []; 55 | var other_user = []; 56 | region['participants'].map(async (reg) => { 57 | if (reg.jid.startsWith('90')) { tr_user.push(reg.id.replace('c.us', 's.whatsapp.net')); 58 | } if (reg.jid.startsWith('994')) { az_user.push(reg.id.replace('c.us', 's.whatsapp.net')); 59 | } if (reg.jid.startsWith('91')) { hi_user.push(reg.id.replace('c.us', 's.whatsapp.net')); 60 | } if (reg.jid.startsWith('94')) { sri_user.push(reg.id.replace('c.us', 's.whatsapp.net')); 61 | } if (reg.jid.startsWith('7')) { ru_user.push(reg.id.replace('c.us', 's.whatsapp.net')); 62 | } if (reg.jid.startsWith('1')) { usa_user.push(reg.id.replace('c.us', 's.whatsapp.net')); 63 | } 64 | }); 65 | var trus = ' ' + tr_user.length + '\n' 66 | var hius = ' ' + hi_user.length + '\n' 67 | var azus = ' ' + az_user.length + '\n' 68 | var srius = ' ' + sri_user.length + '\n' 69 | var ruus = ' ' + ru_user.length + '\n' 70 | var usaus = ' ' + usa_user.length + '\n' 71 | var oth = ' ' + user_count - trus - hius - azus - srius - ruus - usaus 72 | const user_count_msg = ADMİN_USER + admin_count + USER_USER + user_count + TR_USER + trus + Hİ_USER + hius + AZ_USER + azus + SRİ_USER + srius + RU_USER + ruus + USA_USER + usaus + OTHER + oth + '\n' 73 | const msg = `*Grup ID:* ${json.id} \n` + Lang.SUB + `${nwjson.subject} \n` + Lang.OWN + `${json.owner} \n` + Lang.COD + `${code} \n` + user_count_msg + Lang.DES + `\n\n${nwjson.desc}` 74 | var ppUrl = await message.client.getProfilePicture(message.jid) 75 | const resim = await Axios.get(ppUrl, {responseType: 'arraybuffer'}) 76 | await message.sendMessage( 77 | Buffer.from(resim.data), 78 | MessageType.image, 79 | {caption: msg } 80 | ); 81 | } 82 | else { 83 | var status = await message.client.getStatus(message.jid) 84 | var usppUrl = await message.client.getProfilePicture(message.jid) 85 | var usexists = await message.client.isOnWhatsApp(message.jid) 86 | const nwmsg = Lang.JİD + `${usexists.jid} \n` + Lang.ST + `${status.status}` 87 | const resimnw = await Axios.get(usppUrl, {responseType: 'arraybuffer'}) 88 | await message.sendMessage( 89 | Buffer.from(resimnw.data), 90 | MessageType.image, 91 | { caption: nwmsg } 92 | ); 93 | } 94 | }); 95 | -------------------------------------------------------------------------------- /qr.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | const chalk = require('chalk'); 10 | const {WAConnection} = require('@adiwajshing/baileys'); 11 | const {StringSession} = require('./whatsasena/'); 12 | const fs = require('fs'); 13 | 14 | async function whatsAsena () { 15 | const conn = new WAConnection(); 16 | const Session = new StringSession(); 17 | conn.logger.level = 'warn'; 18 | conn.regenerateQRIntervalMs = 30000; 19 | 20 | conn.on('connecting', async () => { 21 | console.log(`${chalk.green.bold('Whats')}${chalk.blue.bold('Asena')} 22 | ${chalk.white.italic('AsenaString Kodu Alıcı')} 23 | 24 | ${chalk.blue.italic('ℹ️ Connecting to Whatsapp... Please wait.')}`); 25 | }); 26 | 27 | 28 | conn.on('open', () => { 29 | var st = Session.createStringSession(conn.base64EncodedAuthInfo()); 30 | console.log( 31 | chalk.green.bold('Asena String Kodunuz: '), Session.createStringSession(conn.base64EncodedAuthInfo()) 32 | ); 33 | 34 | if (!fs.existsSync('config.env')) { 35 | fs.writeFileSync('config.env', `ASENA_SESSION="${st}"`); 36 | } 37 | 38 | console.log( 39 | chalk.blue.bold('Locale kuruyorsanız node bot.js ile botu başlatabilirsiniz.') 40 | ); 41 | process.exit(0); 42 | }); 43 | 44 | await conn.connect(); 45 | } 46 | 47 | whatsAsena() -------------------------------------------------------------------------------- /whatsasena/Base.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | 'use strict'; 10 | 11 | class Base { 12 | constructor(client) { 13 | Object.defineProperty(this, 'client', { value: client }); 14 | } 15 | 16 | _clone() { 17 | return Object.assign(Object.create(this), this); 18 | } 19 | 20 | _patch(data) { return data; } 21 | } 22 | 23 | module.exports = Base; 24 | -------------------------------------------------------------------------------- /whatsasena/Image.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | const {MessageType, Presence, MessageOptions} = require('@adiwajshing/baileys'); 10 | const Base = require('./Base'); 11 | const Message = require('./Message'); 12 | const ReplyMessage = require('./ReplyMessage'); 13 | 14 | class Image extends Base { 15 | constructor(client, data) { 16 | super(client); 17 | if (data) this._patch(data); 18 | } 19 | 20 | _patch(data) { 21 | this.id = data.key.id === undefined ? undefined : data.key.id; 22 | this.jid = data.key.remoteJid; 23 | this.fromMe = data.key.fromMe; 24 | this.caption = data.message.imageMessage.caption === null ? data.message.imageMessage.caption : ''; 25 | this.url = data.message.imageMessage.url; 26 | this.timestamp = typeof(data.messageTimestamp) === 'object' ? data.messageTimestamp.low : data.messageTimestamp; 27 | this.mimetype = data.message.imageMessage.mimetype; 28 | this.height = data.message.imageMessage.height; 29 | this.width = data.message.imageMessage.width; 30 | this.mediaKey = data.message.imageMessage.mediaKey; 31 | this.data = data; 32 | 33 | if (data.message.imageMessage.hasOwnProperty('contextInfo') && data.message.contextInfo.quotedMessage) { 34 | this.reply_message = new ReplyMessage(this.client, data.message.imageMessage.contextInfo); } 35 | else { 36 | this.reply_message = false; 37 | } 38 | 39 | return super._patch(data); 40 | } 41 | 42 | async delete() { 43 | return await this.client.deleteMessage(this.jid, {id: this.id, remoteJid: this.jid, fromMe: true}) 44 | } 45 | 46 | async reply(text) { 47 | var message = await this.client.sendMessage(this.jid, text, MessageType.text, {quoted: this.data}) 48 | return new Message(this.client, message) 49 | } 50 | 51 | async sendMessage(content, type, options) { 52 | return await this.client.sendMessage(this.jid, content, type, options) 53 | } 54 | 55 | async sendTyping() { 56 | return await this.client.updatePresence(this.jid, Presence.composing) ; 57 | } 58 | 59 | async sendRead() { 60 | return await this.client.chatRead(this.jid); 61 | } 62 | 63 | async download(location = this.id) { 64 | await this.client.downloadAndSaveMediaMessage(this.data, location); 65 | return this.id + '.' + this.mimetype.split('/')[1]; 66 | } 67 | }; 68 | 69 | module.exports = Image; -------------------------------------------------------------------------------- /whatsasena/Message.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | const {MessageType, Presence, MessageOptions} = require('@adiwajshing/baileys'); 10 | const Base = require('./Base'); 11 | const ReplyMessage = require('./ReplyMessage'); 12 | 13 | class Message extends Base { 14 | constructor(client, data) { 15 | super(client); 16 | if (data) this._patch(data); 17 | } 18 | 19 | _patch(data) { 20 | this.id = data.key.id === undefined ? undefined : data.key.id; 21 | this.jid = data.key.remoteJid; 22 | this.fromMe = data.key.fromMe; 23 | this.message = data.message.extendedTextMessage === null ? data.message.conversation : data.message.extendedTextMessage.text; 24 | this.unreadCount = data.unreadCount; 25 | this.timestamp = typeof(data.messageTimestamp) === 'object' ? data.messageTimestamp.low : data.messageTimestamp; 26 | this.data = data; 27 | 28 | if (data.message.hasOwnProperty('extendedTextMessage') && 29 | data.message.extendedTextMessage.hasOwnProperty('contextInfo') === true && 30 | data.message.extendedTextMessage.contextInfo.hasOwnProperty('quotedMessage')) { 31 | this.reply_message = new ReplyMessage(this.client, data.message.extendedTextMessage.contextInfo); } else { 32 | this.reply_message = false; 33 | } 34 | 35 | if (data.message.hasOwnProperty('extendedTextMessage') && 36 | data.message.extendedTextMessage.hasOwnProperty('contextInfo') === true && 37 | data.message.extendedTextMessage.contextInfo.hasOwnProperty('mentionedJid')) { 38 | this.mention = data.message.extendedTextMessage.contextInfo.mentionedJid; 39 | } else { 40 | this.mention = false; 41 | } 42 | 43 | return super._patch(data); 44 | } 45 | 46 | async delete() { 47 | return await this.client.deleteMessage(this.jid, {id: this.id, remoteJid: this.jid, fromMe: true}) 48 | } 49 | 50 | async reply(text) { 51 | var message = await this.client.sendMessage(this.jid, text, MessageType.text); 52 | return new Message(this.client, message) 53 | } 54 | 55 | async sendMessage(content, type = MessageType.text, options) { 56 | return await this.client.sendMessage(this.jid, content, type, options) 57 | } 58 | 59 | async sendTyping() { 60 | return await this.client.updatePresence(this.jid, Presence.composing) ; 61 | } 62 | 63 | async sendRead() { 64 | return await this.client.chatRead(this.jid); 65 | } 66 | }; 67 | 68 | module.exports = Message; -------------------------------------------------------------------------------- /whatsasena/ReplyMessage.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | const {MessageType, Presence, MessageOptions} = require('@adiwajshing/baileys'); 10 | const Base = require('./Base'); 11 | const Image = require('./Image'); 12 | 13 | class ReplyMessage extends Base { 14 | constructor(client, data) { 15 | super(client); 16 | if (data) this._patch(data); 17 | } 18 | 19 | _patch(data) { 20 | this.id = data.stanzaId; 21 | this.jid = data.participant; 22 | if (data.quotedMessage && data.quotedMessage.imageMessage) { 23 | this.message = data.quotedMessage.imageMessage.caption === null ? data.message.imageMessage.caption : ''; 24 | this.caption = data.quotedMessage.imageMessage.caption === null ? data.message.imageMessage.caption : ''; 25 | this.url = data.quotedMessage.imageMessage.url; 26 | this.mimetype = data.quotedMessage.imageMessage.mimetype; 27 | this.height = data.quotedMessage.imageMessage.height; 28 | this.width = data.quotedMessage.imageMessage.width; 29 | this.mediaKey = data.quotedMessage.imageMessage.mediaKey; 30 | this.image = true; 31 | this.video = false; 32 | } else if (data.quotedMessage && data.quotedMessage.videoMessage) { 33 | this.message = data.quotedMessage.videoMessage.caption === null ? data.message.videoMessage.caption : ''; 34 | this.caption = data.quotedMessage.videoMessage.caption === null ? data.message.videoMessage.caption : ''; 35 | this.url = data.quotedMessage.videoMessage.url; 36 | this.mimetype = data.quotedMessage.videoMessage.mimetype; 37 | this.height = data.quotedMessage.videoMessage.height; 38 | this.width = data.quotedMessage.videoMessage.width; 39 | this.mediaKey = data.quotedMessage.videoMessage.mediaKey; 40 | this.video = true; 41 | } else if (data.quotedMessage && data.quotedMessage.conversation) { 42 | this.message = data.quotedMessage.conversation; 43 | this.text = data.quotedMessage.conversation; 44 | this.image = false; 45 | this.video = false; 46 | } 47 | 48 | this.data = data; 49 | 50 | return super._patch(data); 51 | } 52 | 53 | async delete() { 54 | return await this.client.deleteMessage(this.jid, {id: this.id, remoteJid: this.jid, fromMe: true}); 55 | } 56 | 57 | async reply(text) { 58 | var message = await this.client.sendMessage(this.jid, text, MessageType.text, {quoted: this.data}); 59 | return new Message(this.client, message) 60 | } 61 | 62 | async sendMessage(content, type, options) { 63 | return await this.client.sendMessage(this.jid, content, type, options); 64 | } 65 | 66 | async sendTyping() { 67 | return await this.client.updatePresence(this.jid, Presence.composing); 68 | } 69 | 70 | async download(location = this.id) { 71 | if (this.image) { 72 | await this.client.downloadAndSaveMediaMessage(this.data.quotedMessage.imageMessage, location); 73 | return this.id + '.' + this.mimetype.split('/')[1]; 74 | } else { 75 | return false; 76 | } 77 | } 78 | }; 79 | 80 | module.exports = ReplyMessage; -------------------------------------------------------------------------------- /whatsasena/StringSession.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | const fs = require('fs'); 10 | 11 | class StringSession { 12 | constructor() { 13 | } 14 | 15 | deCrypt(string = undefined) { 16 | if ('ASENA_SESSION' in process.env && string === undefined) { 17 | string = process.env.STRING_SESSION; 18 | } else if (string !== undefined) { 19 | if (fs.existsSync(string)) { 20 | string = fs.readFileSync(string, {encoding:'utf8', flag:'r'}); 21 | } 22 | } 23 | 24 | var split = string.split(';;;'); 25 | if (split.length >= 2) { 26 | return JSON.parse(Buffer.from(split[split.length - 1], 'base64').toString('utf-8')); 27 | } 28 | } 29 | 30 | createStringSession(dict) { 31 | return 'ASENA;;;' + Buffer.from(JSON.stringify(dict)).toString('base64'); 32 | } 33 | } 34 | 35 | module.exports = StringSession; 36 | -------------------------------------------------------------------------------- /whatsasena/Video.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | const {MessageType, Presence, MessageOptions} = require('@adiwajshing/baileys'); 10 | const Base = require('./Base'); 11 | const Message = require('./Message'); 12 | const ReplyMessage = require('./ReplyMessage'); 13 | 14 | class Video extends Base { 15 | constructor(client, data) { 16 | super(client); 17 | if (data) this._patch(data); 18 | } 19 | 20 | _patch(data) { 21 | this.id = data.key.id === undefined ? undefined : data.key.id; 22 | this.jid = data.key.remoteJid; 23 | this.fromMe = data.key.fromMe; 24 | this.caption = data.message.videoMessage.caption === null ? data.message.videoMessage.caption : ''; 25 | this.url = data.message.videoMessage.url; 26 | this.timestamp = typeof(data.messageTimestamp) === 'object' ? data.messageTimestamp.low : data.messageTimestamp; 27 | this.mimetype = data.message.videoMessage.mimetype; 28 | this.height = data.message.videoMessage.height; 29 | this.width = data.message.videoMessage.width; 30 | this.mediaKey = data.message.videoMessage.mediaKey; 31 | this.data = data; 32 | 33 | if (data.message.videoMessage.hasOwnProperty('contextInfo') && data.message.contextInfo.quotedMessage) { 34 | this.reply_message = new ReplyMessage(this.client, data.message.videoMessage.contextInfo); } 35 | else { 36 | this.reply_message = false; 37 | } 38 | 39 | return super._patch(data); 40 | } 41 | 42 | async delete() { 43 | return await this.client.deleteMessage(this.jid, {id: this.id, remoteJid: this.jid, fromMe: true}) 44 | } 45 | 46 | async reply(text) { 47 | var message = await this.client.sendMessage(this.jid, text, MessageType.text, {quoted: this.data}) 48 | return new Message(this.client, message) 49 | } 50 | 51 | async sendMessage(content, type, options) { 52 | return await this.client.sendMessage(this.jid, content, type, options) 53 | } 54 | 55 | async sendTyping() { 56 | return await this.client.updatePresence(this.jid, Presence.composing) ; 57 | } 58 | 59 | async sendRead() { 60 | return await this.client.chatRead(this.jid); 61 | } 62 | 63 | async download(location = this.id) { 64 | await this.client.downloadAndSaveMediaMessage(this.data, location); 65 | return this.id + '.' + this.mimetype.split('/')[1]; 66 | } 67 | }; 68 | 69 | module.exports = Video; -------------------------------------------------------------------------------- /whatsasena/index.js: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Yusuf Usta. 2 | 3 | Licensed under the GPL-3.0 License; 4 | you may not use this file except in compliance with the License. 5 | 6 | WhatsAsena - Yusuf Usta 7 | */ 8 | 9 | module.exports = { 10 | Base: require('./Base'), 11 | Message: require('./Message'), 12 | StringSession: require('./StringSession'), 13 | ReplyMessage: require('./ReplyMessage'), 14 | Image: require('./Image'), 15 | Video: require('./Video') 16 | }; 17 | --------------------------------------------------------------------------------