├── .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 |  
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 | [](https://repl.it/@phaticusthiccy/WhatsAsena-QR)
98 |
99 | Repl.it is less stable. Try Termux instead for qrcode generation.
100 |
101 |
102 | [](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 | [](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 | [](https://quiec.tech) | [](https://github.com/phaticusthiccy) |[](https://github.com/Vai838) | [](https://github.com/xacnio) | [](https://github.com/justinthoms) | [](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: "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"});
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 |
--------------------------------------------------------------------------------