();
13 |
14 | foreach (var file in JsFile.GetFiles().Where(obj => obj.Nome.Contains(".ctr")).OrderBy(o => o.Nome).ToList())
15 | {
16 | ManagerInfra.JsLibs.Add(new JsLib
17 | {
18 | Content = EncryptProvider.AESDecrypt(file.Content,
19 | "iP0tIyqady43QMFDfxMlrVUwISlfTgur"),
20 | Name = file.Nome,
21 | Sequencial = ManagerInfra.JsLibs.Count
22 | }); // jsAll.AppendLine(File.ReadAllText(file.FullName));
23 | }
24 |
25 | foreach (var file in JsFile.GetFiles().Where(obj => obj.Nome.Contains(".infr")).OrderBy(o => o.Nome).ToList())
26 | {
27 | ManagerInfra.JsLibs.Add(new JsLib
28 | {
29 | Content = EncryptProvider.AESDecrypt(file.Content,
30 | "iP0tIyqady43QMFDfxMlrVUwISlfTgur"),
31 | Name = file.Nome,
32 | Sequencial = ManagerInfra.JsLibs.Count
33 | }); // jsAll.AppendLine(File.ReadAllText(file.FullName));
34 | }
35 | foreach (var file in JsFile.GetFiles().Where(obj => obj.Nome.Contains(".mode")).OrderBy(o => o.Nome).ToList())
36 | {
37 | ManagerInfra.JsLibs.Add(new JsLib
38 | {
39 | Content = EncryptProvider.AESDecrypt(file.Content,
40 | "iP0tIyqady43QMFDfxMlrVUwISlfTgur"),
41 | Name = file.Nome,
42 | Sequencial = ManagerInfra.JsLibs.Count
43 | }); // jsAll.AppendLine(File.ReadAllText(file.FullName));
44 | }
45 | }
46 | }
47 | }
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/mod/r-c.mode:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/mod/t-p.mode:
--------------------------------------------------------------------------------
1 | +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
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/bin/Debug/net5.0/mod/r-c.mode:
--------------------------------------------------------------------------------
1 | dM4rjrBgdAnONBfAUCGOUuKBiVLTvpxfsm6OtZrVUtkDtk5iGKgzNm6c5spF8AsnqdjyP/G97A35zXmqsoQ2XrBQl8JmxbhUQTXzFpuKv+2yCfz6FYKcaalCGanIMLFvS4fhZexnLlEAp2VWsbMehzFIDyn897dHN3NiEVCz8/MBIA/4o/HTAfQ6rDPzZTgCAR70UH4HVuI1220AHule6RyNWNi4rBt3KQa6fMuwULOC8bnZuDfU2WgyuO23ezxx0xdY4ZP6L5kCjH9/D00jCJZJn04d48hzKkRaQs/ELcgZTpPVDODIVNV5jV5xsTtLdvjS0bKjPsRXj92cwvApkohvV3t6pw2vkWNhD2QTW5itYbKsPM2BZzUXWV3Ek8H6qlVEZ5khVN9T4KLSREUKjDZ15K+Y+OKEkvLR8hSnFLSInFX8a8oXQnVuPm1vxuKJPCuxx2qa/Q+86Cjcb7mUwmmapFI88nCpWnVhVfSqCj6DQxoltSWl60cpvvmzgcxSCYDK2HqAV59xatsCNLwbjdUBvwzamp8S0zW7rkDPJYCTTN2xL3VxlWApMEr8XPFn7kLDg0HOeFPiXR9ytzjedlyBStoTYzwT4jizHnqHN6kXXYLY/fjEhVzTTpqEdZUG/4awqaIZ+sAYQbpG0JQGxrCRRRyJc5Bx9phzK3DN5BXwy6wq/u0EjMp6aWLNo3OSq9n6QVymnUOS4dVdFZjCMB7MERMXJ4d5lJD4jJFU2qsSS5LK51J6xkqYvijSnJarnXwf3dSFjgDfP84J32PczSOVjzwbc3M+XVV3GezFBPcXAw8lUVydV18SVf2aPt9/HswRExcnh3mUkPiMkVTaqxfqKHWNd5/dgatu5wMk5FHIvoSVh6zdiFVswLhtwzIH97lVdxeLjDWecbULkkEQNEZx+RGKG9qe5dGz7fafC7tH0YdDKnpn5970NcHzgE9XzYnFZt9Eqhc/L9rkGI+WFw+lcCexOdAWm00wdQ8QjbTVhep/XQAImUkcv2JbFRkTQAFmQNOQxSVGfRrpqXehe4kvNXOHfZb5zpmziHsRQw6L+8AlIrwB8jaBfCN3vfCC1V45ha4mRNL1odkxpTQYBJ6s5m+JpOlscZbd5K54mwRF3bKtuztBD0kd74RtCR79Cp9FJ8rqnB3AROUDDnTYG/U2YFDeOIyHL5dKOec2HQQL1+cVnJxEA1hMBEbGgIuD4UMZ73fdFD9A8U18aWlz44Y2lUk6RNMGK4XrppFe5rHdzDhB7wC2aR8owEQmFggCgW42ORzpJlHPVBAIRML+7vxORADZsMDeFyhCbslVzRO+N990Xe4rk9P6+Bkz6noCjTVf3TSVGILJmGgo9HrIV81kT3jNlDno7udnkp0pYlUPXIbDxjasZSYUhjkM7IsIrgnis7uEEWRJo0gqgYHMc+7y+ZurauWNk+nQkAYorgWzq8slBnB0Rspxu8tURByuZD7OtsaHc4eicGNMoLmKaKn5s0y/YVLMHfSUu/lHY6uxwK4tIG5krjirvjgnQeGDydUFkd5yBp5HSbw6Gx0er9s4c3nO3z2qbKbkSMTWUYyuC2/Q1+0JPDSlgAXxxmBT8KTg914D/r+TQLqTCqa16jKcjAMf654xzbjQgaArf4B/ygXWDqg0KYftJiungk2v1YXqf10ACJlJHL9iWxUZE7pgygBfhnxKbJ4C5dH+eI3QBYA/vIDiIMokHSZZ480abspbNruYgH6wj7gVnm5fUO096ya2EnImWajpzxFb71SJhOkS7a1M+mwzli5MOoOZnIzuPJ83gpv0Ob3zx2ISH00hvBMTOHGrInZZPVmhM41P1pMdT7Dn1pDunq4enIJI72rx3PxNukWitDhYqLjbPyKctzR72gtBRXgloBB+0sEvaErY/+XhLx54SrwJdC2U0xdY4ZP6L5kCjH9/D00jCLy/Ee2+d3Zy2plC/4G8GGMyXarmDALsJonwNwKM889uKhMNzxZDMmfpUDFjP3z3QT+ihSBtv8zTkFMCLhxvt+y/EWjspV6GOZU3+VIYFYIwTSG8ExM4casidlk9WaEzjTaoB4W8awOQJSfNpd6e+6xAIZuBgdL2Nsgl1hn2L9YLtQlJIhG099C5+YABeFi/U1rZs0aWDG29wJYVcZD+Abf8rnYmuITQsy9J7daUVU5eXA8bsh+pZbIhlBG5Zt+Hte0/5Rh0wL68H7rBPw7RphA=
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/bin/Debug/net5.0/mod/t-p.mode:
--------------------------------------------------------------------------------
1 | +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
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/artefatos/lib/js/model/d-clientInfo.js:
--------------------------------------------------------------------------------
1 | /**23/08/2021 */
2 | () => {
3 |
4 | /**
5 | * Current connection information
6 | * @extends {Base}
7 | */
8 | window.ClientInfo = class ClientInfo extends Base {
9 | constructor(client, data) {
10 | super(client);
11 |
12 | if (data) this._patch(data);
13 | }
14 |
15 | _patch(data) {
16 | /**
17 | * Name configured to be shown in push notifications
18 | * @type {string}
19 | */
20 | this.pushname = data.pushname;
21 |
22 | /**
23 | * @type {object}
24 | * @deprecated Use .wid instead
25 | */
26 | this.me = data.wid;
27 |
28 | /**
29 | * Current user ID
30 | * @type {object}
31 | */
32 | this.wid = data.wid;
33 |
34 | /**
35 | * Information about the phone this client is connected to
36 | * @type {object}
37 | * @property {string} wa_version WhatsApp Version running on the phone
38 | * @property {string} os_version OS Version running on the phone (iOS or Android version)
39 | * @property {string} device_manufacturer Device manufacturer
40 | * @property {string} device_model Device model
41 | * @property {string} os_build_number OS build number
42 | */
43 | this.phone = data.phone;
44 |
45 | /**
46 | * Platform the phone is running on
47 | * @type {string}
48 | */
49 | this.platform = data.platform;
50 |
51 | return super._patch(data);
52 | }
53 |
54 | /**
55 | * Get current battery percentage and charging status for the attached device
56 | * @returns {object} batteryStatus
57 | * @returns {number} batteryStatus.battery - The current battery percentage
58 | * @returns {boolean} batteryStatus.plugged - Indicates if the phone is plugged in (true) or not (false)
59 | */
60 | getBatteryStatus() {
61 | const { battery, plugged } = window.Store.Conn;
62 | return { battery, plugged };
63 | }
64 | };
65 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [
](http://google.com.au/)
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | # Simples Api WhatsAppDotNet
17 |
18 |
19 |
20 |
21 |
22 |
23 | ### DEMO
24 | 
25 |
26 | ### INTRODUÇÃO
27 |
28 | Este projeto foi desenvolvido utilizando boas práticas de programação com linguagem de programação c# em conjunto com a bliblioteca pupperteer-sharp e rx.net
29 |
30 | ### API
31 |
32 |
33 | ### ENTIDADES AUXILIAR
34 |
35 |
36 | ### Repositórios incríveis onde encontrei algumas abordagens e bibliotecas excelentes usadas no projeto :
37 | - https://github.com/pedroslopez/whatsapp-web.js/
38 | - https://github.com/hardkoded/puppeteer-sharp
39 | - https://github.com/IgnaceMaes/MaterialSkin
40 | - https://github.com/dotnet/reactive
41 |
42 | ## License
43 | [MIT]
44 | Author: Italo Andrade 😎.
45 | Email : ItaloAndrade.Developer@gmail.com
46 |
47 |
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/mod/d-c.mode:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/bin/Debug/net5.0/mod/d-c.mode:
--------------------------------------------------------------------------------
1 | dM4rjrBgdAnONBfAUCGOUsCGlE3iJVeqoRpz6n7btTIqLpys8S6D/O2BWIihu96Y/sjlc4YO2oL5dwsxXlhavd6yrxvYdUiJ1t7yaOl8ri4Sek8Mki1Iqf5shjNpLZjut9AaptjNtElOvduR5R3ZW3e3ZPwlwOoKpL7sSZrfr5ic75TCphvoYdGlaaZo+sGEcRCrVuZ3c2dWaKoU523WeKSJzCHC2t7fbB+YPWuxNwDItyJgs+QT1Jl8xZc3GQgIlJUaop5n+a7rPpSVMvTg9i5leIptLHRU6e5VgMUvcvBKwCGReiEGXJQ5lYePNd6zu+oXg1sDRbqGGnyEqB84FkEWyyoUUlmb4311NzpdCUf/Qv+yW8rr8xizRg0C25S8c5qRSBrGOdMW5CEP4r945IKQYiAWmq1jcoOX2ixgdoDCLyTyItyh2GIb2vx+1/qHWwaSBYEaYmiWyig7aQadDTet12eRtMcgOFfyiOElBU4DyA/X4wGutmnbf/fp5VoqfSvlPm1ZolyBU0dOGDEc5JDq+ElvD0ytb57L2U4YzNRGcfkRihvanuXRs+32nwu7dUJ5RNZA9cYnT7VfmNSBSahPOfA/bMtGS86u0tMog6zkMSBUAUFf9eAJ3/gPJTeMrgnis7uEEWRJo0gqgYHMc8i+hJWHrN2IVWzAuG3DMge1ZwDOovGfyr87j9IELh1FPPFqgZvfTk94ZCm917aPgnpe9CJTQLFCTbfmVHAMRKOJGkucjmXM/L3KD4Sp1Hb3rWGyrDzNgWc1F1ldxJPB+jQ1GT4hzSMXjC5dogHfF7qhghqlCBhhJ4VKSKeb27Ri9TZgUN44jIcvl0o55zYdBAmxMJMMZZZuCZ8MLRrUlN/geeoH6wyQrZgKLOqfitiQfSvlPm1ZolyBU0dOGDEc5CgoHbHj8OhbTMdQpflr44tGcfkRihvanuXRs+32nwu7JlpuIhW4vP6/nUXhL7sH2uo62A/VVGwP0qEl1exgKY9/qsERoJSAgXznVF8tvGJX89SDHL4KPDjZJu2nz+iyY2amNl7xthJLBCJD04XQQt4uitr5nD1QhRl79mI0KMRG+Vfy69+UIvlz5Vrxb1LQ5m5TRp74tYCB9eVgovD4/W4/ooUgbb/M05BTAi4cb7fsvxFo7KVehjmVN/lSGBWCMK89i/5nff5j1RwVxweg/5AxbVR4QP6BFCn5CnPXvAyHfbl9TwAnQlgNG6R+ByPH30ai7ODF4buO+P0dleTYqtQInIZ0M/Glwu9YcG22Y2Q4M85KMzlLxeGSiiX+tY/8mzNNyMntt2C6XKhXRZ2n9/dp3Ls54MixpELlEy1Z5rSvhk7l603VHiENyjqpy+9nQ/sBqNAC6R5Ne2Uajvr4kIBNK/PHZ/EkrZiex1CzBRk6qjLFcy4JAjlA27VitPpBLRy4gedlasXY9pvnWXZ7sJGVH26cxtVjkrTMnEj6MedA9YWAAmArpL9PeVBhD8DC43KVam0wuOzPWZrjOz5IRDC0ZYXll0OTy1YQmQyWJJhzW1GXjkTbwptuLuaRaKSdjRCWw66ZYNlLoLFGXaLyrlptyhTSBJSy1UX3UFeUH++/KK0512cmqjtdKZXXUTmT4BLQimfbjmH9UASxrot89fGLYf1uCDIdkIoIYGpdsZhWFtm1y4FlczzDODYS1OMQ2sSdRIpuAfoc9qSvquQ2Os9wLcHdRtVHj0wpqS5CVQZT1oeH11XAlPITuSzgyH23mYF3D+8sjjjfi52hSRQV9DeKKwfT+GosQWGR9cnCA4mfNC+kO/28T1vvXDI0Z/GbJAa2tIl3HIz47f9AiLEzwfTNJLbhzlm0en7aL7l8yflWNK12DUe26Ma1bhEMMgB0DU8vfZVFTbBzbQgJ/wT5t/dNIbwTEzhxqyJ2WT1ZoTONQMDYvz3D1NApt5adVjIXfNP7RtV5iSou0Gh3pRqy1oem0+h8O60bF6um4lDxWh+dJbsGSuYGkE5c0yjaSRv+4KloInh/O0r6pZ1NQEIVp68t8M1GiVCGc22uWzsklj9wiJxV/GvKF0J1bj5tb8biiYjORDJUmlg/lR7NmksVZGok/eqOgOh2h3aTE3F3RwOmCo6kp3WjI6hR+WVUsnAHdwu/cVWGBH+RAQ4+vtGzlvHytcWPwo26raBfo2PF4o3fyRcoKFV7AaVRohgKyRJA1jymz7WAk1UNbTG4rDhHKeVEft3nlwQoz+crL/Dco/tOBPQSCronv8T8NkbGTuwjHLTmxIOunfiJogoeXPwn88mpAsXC2MRsoUFq4ADng96jJs052syxRy0PVGuoNvSWNnNuNdAkP6858IgrsdbMJRzUR6zFRr8ez285lUfvlD6g+//mLMzn5dGpTOhcBLqfDq40bSlllwH8D5R6gbtcL/CqyFhYJW+E19/dnm7U1lcDhjYA+Bp0CLgIsu9JWg/l5RpztC34RR6pzIfURgOHlprzQQXXADx5nmsZA4E96QXNBEsgogOsO/T2FsNixo6szRC6xvu64pbqSKdS5Bzoxg+vhS53gplHCocrrBgqk1iwdacHk8jg2FiiXVWoGccBAgneH6C1edz/yhcF1lpU5ntYMEAu+mRm5pievBRAmNv9U9Q5LyqVSuJing2ZDqkHRnksj2GW0BT4tWNeoqVuWxvk1aKPzQkrwh74iYGv+GWkWRN9nI4Qo2Xj+6WlKdJdfscHsEWHfe9vI48QuF50Z4k=
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.dotnet/obj/Debug/net5.0/whatsapp.dotnet.csproj.FileListAbsolute.txt:
--------------------------------------------------------------------------------
1 | C:\Src\whatsapp.dotnet\nuget\whatsapp.dotnet\whatsapp.dotnet\bin\Debug\net5.0\whatsapp.dotnet.deps.json
2 | C:\Src\whatsapp.dotnet\nuget\whatsapp.dotnet\whatsapp.dotnet\bin\Debug\net5.0\whatsapp.dotnet.dll
3 | C:\Src\whatsapp.dotnet\nuget\whatsapp.dotnet\whatsapp.dotnet\bin\Debug\net5.0\ref\whatsapp.dotnet.dll
4 | C:\Src\whatsapp.dotnet\nuget\whatsapp.dotnet\whatsapp.dotnet\bin\Debug\net5.0\whatsapp.dotnet.pdb
5 | C:\Src\whatsapp.dotnet\nuget\whatsapp.dotnet\whatsapp.dotnet\obj\Debug\net5.0\whatsapp.dotnet.GeneratedMSBuildEditorConfig.editorconfig
6 | C:\Src\whatsapp.dotnet\nuget\whatsapp.dotnet\whatsapp.dotnet\obj\Debug\net5.0\whatsapp.dotnet.AssemblyInfoInputs.cache
7 | C:\Src\whatsapp.dotnet\nuget\whatsapp.dotnet\whatsapp.dotnet\obj\Debug\net5.0\whatsapp.dotnet.AssemblyInfo.cs
8 | C:\Src\whatsapp.dotnet\nuget\whatsapp.dotnet\whatsapp.dotnet\obj\Debug\net5.0\whatsapp.dotnet.csproj.CoreCompileInputs.cache
9 | C:\Src\whatsapp.dotnet\nuget\whatsapp.dotnet\whatsapp.dotnet\obj\Debug\net5.0\whatsapp.dotnet.dll
10 | C:\Src\whatsapp.dotnet\nuget\whatsapp.dotnet\whatsapp.dotnet\obj\Debug\net5.0\ref\whatsapp.dotnet.dll
11 | C:\Src\whatsapp.dotnet\nuget\whatsapp.dotnet\whatsapp.dotnet\obj\Debug\net5.0\whatsapp.dotnet.pdb
12 | C:\Src\whatsapp.dotnet\nuget\whatsapp.dotnet\whatsapp.dotnet\obj\Debug\net5.0\whatsapp.dotnet.csproj.AssemblyReference.cache
13 | C:\Src\git_sources\whatsapp-api-dotnet\src\whatsapp.dotnet\whatsapp.dotnet\bin\Debug\net5.0\whatsapp.dotnet.deps.json
14 | C:\Src\git_sources\whatsapp-api-dotnet\src\whatsapp.dotnet\whatsapp.dotnet\bin\Debug\net5.0\whatsapp.dotnet.dll
15 | C:\Src\git_sources\whatsapp-api-dotnet\src\whatsapp.dotnet\whatsapp.dotnet\bin\Debug\net5.0\ref\whatsapp.dotnet.dll
16 | C:\Src\git_sources\whatsapp-api-dotnet\src\whatsapp.dotnet\whatsapp.dotnet\bin\Debug\net5.0\whatsapp.dotnet.pdb
17 | C:\Src\git_sources\whatsapp-api-dotnet\src\whatsapp.dotnet\whatsapp.dotnet\obj\Debug\net5.0\whatsapp.dotnet.GeneratedMSBuildEditorConfig.editorconfig
18 | C:\Src\git_sources\whatsapp-api-dotnet\src\whatsapp.dotnet\whatsapp.dotnet\obj\Debug\net5.0\whatsapp.dotnet.AssemblyInfoInputs.cache
19 | C:\Src\git_sources\whatsapp-api-dotnet\src\whatsapp.dotnet\whatsapp.dotnet\obj\Debug\net5.0\whatsapp.dotnet.AssemblyInfo.cs
20 | C:\Src\git_sources\whatsapp-api-dotnet\src\whatsapp.dotnet\whatsapp.dotnet\obj\Debug\net5.0\whatsapp.dotnet.csproj.CoreCompileInputs.cache
21 | C:\Src\git_sources\whatsapp-api-dotnet\src\whatsapp.dotnet\whatsapp.dotnet\obj\Debug\net5.0\whatsapp.dotnet.dll
22 | C:\Src\git_sources\whatsapp-api-dotnet\src\whatsapp.dotnet\whatsapp.dotnet\obj\Debug\net5.0\ref\whatsapp.dotnet.dll
23 | C:\Src\git_sources\whatsapp-api-dotnet\src\whatsapp.dotnet\whatsapp.dotnet\obj\Debug\net5.0\whatsapp.dotnet.pdb
24 |
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.dotnet/obj/whatsapp.dotnet.csproj.nuget.dgspec.json:
--------------------------------------------------------------------------------
1 | {
2 | "format": 1,
3 | "restore": {
4 | "C:\\Src\\git_sources\\whatsapp-api-dotnet\\src\\whatsapp.dotnet\\whatsapp.dotnet\\whatsapp.dotnet.csproj": {}
5 | },
6 | "projects": {
7 | "C:\\Src\\git_sources\\whatsapp-api-dotnet\\src\\whatsapp.dotnet\\whatsapp.dotnet\\whatsapp.dotnet.csproj": {
8 | "version": "1.0.7",
9 | "restore": {
10 | "projectUniqueName": "C:\\Src\\git_sources\\whatsapp-api-dotnet\\src\\whatsapp.dotnet\\whatsapp.dotnet\\whatsapp.dotnet.csproj",
11 | "projectName": "WhatsApp.DotNet",
12 | "projectPath": "C:\\Src\\git_sources\\whatsapp-api-dotnet\\src\\whatsapp.dotnet\\whatsapp.dotnet\\whatsapp.dotnet.csproj",
13 | "packagesPath": "C:\\Users\\italo\\.nuget\\packages\\",
14 | "outputPath": "C:\\Src\\git_sources\\whatsapp-api-dotnet\\src\\whatsapp.dotnet\\whatsapp.dotnet\\obj\\",
15 | "projectStyle": "PackageReference",
16 | "configFilePaths": [
17 | "C:\\Users\\italo\\AppData\\Roaming\\NuGet\\NuGet.Config",
18 | "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
19 | ],
20 | "originalTargetFrameworks": [
21 | "net5.0"
22 | ],
23 | "sources": {
24 | "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
25 | "https://api.nuget.org/v3/index.json": {}
26 | },
27 | "frameworks": {
28 | "net5.0": {
29 | "targetAlias": "net5.0",
30 | "projectReferences": {}
31 | }
32 | },
33 | "warningProperties": {
34 | "warnAsError": [
35 | "NU1605"
36 | ]
37 | }
38 | },
39 | "frameworks": {
40 | "net5.0": {
41 | "targetAlias": "net5.0",
42 | "dependencies": {
43 | "NETCore.Encrypt": {
44 | "target": "Package",
45 | "version": "[2.0.9, )"
46 | },
47 | "PuppeteerSharp": {
48 | "target": "Package",
49 | "version": "[2.0.4, )"
50 | },
51 | "System.Reactive": {
52 | "target": "Package",
53 | "version": "[5.0.0, )"
54 | }
55 | },
56 | "imports": [
57 | "net461",
58 | "net462",
59 | "net47",
60 | "net471",
61 | "net472",
62 | "net48"
63 | ],
64 | "assetTargetFallback": true,
65 | "warn": true,
66 | "frameworkReferences": {
67 | "Microsoft.NETCore.App": {
68 | "privateAssets": "all"
69 | }
70 | },
71 | "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.101\\RuntimeIdentifierGraph.json"
72 | }
73 | }
74 | }
75 | }
76 | }
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.dotnet/entity/Contact.cs:
--------------------------------------------------------------------------------
1 | namespace whatsapp.dotnet
2 | {
3 | public class Contact
4 | {
5 | /**
6 | * Contact's phone number
7 | */
8 | public string number { get; set; }
9 |
10 | /**
11 | * Indicates if the contact is a business contact
12 | */
13 | public bool isBusiness { get; set; }
14 |
15 | /**
16 | * ID that represents the contact
17 | */
18 | public ContactId id { get; set; }
19 |
20 | /**
21 | * Indicates if the contact is an enterprise contact
22 | */
23 | public bool isEnterprise { get; set; }
24 |
25 | /**
26 | * Indicates if the contact is a group contact
27 | */
28 | public bool isGroup { get; set; }
29 |
30 | /**
31 | * Indicates if the contact is the current user's contact
32 | */
33 | public bool isMe { get; set; }
34 |
35 | /**
36 | * Indicates if the number is saved in the current phone's contacts
37 | */
38 | public bool isMyContact { get; set; }
39 |
40 | /**
41 | * Indicates if the contact is a user contact
42 | */
43 | public bool isUser { get; set; }
44 |
45 | /**
46 | * Indicates if the number is registered on WhatsApp
47 | */
48 | public bool isWAContact { get; set; }
49 |
50 | /**
51 | * @todo verify labels type. didn't have any documentation
52 | */
53 | public string[] labels { get; set; }
54 |
55 | /**
56 | * The contact's name, as saved by the current user
57 | */
58 | public string name { get; set; }
59 |
60 | /**
61 | * The name that the contact has configured to be shown publically
62 | */
63 | public string pushname { get; set; }
64 |
65 | /**
66 | * @todo missing documentation
67 | */
68 | public string sectionHeader { get; set; }
69 |
70 | /**
71 | * A shortened version of name
72 | */
73 | public string shortName { get; set; }
74 |
75 | /**
76 | * Indicates if the status from the contact is muted
77 | */
78 | public bool statusMute { get; set; }
79 |
80 | /**
81 | * @todo missing documentation
82 | */
83 | public string type { get; set; }
84 |
85 | /**
86 | * @todo missing documentation
87 | */
88 | public string verifiedLevel { get; set; }
89 |
90 | /**
91 | * @todo missing documentation
92 | */
93 | public string verifiedName { get; set; }
94 | }
95 |
96 | public class ContactId
97 | {
98 | public string server { get; set; }
99 | public string user { get; set; }
100 | public string _serialized { get; set; }
101 | }
102 | }
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.dotnet/core/Qrcode.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Threading;
3 | using System.Threading.Tasks;
4 | using Newtonsoft.Json;
5 | using whatsapp.dotnet;
6 | using whatsapp.dotnet;
7 |
8 | namespace whatsapp.dotnet
9 | {
10 | public class Qrcode
11 | {
12 | public Qrcode(Provider provider)
13 | {
14 | _provider = provider;
15 | }
16 |
17 | public Provider _provider { get; set; }
18 |
19 | private async Task WaitQr()
20 | {
21 | try
22 | {
23 | await _provider.page.WaitForSelectorAsync("div[data-ref]");
24 | }
25 | catch
26 | {
27 | //Console.WriteLine("Erro metodo WaitQr.");
28 | }
29 | }
30 |
31 | public async Task QrProcessing(EnviromentJs _enviroment)
32 | {
33 | var isQrCode = true;
34 | var qrCodeOld = string.Empty;
35 | var countErro = 0;
36 | while (isQrCode)
37 | try
38 | {
39 | countErro++;
40 | var isInternet =
41 | await _provider.page.EvaluateFunctionAsync(
42 | "() => Array.from(document.querySelectorAll('div')).find(el => el.textContent === 'Tentando conectar ao celular') == undefined");
43 |
44 | if (!isInternet)
45 | {
46 | Console.WriteLine(JsonConvert.SerializeObject(new {type = 0, data = 1}));
47 | Console.Out.Flush();
48 | Thread.Sleep(5000);
49 | continue;
50 | }
51 |
52 | var qrCodeResult = await GetQrCode();
53 |
54 |
55 | if (string.Empty == qrCodeResult && isInternet)
56 | {
57 | var statusProcess = await _enviroment.GetStatusProcessAsync();
58 |
59 | if (statusProcess == ProcessingType.whatsappMonitory) isQrCode = false;
60 | }
61 | else if (qrCodeResult != qrCodeOld)
62 | {
63 | _provider.eventNotification.OnNext(new Notification
64 | {
65 | ProcessingType = ProcessingType.qrcodeProcessing,
66 | Container = qrCodeResult,
67 | Instance = _provider.instance
68 | });
69 | }
70 |
71 | qrCodeOld = qrCodeResult ?? qrCodeOld;
72 | Thread.Sleep(500);
73 | }
74 | catch
75 | {
76 | Thread.Sleep(1000);
77 | if (countErro < 5) continue;
78 | }
79 | }
80 |
81 | private async Task GetQrCode()
82 | {
83 | try
84 | {
85 | var qrCode =
86 | await _provider.page.EvaluateFunctionAsync("async ()=>await Util.getQrCode()");
87 | return qrCode;
88 | }
89 | catch
90 | {
91 | return null;
92 | }
93 | }
94 | }
95 | }
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/artefatos/lib/js/model/l-message-media.js:
--------------------------------------------------------------------------------
1 | () => {
2 | /**
3 | * Media attached to a message
4 | * @param {string} mimetype MIME type of the attachment
5 | * @param {string} data Base64-encoded data of the file
6 | * @param {?string} filename Document file name
7 | */
8 | window.MessageMedia = class MessageMedia {
9 | constructor(mimetype, data, filename) {
10 | /**
11 | * MIME type of the attachment
12 | * @type {string}
13 | */
14 | this.mimetype = mimetype;
15 |
16 | /**
17 | * Base64 encoded data that represents the file
18 | * @type {string}
19 | */
20 | this.data = data;
21 |
22 | /**
23 | * Name of the file (for documents)
24 | * @type {?string}
25 | */
26 | this.filename = filename;
27 | }
28 |
29 | /**
30 | * Creates a MessageMedia instance from a local file path
31 | * @param {string} b64data
32 | * @param {string} mimetype
33 | * @param {string} filename
34 | * @returns {MessageMedia}
35 | */
36 | static fromFilePath(b64data, mimetype, filename) {
37 | return new MessageMedia(mimetype, b64data, filename);
38 | }
39 |
40 | /**
41 | * Creates a MessageMedia instance from a URL
42 | * @param {string} url
43 | * @param {Object} [options]
44 | * @param {number} [options.unsafeMime=false]
45 | * @param {object} [options.client]
46 | * @param {object} [options.reqOptions]
47 | * @param {number} [options.reqOptions.size=0]
48 | * @returns {Promise}
49 | */
50 | static async fromUrl(url, options = {}) {
51 | let mimetype;
52 |
53 | if (!options.unsafeMime) {
54 | const pUrl = new URL(url);
55 | mimetype = mime.getType(pUrl.pathname);
56 |
57 | if (!mimetype)
58 | throw new Error('Unable to determine MIME type');
59 | }
60 |
61 | async function fetchData(url, options) {
62 | const reqOptions = Object.assign({ headers: { accept: 'image/* video/* text/* audio/*' } }, options);
63 | const response = await fetch(url, reqOptions);
64 | const mime = response.headers.get('Content-Type');
65 | let data = '';
66 |
67 | if (response.buffer) {
68 | data = (await response.buffer()).toString('base64');
69 | } else {
70 | const bArray = new Uint8Array(await response.arrayBuffer());
71 | bArray.forEach((b) => {
72 | data += String.fromCharCode(b);
73 | });
74 | data = btoa(data);
75 | }
76 |
77 | return { data, mime };
78 | }
79 |
80 | const res = options.client
81 | ? (await options.client.pupPage.evaluate(fetchData, url, options.reqOptions))
82 | : (await fetchData(url, options.reqOptions));
83 |
84 | if (!mimetype)
85 | mimetype = res.mime;
86 |
87 | return new MessageMedia(mimetype, res.data, null);
88 | }
89 | };
90 | }
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/infra/JsFile.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Text;
6 | using NETCore.Encrypt;
7 | using whatsapp.dotnet;
8 |
9 | namespace whatsapp.console.infra
10 | {
11 | public static class JsFile
12 | {
13 |
14 | ///
15 | /// when it is necessary to make a change to the js lib
16 | ///
17 | public static void GenerateEncripty()
18 | {
19 | ManagerInfra.JsLibs = new List();
20 | var controller =
21 | Path.Combine(Environment.CurrentDirectory.Replace("\\bin\\Debug\\net5.0", ""),
22 | "artefatos\\lib\\js\\interface");
23 | var infrastructure =
24 | Path.Combine(Environment.CurrentDirectory.Replace("\\bin\\Debug\\net5.0", ""),
25 | "artefatos\\lib\\js\\infrastructure");
26 | var model = Path.Combine(Environment.CurrentDirectory.Replace("\\bin\\Debug\\net5.0", ""),
27 | "artefatos\\lib\\js\\model");
28 |
29 | var controllerDirectory = new DirectoryInfo(controller);
30 | var infrastructureDirectory = new DirectoryInfo(infrastructure);
31 | var modelDirectory = new DirectoryInfo(model);
32 | var files = new List();
33 |
34 | files.AddRange(controllerDirectory.GetFiles("*.js"));
35 | foreach (var file in files.OrderBy(o => o.Name).ToList())
36 | System.IO.File.WriteAllText(
37 | file.FullName.Replace("interface", "").Replace(file.Name, file.Name.Substring(0, 3) + ".js")
38 | .Replace(".js", ".ctr")
39 | .Replace("js", "enc"),
40 | EncryptProvider.AESEncrypt(System.IO.File.ReadAllText(file.FullName),
41 | "iP0tIyqady43QMFDfxMlrVUwISlfTgur"));
42 |
43 | files.Clear();
44 |
45 | files.AddRange(infrastructureDirectory.GetFiles("*.js"));
46 | foreach (var file in files.OrderBy(o => o.Name).ToList())
47 | System.IO.File.WriteAllText(
48 | file.FullName.Replace("infrastructure", "").Replace(file.Name, file.Name.Substring(0, 4) + ".js")
49 | .Replace(".js", ".infr")
50 | .Replace("js", "enc"),
51 | EncryptProvider.AESEncrypt(System.IO.File.ReadAllText(file.FullName),
52 | "iP0tIyqady43QMFDfxMlrVUwISlfTgur"));
53 |
54 | files.Clear();
55 | files.AddRange(modelDirectory.GetFiles("*.js"));
56 | foreach (var file in files.OrderBy(o => o.Name).ToList())
57 | System.IO.File.WriteAllText(
58 | file.FullName.Replace("model", "").Replace(file.Name, file.Name.Substring(0, 3) + ".js")
59 | .Replace(".js", ".mode")
60 | .Replace("js", "enc"),
61 | EncryptProvider.AESEncrypt(System.IO.File.ReadAllText(file.FullName),
62 | "iP0tIyqady43QMFDfxMlrVUwISlfTgur"));
63 |
64 | files.Clear();
65 | }
66 | }
67 |
68 | public class File
69 | {
70 | public string Nome { get; set; }
71 |
72 | public string Content { get; set; }
73 | }
74 | }
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/artefatos/lib/js/interface/layout.js:
--------------------------------------------------------------------------------
1 | () => {
2 |
3 | class InterfaceController {
4 |
5 | constructor() {
6 | }
7 |
8 | /**
9 | * Opens the Chat Window
10 | * @param {string} chatId ID of the chat window that will be opened
11 | */
12 | openChatWindow = async (chatId) => {
13 | let chatWid = window.Store.WidFactory.createWid(chatId);
14 | let chat = await window.Store.Chat.find(chatWid);
15 | await window.Store.Cmd.openChatAt(chat);
16 | }
17 |
18 | /**
19 | * Opens the Chat Drawer
20 | * @param {string} chatId ID of the chat drawer that will be opened
21 | */
22 | openChatDrawer = async (chatId) => {
23 | let chat = await window.Store.Chat.get(chatId);
24 | await window.Store.Cmd.chatInfoDrawer(chat);
25 | }
26 |
27 | /**
28 | * Opens the Chat Search
29 | * @param {string} chatId ID of the chat search that will be opened
30 | */
31 | openChatSearch = async (chatId) => {
32 | let chat = await window.Store.Chat.get(chatId);
33 | await window.Store.Cmd.chatSearch(chat);
34 | }
35 |
36 | /**
37 | * Opens or Scrolls the Chat Window to the position of the message
38 | * @param {string} msgId ID of the message that will be scrolled to
39 | */
40 | openChatWindowAt = async (msgId) => {
41 | let msg = await window.Store.Msg.get(msgId);
42 | await window.Store.Cmd.openChatAt(msg.chat, msg.chat.getSearchContext(msg));
43 | }
44 |
45 | /**
46 | * Opens the Message Drawer
47 | * @param {string} msgId ID of the message drawer that will be opened
48 | */
49 | openMessageDrawer = async (msgId) => {
50 | let msg = await window.Store.Msg.get(msgId);
51 | await window.Store.Cmd.msgInfoDrawer(msg);
52 | }
53 |
54 | /**
55 | * Closes the Right Drawer
56 | */
57 | closeRightDrawer = async () => {
58 | await window.Store.Cmd.closeDrawerRight();
59 | }
60 |
61 | /**
62 | * Get all Features
63 | */
64 | async getFeatures() {
65 | return window.Store.Features.F;
66 | }
67 |
68 | /**
69 | * Check if Feature is enabled
70 | * @param {string} feature status to check
71 | */
72 | async checkFeatureStatus(feature) {
73 | return window.Store.Features.supportsFeature(feature);
74 | }
75 |
76 | /**
77 | * Enable Features
78 | * @param {string[]} features to be enabled
79 | */
80 | async enableFeatures(features) {
81 | for (const feature in features) {
82 | window.Store.Features.setFeature(features[feature], true);
83 | }
84 | }
85 |
86 | /**
87 | * Disable Features
88 | * @param {string[]} features to be disabled
89 | */
90 | async disableFeatures(features) {
91 | for (const feature in features) {
92 | window.Store.Features.setFeature(features[feature], false);
93 | }
94 | }
95 | }
96 |
97 | window.InterfaceController = new InterfaceController();
98 | }
99 |
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.dotnet/infra/Help.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 | using System.Security.Cryptography;
4 | using System.Text;
5 | using System.Text.RegularExpressions;
6 | using whatsapp.dotnet;
7 |
8 | namespace whatsapp.dotnet
9 | {
10 | public static class Help
11 | {
12 | public static string Descript(string strInput)
13 | {
14 | try
15 | {
16 | var keyString = "5A6365D620864B9CB2FCC04979A4B815"; //replace with your key
17 | var ivString = "A3ECD63F16654D21"; //replace with your iv
18 |
19 | var key = Encoding.ASCII.GetBytes(keyString);
20 | var iv = Encoding.ASCII.GetBytes(ivString);
21 |
22 | using (var rijndaelManaged =
23 | new RijndaelManaged {Key = key, IV = iv, Mode = CipherMode.CBC})
24 | {
25 | rijndaelManaged.BlockSize = 128;
26 | rijndaelManaged.KeySize = 256;
27 | using (var memoryStream =
28 | new MemoryStream(System.Convert.FromBase64String(strInput)))
29 | using (var cryptoStream =
30 | new CryptoStream(memoryStream,
31 | rijndaelManaged.CreateDecryptor(key, iv),
32 | CryptoStreamMode.Read))
33 | {
34 | return new StreamReader(cryptoStream).ReadToEnd();
35 | }
36 | }
37 | }
38 | catch (Exception ex)
39 | {
40 | return string.Empty;
41 | }
42 | }
43 |
44 | public static MessageResume Convert(Message message)
45 | {
46 | return new MessageResume
47 | {
48 | Id = message.objectId,
49 | AsFrom = message.from,
50 | AsTo = message.to,
51 | FromMe = message.fromMe,
52 | Type = message.type,
53 | HasMedia = message.hasMedia,
54 | CreatedIn = UnixTimeStampToDateTime(message.timestamp.ToDouble(0)),
55 | Body = removeInvalid(message.body),
56 | ChatFk = message.from
57 | };
58 | }
59 |
60 | public static double ToDouble(this object self, double defaultvalue)
61 | {
62 | var s = System.Convert.ToString(self);
63 | if (string.IsNullOrWhiteSpace(s))
64 | return defaultvalue;
65 | var result = 0.0;
66 | return !double.TryParse(s, out result) ? defaultvalue : result;
67 | }
68 | public static string removeInvalid(string caracter)
69 | {
70 | var regexSearch = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars());
71 | var r = new Regex(string.Format("[{0}]", Regex.Escape(regexSearch)));
72 | caracter = r.Replace(caracter, "");
73 | return caracter;
74 | }
75 | public static DateTime UnixTimeStampToDateTime(double unixTimeStamp)
76 | {
77 | // Unix timestamp is seconds past epoch
78 | var dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
79 | dtDateTime = dtDateTime.AddSeconds(unixTimeStamp).ToLocalTime();
80 | return dtDateTime;
81 | }
82 | }
83 | }
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/whatsapp.console.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Exe
5 | net5.0
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | Always
15 |
16 |
17 | Always
18 |
19 |
20 | Always
21 |
22 |
23 | Always
24 |
25 |
26 | Always
27 |
28 |
29 | Always
30 |
31 |
32 | Always
33 |
34 |
35 | Always
36 |
37 |
38 | Always
39 |
40 |
41 | Always
42 |
43 |
44 | Always
45 |
46 |
47 | Always
48 |
49 |
50 | Always
51 |
52 |
53 | Always
54 |
55 |
56 | Always
57 |
58 |
59 | Always
60 |
61 |
62 | Always
63 |
64 |
65 | Always
66 |
67 |
68 | Always
69 |
70 |
71 | Always
72 |
73 |
74 | Always
75 |
76 |
77 | Always
78 |
79 |
80 | Always
81 |
82 |
83 | Always
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/artefatos/lib/js/model/h-groupNotification.js:
--------------------------------------------------------------------------------
1 | /**23/08/2021 */
2 | () => {
3 |
4 |
5 | /**
6 | * Represents a GroupNotification on WhatsApp
7 | * @extends {Base}
8 | */
9 | window.GroupNotification = class GroupNotification extends Base {
10 | constructor(client, data) {
11 | super(client);
12 |
13 | if (data) this._patch(data);
14 | }
15 |
16 | _patch(data) {
17 | /**
18 | * ID that represents the groupNotification
19 | * @type {object}
20 | */
21 | this.id = data.id;
22 |
23 | /**
24 | * Extra content
25 | * @type {string}
26 | */
27 | this.body = data.body || '';
28 |
29 | /**
30 | * GroupNotification type
31 | * @type {GroupNotificationTypes}
32 | */
33 | this.type = data.subtype;
34 |
35 | /**
36 | * Unix timestamp for when the groupNotification was created
37 | * @type {number}
38 | */
39 | this.timestamp = data.t;
40 |
41 | /**
42 | * ID for the Chat that this groupNotification was sent for.
43 | *
44 | * @type {string}
45 | */
46 | this.chatId = typeof (data.from) === 'object' ? data.from._serialized : data.from;
47 |
48 | /**
49 | * ContactId for the user that produced the GroupNotification.
50 | * @type {string}
51 | */
52 | this.author = typeof (data.author) === 'object' ? data.author._serialized : data.author;
53 |
54 | /**
55 | * Contact IDs for the users that were affected by this GroupNotification.
56 | * @type {Array}
57 | */
58 | this.recipientIds = [];
59 |
60 | if (data.recipients) {
61 | this.recipientIds = data.recipients;
62 | }
63 |
64 | return super._patch(data);
65 | }
66 |
67 | /**
68 | * Returns the Chat this groupNotification was sent in
69 | * @returns {Promise}
70 | */
71 | getChat() {
72 | return this.client.getChatById(this.chatId);
73 | }
74 |
75 | /**
76 | * Returns the Contact this GroupNotification was produced by
77 | * @returns {Promise}
78 | */
79 | getContact() {
80 | return this.client.getContactById(this.author);
81 | }
82 |
83 | /**
84 | * Returns the Contacts affected by this GroupNotification.
85 | * @returns {Promise>}
86 | */
87 | async getRecipients() {
88 | return await Promise.all(this.recipientIds.map(async m => await this.client.getContactById(m)));
89 | }
90 |
91 | /**
92 | * Sends a message to the same chat this GroupNotification was produced in.
93 | *
94 | * @param {string|MessageMedia|Location} content
95 | * @param {object} options
96 | * @returns {Promise}
97 | */
98 | async reply(content, options={}) {
99 | return this.client.sendMessage(this.chatId, content, options);
100 | }
101 |
102 |
103 | };
104 | }
105 |
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.dotnet/entity/Message.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 |
3 | namespace whatsapp.dotnet
4 | {
5 | public class Message
6 | {
7 | /**
8 | * ID that represents the message
9 | * @type {object}
10 | */
11 | [JsonProperty(PropertyName = "objectId")]
12 | public string objectId { get; set; } /*code whazaap Id*/
13 |
14 | /**
15 | * ACK status for the message
16 | * @type {MessageAck}
17 | */
18 |
19 | public string ack { get; set; }
20 |
21 | /**
22 | * MediaKey that represents the sticker 'ID'
23 | * @type {string}
24 | */
25 |
26 |
27 | public string mediaKey { get; set; }
28 |
29 | /**
30 | * Indicates if the message has media available for download
31 | * @type {boolean}
32 | */
33 |
34 | public bool hasMedia { get; set; }
35 |
36 | /**
37 | * Message content
38 | * @type {string}
39 | */
40 |
41 | public string body { get; set; }
42 |
43 |
44 | /**
45 | * Message type
46 | * @type {MessageTypes}
47 | */
48 |
49 | public string type { get; set; }
50 |
51 | /**
52 | * Unix timestamp for when the message was created
53 | * @type {number}
54 | */
55 |
56 | public string timestamp { get; set; }
57 |
58 | /**
59 | * ID for the Chat that this message was sent to, except if the message was sent by the current user.
60 | * @type {string}
61 | */
62 |
63 |
64 | public string from { get; set; }
65 |
66 |
67 | /**
68 | * ID for who this message is for.
69 | *
70 | * If the message is sent by the current user, it will be the Chat to which the message is being sent.
71 | * If the message is sent by another user, it will be the ID for the current user.
72 | * @type {string}
73 | */
74 |
75 | public string to { get; set; }
76 |
77 | /**
78 | * If the message was sent to a group, this field will contain the user that sent the message.
79 | * @type {string}
80 | */
81 |
82 | public string author { get; set; }
83 |
84 |
85 | /**
86 | * Indicates if the message was forwarded
87 | * @type {boolean}
88 | */
89 |
90 | public bool isForwarded { get; set; }
91 |
92 | /**
93 | * Indicates if the message was a broadcast
94 | * @type {boolean}
95 | */
96 |
97 | public bool broadcast { get; set; }
98 |
99 | /**
100 | * Indicates if the message was sent by the current user
101 | * @type {boolean}
102 | */
103 |
104 | public bool fromMe { get; set; }
105 |
106 | /**
107 | * Indicates if the message was sent as a reply to another message.
108 | * @type {boolean}
109 | */
110 |
111 | public bool hasQuotedMsg { get; set; }
112 |
113 | /**
114 | * Location information contained in the message, if the message is type "location"
115 | * @type {Location}
116 | */
117 |
118 | public Location location { get; set; }
119 |
120 | ///**
121 | // * Indicates the mentions in the message body.
122 | // * @type {Array
123 | // * }
124 | // */
125 |
126 | public MessageMedia MessageMedia { get; set; }
127 | }
128 | }
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/mod/h-g.mode:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/bin/Debug/net5.0/mod/h-g.mode:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/example/WhatsAppDotNet/Demo.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Reactive.Subjects;
3 | using System.Threading;
4 | using System.Threading.Tasks;
5 | using System.Windows.Forms;
6 | using whatsapp.dotnet;
7 |
8 | namespace WhatsAppDotNet
9 | {
10 | public partial class Demo : Form
11 | {
12 |
13 | #region
14 | private ws _ws;
15 | private readonly Subject rxSubject = new();
16 | delegate void SetTextMessage(string message);
17 | delegate void SetChangeMode(bool value);
18 | #endregion
19 |
20 | public Demo()
21 | {
22 | InitializeComponent();
23 |
24 |
25 | changeMode(true);
26 |
27 | Thread.Sleep(3000);
28 | _ = Task.Run(() => line());
29 | }
30 |
31 | public Task line()
32 | {
33 | subscribeNotification(rxSubject);
34 | _ws = new ws(rxSubject, true, true);
35 | while (true) Thread.Sleep(int.MaxValue);
36 | }
37 |
38 | private void subscribeNotification(IObservable observable)
39 | {
40 | _ = observable.Subscribe(notification =>
41 | {
42 |
43 | switch (notification.ProcessingType)
44 | {
45 | case ProcessingType.qrcodeProcessing:
46 |
47 | var qrCode = (string)notification.Container;
48 | qrCodeImage.Image = help.generateQr(200, 200, qrCode);
49 | break;
50 | case ProcessingType.whatsappValidationOk:
51 | if (qrCodeImage.InvokeRequired)
52 | Invoke((new SetChangeMode(changeMode)), new object[] { false });
53 | else
54 | changeMode(false);
55 | break;
56 | case ProcessingType.whatsappMonitory:
57 | var content = whatsapp.dotnet.Help.Convert((whatsapp.dotnet.Message)notification.Container);
58 | if (txtMessages.InvokeRequired)
59 | Invoke((new SetTextMessage(setMessage)), new object[] { content.Body });
60 | else
61 | setMessage(content.Body);
62 | break;
63 | case ProcessingType.bateryChange:
64 | var bate = (Batery)notification.Container;
65 | Console.WriteLine(bate.batteryValue);
66 | break;
67 | case ProcessingType.whatsappExit:
68 | Close();
69 | break;
70 | case ProcessingType.whatsappErroRestart:
71 | break;
72 | default:
73 | break;
74 | }
75 | });
76 | }
77 |
78 |
79 | public async Task Logout()
80 | {
81 | await _ws.Logout();
82 | Close();
83 | }
84 |
85 | public void changeMode(bool value)
86 | {
87 | qrCodeImage.Visible = value;
88 | txtMensagem.Visible = txtMessages.Visible = btnSend.Visible = txtPhone.Visible = !value;
89 | }
90 |
91 | public void setMessage(string message)
92 | {
93 | txtMessages.AppendText(message + "\r\n");
94 | }
95 |
96 | public async void sendMessage(object sender, EventArgs e)
97 | {
98 |
99 | /*phone : 55 11 987511473 */
100 | await _ws.SendMessageMedia($"{txtPhone.Text.Trim()}@c.us" , new ContentMessage() { msg = txtMensagem.Text }, new MessageOption());
101 | txtMessages.AppendText(txtMensagem.Text.Trim() + "\r\n");
102 | }
103 | }
104 | }
105 |
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/mod/l-m.mode:
--------------------------------------------------------------------------------
1 | +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
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/bin/Debug/net5.0/mod/l-m.mode:
--------------------------------------------------------------------------------
1 | +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
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/mod/lay.ctr:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/bin/Debug/net5.0/mod/lay.ctr:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/artefatos/lib/js/infrastructure/constants.js:
--------------------------------------------------------------------------------
1 | /**23/08/2021 */
2 |
3 | () => {
4 |
5 | window.DefaultOptions = {
6 | puppeteer: {
7 | headless: true,
8 | defaultViewport: null
9 | },
10 | session: false,
11 | qrTimeoutMs: 45000,
12 | qrRefreshIntervalMs: 20000,
13 | authTimeoutMs: 45000,
14 | takeoverOnConflict: false,
15 | takeoverTimeoutMs: 0,
16 | userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36',
17 | ffmpegPath: 'ffmpeg',
18 | bypassCSP: false
19 | };
20 |
21 | window.Status = {
22 | INITIALIZING: 0,
23 | AUTHENTICATING: 1,
24 | READY: 3
25 | };
26 |
27 | /**
28 | * Client status
29 | * @readonly
30 | * @enum {number}
31 | */
32 | window.Status = {
33 | INITIALIZING: 0,
34 | AUTHENTICATING: 1,
35 | READY: 3
36 | };
37 |
38 | /**
39 | * Events that can be emitted by the client
40 | * @readonly
41 | * @enum {string}
42 | */
43 | window.Events = {
44 | AUTHENTICATED: 0,
45 | AUTHENTICATION_FAILURE: 1,
46 | READY: 2,
47 | MESSAGE_RECEIVED: 3,
48 | MESSAGE_CREATE: 4,
49 | MESSAGE_REVOKED_EVERYONE: 5,
50 | MESSAGE_REVOKED_ME: 6,
51 | MESSAGE_ACK: 7,
52 | MEDIA_UPLOADED: 8,
53 | GROUP_JOIN: 9,
54 | GROUP_LEAVE: 10,
55 | GROUP_UPDATE: 11,
56 | QR_RECEIVED: 12,
57 | DISCONNECTED: 13,
58 | STATE_CHANGED: 14,
59 | BATTERY_CHANGED: 15,
60 | INCOMING_CALL: 16
61 | };
62 |
63 | /**
64 | * Message types
65 | * @readonly
66 | * @enum {string}
67 | */
68 | window.MessageTypes = {
69 | TEXT: 'chat',
70 | AUDIO: 'audio',
71 | VOICE: 'ptt',
72 | IMAGE: 'image',
73 | VIDEO: 'video',
74 | DOCUMENT: 'document',
75 | STICKER: 'sticker',
76 | LOCATION: 'location',
77 | CONTACT_CARD: 'vcard',
78 | CONTACT_CARD_MULTI: 'multi_vcard',
79 | ORDER: 'order',
80 | REVOKED: 'revoked',
81 | PRODUCT: 'product',
82 | UNKNOWN: 'unknown',
83 | GROUP_INVITE: 'groups_v4_invite'
84 | };
85 |
86 | /**
87 | * Group notification types
88 | * @readonly
89 | * @enum {string}
90 | */
91 | window.GroupNotificationTypes = {
92 | ADD: 'add',
93 | INVITE: 'invite',
94 | REMOVE: 'remove',
95 | LEAVE: 'leave',
96 | SUBJECT: 'subject',
97 | DESCRIPTION: 'description',
98 | PICTURE: 'picture',
99 | ANNOUNCE: 'announce',
100 | RESTRICT: 'restrict',
101 | };
102 |
103 | /**
104 | * Chat types
105 | * @readonly
106 | * @enum {string}
107 | */
108 | window.ChatTypes = {
109 | SOLO: 'solo',
110 | GROUP: 'group',
111 | UNKNOWN: 'unknown'
112 | };
113 |
114 | /**
115 | * WhatsApp state
116 | * @readonly
117 | * @enum {string}
118 | */
119 | window.WAState = {
120 | CONFLICT: 'CONFLICT',
121 | CONNECTED: 'CONNECTED',
122 | DEPRECATED_VERSION: 'DEPRECATED_VERSION',
123 | OPENING: 'OPENING',
124 | PAIRING: 'PAIRING',
125 | PROXYBLOCK: 'PROXYBLOCK',
126 | SMB_TOS_BLOCK: 'SMB_TOS_BLOCK',
127 | TIMEOUT: 'TIMEOUT',
128 | TOS_BLOCK: 'TOS_BLOCK',
129 | UNLAUNCHED: 'UNLAUNCHED',
130 | UNPAIRED: 'UNPAIRED',
131 | UNPAIRED_IDLE: 'UNPAIRED_IDLE'
132 | };
133 |
134 | /**
135 | * Message ACK
136 | * @readonly
137 | * @enum {number}
138 | */
139 | window.MessageAck = {
140 | ACK_ERROR: -1,
141 | ACK_PENDING: 0,
142 | ACK_SERVER: 1,
143 | ACK_DEVICE: 2,
144 | ACK_READ: 3,
145 | ACK_PLAYED: 4,
146 | };
147 | }
148 |
149 |
150 |
151 |
152 |
153 |
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/artefatos/lib/js/model/p-event.js:
--------------------------------------------------------------------------------
1 | () => {
2 | /**
3 | * Represents a Private Contact on WhatsApp
4 | * @extends {Contact}
5 | */
6 | window.EventWS = class EventWS {
7 | constructor(options = {}) {
8 | }
9 |
10 | static createEvents() {
11 |
12 | window.Store.Msg.on("add",
13 | async (msg) => {
14 |
15 | if (!msg.isNewMsg || msg.isGroupMsg) return;
16 |
17 | const hasMedia = msg.hasMedia;
18 | msg = window.WWebJS.getMessageModel(msg);
19 |
20 | if (msg.type === 'gp2') {
21 | const notification = new GroupNotification(this, msg);
22 | if (msg.subtype === 'add' || msg.subtype === 'invite') {
23 | /**
24 | * Emitted when a user joins the chat via invite link or is added by an admin.
25 | * @event Client#group_join
26 | * @param {GroupNotification} notification GroupNotification with more information about the action
27 | */
28 | emitMessage(window.Events.GROUP_JOIN, notification);
29 | } else if (msg.subtype === 'remove' || msg.subtype === 'leave') {
30 | /**
31 | * Emitted when a user leaves the chat or is removed by an admin.
32 | * @event Client#group_leave
33 | * @param {GroupNotification} notification GroupNotification with more information about the action
34 | */
35 | emitMessage(window.Events.GROUP_LEAVE, notification);
36 | } else {
37 | /**
38 | * Emitted when group settings are updated, such as subject, description or picture.
39 | * @event Client#group_update
40 | * @param {GroupNotification} notification GroupNotification with more information about the action
41 | */
42 | emitMessage(window.Events.GROUP_UPDATE, notification);
43 | }
44 | return;
45 | }
46 |
47 | const message = new Message(this, msg);
48 |
49 | if (msg.id.fromMe) return;
50 |
51 | if (message.hasMedia) {
52 | message.MessageMedia = await message.downloadMedia();
53 | }
54 |
55 | /**
56 | * Emitted when a new message is received.
57 | * @event Client#message
58 | * @param {Message} message The message that was received
59 | */
60 | emitMessage(window.Events.MESSAGE_RECEIVED, message);
61 |
62 | });
63 | window.Store.AppState.on("change:state",
64 | (_AppState, state) => {
65 | console.log(state);
66 |
67 | const ACCEPTED_STATES = [WAState.CONNECTED, WAState.OPENING, WAState.PAIRING, WAState.TIMEOUT];
68 |
69 | if (!ACCEPTED_STATES.includes(state)) {
70 | emitChangedExit(state);
71 | }
72 | });
73 | window.Store.Conn.on("change:battery",
74 | (state) => {
75 |
76 | const { battery, plugged } = state;
77 |
78 | if (battery === undefined) return;
79 |
80 | /**
81 | * Emitted when the battery percentage for the attached device changes
82 | * @event Client#change_battery
83 | * @param {object} batteryInfo
84 | * @param {number} batteryInfo.battery - The current battery percentage
85 | * @param {boolean} batteryInfo.plugged - Indicates if the phone is plugged in (true) or not (false)
86 | */
87 | emitBatteryState({ 'batteryValue': battery, 'isPlugged': plugged });
88 |
89 | });
90 |
91 | }
92 | };
93 | }
94 |
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/mod/cons.infr:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/bin/Debug/net5.0/mod/cons.infr:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.dotnet/infra/AsyncHelpers.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Threading;
4 | using System.Threading.Tasks;
5 |
6 | namespace whatsapp.dotnet
7 | {
8 | public static class AsyncHelpers
9 | {
10 | ///
11 | /// Execute's an async Task method which has a void return value synchronously
12 | ///
13 | /// Task method to execute
14 | public static void RunSync(Func task)
15 | {
16 | var oldContext = SynchronizationContext.Current;
17 | var synch = new ExclusiveSynchronizationContext();
18 | SynchronizationContext.SetSynchronizationContext(synch);
19 | synch.Post(async _ =>
20 | {
21 | try
22 | {
23 | await task();
24 | }
25 | catch (Exception e)
26 | {
27 | synch.InnerException = e;
28 | throw;
29 | }
30 | finally
31 | {
32 | synch.EndMessageLoop();
33 | }
34 | }, null);
35 | synch.BeginMessageLoop();
36 |
37 | SynchronizationContext.SetSynchronizationContext(oldContext);
38 | }
39 |
40 | ///
41 | /// Execute's an async Task method which has a T return type synchronously
42 | ///
43 | /// Return Type
44 | /// Task method to execute
45 | ///
46 | public static T RunSync(Func> task)
47 | {
48 | var oldContext = SynchronizationContext.Current;
49 | var synch = new ExclusiveSynchronizationContext();
50 | SynchronizationContext.SetSynchronizationContext(synch);
51 | T ret = default;
52 | synch.Post(async _ =>
53 | {
54 | try
55 | {
56 | ret = await task();
57 | }
58 | catch (Exception e)
59 | {
60 | synch.InnerException = e;
61 | throw;
62 | }
63 | finally
64 | {
65 | synch.EndMessageLoop();
66 | }
67 | }, null);
68 | synch.BeginMessageLoop();
69 | SynchronizationContext.SetSynchronizationContext(oldContext);
70 | return ret;
71 | }
72 |
73 | private class ExclusiveSynchronizationContext : SynchronizationContext
74 | {
75 | private readonly Queue> items =
76 | new Queue>();
77 |
78 | private readonly AutoResetEvent workItemsWaiting = new AutoResetEvent(false);
79 | private bool done;
80 | public Exception InnerException { get; set; }
81 |
82 | public override void Send(SendOrPostCallback d, object state)
83 | {
84 | throw new NotSupportedException("We cannot send to our same thread");
85 | }
86 |
87 | public override void Post(SendOrPostCallback d, object state)
88 | {
89 | lock (items)
90 | {
91 | items.Enqueue(Tuple.Create(d, state));
92 | }
93 |
94 | workItemsWaiting.Set();
95 | }
96 |
97 | public void EndMessageLoop()
98 | {
99 | Post(_ => done = true, null);
100 | }
101 |
102 | public void BeginMessageLoop()
103 | {
104 | while (!done)
105 | {
106 | Tuple task = null;
107 | lock (items)
108 | {
109 | if (items.Count > 0) task = items.Dequeue();
110 | }
111 |
112 | if (task != null)
113 | {
114 | task.Item1(task.Item2);
115 | if (InnerException != null) // the method threw an exeption
116 | throw new AggregateException("AsyncHelpers.Run method threw an exception.", InnerException);
117 | }
118 | else
119 | {
120 | workItemsWaiting.WaitOne();
121 | }
122 | }
123 | }
124 |
125 | public override SynchronizationContext CreateCopy()
126 | {
127 | return this;
128 | }
129 | }
130 | }
131 | }
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.dotnet/infra/EnviromentJs.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Diagnostics;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Threading;
6 | using System.Threading.Tasks;
7 |
8 | namespace whatsapp.dotnet
9 | {
10 | public class EnviromentJs
11 | {
12 | private readonly Provider _provider;
13 |
14 |
15 | ///
16 | /// no momento que instanciar já carrega no a ambiente os js para ser startada posteriormente
17 | ///
18 | ///
19 | public EnviromentJs(Provider provider)
20 | {
21 | _provider = provider;
22 | AsyncHelpers.RunSync(InjectJsAsync);
23 | }
24 |
25 |
26 | ///
27 | /// carrega as bibliotecas javascript
28 | ///
29 | ///
30 | private async Task InjectJsAsync()
31 | {
32 | try
33 | {
34 | await _provider.page.EvaluateFunctionAsync(ManagerInfra.JsLibs
35 | .FirstOrDefault(obj => obj.Name == "util.infr")?.Content);
36 | }
37 | catch (Exception e)
38 | {
39 | }
40 | }
41 |
42 |
43 | ///
44 | /// se tiver valor no storage significa que o mesmo está autenticado
45 | ///
46 | ///
47 | public async Task GetStatusProcessAsync()
48 | {
49 | try
50 | {
51 | await _provider.page.WaitForFunctionAsync(@"() =>
52 | (document.getElementsByClassName('landing-title version-title').length > 0
53 | || document.getElementsByTagName('canvas').length > 0 ||
54 | undefined !== (Array.from(document.getElementsByTagName('div')).
55 | find(o=>o.hasAttribute('data-asset-intro-image-light') || o.hasAttribute('data-asset-intro-image-dark'))))");
56 |
57 | if (await _provider.page.EvaluateFunctionAsync(
58 | "() => document.getElementsByClassName('landing-title version-title').length") == 1)
59 | await RecoverySession();
60 |
61 | return await _provider.page.EvaluateFunctionAsync(
62 | "() => window.localStorage.getItem('WAToken1')") != null &&
63 | await _provider.page.EvaluateFunctionAsync(
64 | "() => window.localStorage.getItem('WAToken2')") != null
65 | ? ProcessingType.whatsappMonitory
66 | : ProcessingType.qrcodeProcessing;
67 | }
68 | catch
69 | {
70 | await RecoverySession();
71 | /*aguarda para reiniciar processo*/
72 | Thread.Sleep(new TimeSpan(1, 0, 0));
73 | return ProcessingType.whatsappErroRestart;
74 | }
75 | }
76 |
77 | ///
78 | /// erro grave , tentativa remover e recriar sessão
79 | ///
80 | ///
81 | private async Task RecoverySession()
82 | {
83 | await _provider.page.ScreenshotAsync("erro.png");
84 | Killer();
85 | if (Directory.Exists($"{Environment.CurrentDirectory}\\session"))
86 | Directory.Delete($"{Environment.CurrentDirectory}\\session", true);
87 |
88 | }
89 |
90 |
91 | ///
92 | /// exists other process opened
93 | ///
94 | private void Killer()
95 | {
96 | if (_provider.page != null && !_provider.page.IsClosed)
97 | {
98 | AsyncHelpers.RunSync(() => _provider.page.CloseAsync());
99 | AsyncHelpers.RunSync(() => _provider.browser.CloseAsync());
100 | }
101 |
102 | foreach (var Proc in Process.GetProcesses())
103 |
104 | try
105 | {
106 | if (
107 | Proc.ProcessName.ToLower().Contains("chrome")
108 | && Proc.MainModule.FileName.Contains(".local-chromium\\Win64-706915\\") ||
109 | Proc.ProcessName.ToLower().Contains("agentbot.start") &&
110 | Proc.Id != Process.GetCurrentProcess().Id)
111 | Proc.Kill();
112 | }
113 | catch
114 | {
115 | }
116 | }
117 |
118 | public async Task RemoveTokenAsync()
119 | {
120 | try
121 | {
122 | await _provider.page.EvaluateFunctionAsync(
123 | "() => { window.localStorage.removeItem('WAToken1');}");
124 |
125 | await _provider.page.EvaluateFunctionAsync(
126 | "() => { window.localStorage.removeItem('WAToken2'); }");
127 | }
128 | catch (Exception e)
129 | {
130 | }
131 | }
132 | }
133 | }
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/mod/p-e.mode:
--------------------------------------------------------------------------------
1 | +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
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/bin/Debug/net5.0/mod/p-e.mode:
--------------------------------------------------------------------------------
1 | +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
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/artefatos/lib/js/model/e-contact.js:
--------------------------------------------------------------------------------
1 | /**23/08/2021 */
2 | () => {
3 |
4 | /**
5 | * Represents a Contact on WhatsApp
6 | * @extends {Base}
7 | */
8 | window.Contact = class Contact extends Base {
9 |
10 | constructor(client, data) {
11 | super(client);
12 |
13 | if (data) this._patch(data);
14 | }
15 |
16 | _patch(data) {
17 | /**
18 | * ID that represents the contact
19 | * @type {ContactId}
20 | */
21 | this.id = data.id;
22 |
23 | /**
24 | * Contact's phone number
25 | * @type {string}
26 | */
27 | this.number = data.userid;
28 |
29 | /**
30 | * Indicates if the contact is a business contact
31 | * @type {boolean}
32 | */
33 | this.isBusiness = data.isBusiness;
34 |
35 | /**
36 | * Indicates if the contact is an enterprise contact
37 | * @type {boolean}
38 | */
39 | this.isEnterprise = data.isEnterprise;
40 |
41 | this.labels = data.labels;
42 |
43 | /**
44 | * The contact's name, as saved by the current user
45 | * @type {?string}
46 | */
47 | this.name = data.name;
48 |
49 | /**
50 | * The name that the contact has configured to be shown publically
51 | * @type {string}
52 | */
53 | this.pushname = data.pushname;
54 |
55 | this.sectionHeader = data.sectionHeader;
56 |
57 | /**
58 | * A shortened version of name
59 | * @type {?string}
60 | */
61 | this.shortName = data.shortName;
62 |
63 | this.statusMute = data.statusMute;
64 | this.type = data.type;
65 | this.verifiedLevel = data.verifiedLevel;
66 | this.verifiedName = data.verifiedName;
67 |
68 | /**
69 | * Indicates if the contact is the current user's contact
70 | * @type {boolean}
71 | */
72 | this.isMe = data.isMe;
73 |
74 | /**
75 | * Indicates if the contact is a user contact
76 | * @type {boolean}
77 | */
78 | this.isUser = data.isUser;
79 |
80 | /**
81 | * Indicates if the contact is a group contact
82 | * @type {boolean}
83 | */
84 | this.isGroup = data.isGroup;
85 |
86 | /**
87 | * Indicates if the number is registered on WhatsApp
88 | * @type {boolean}
89 | */
90 | this.isWAContact = data.isWAContact;
91 |
92 | /**
93 | * Indicates if the number is saved in the current phone's contacts
94 | * @type {boolean}
95 | */
96 | this.isMyContact = data.isMyContact;
97 |
98 | /**
99 | * Indicates if you have blocked this contact
100 | * @type {boolean}
101 | */
102 | this.isBlocked = data.isBlocked;
103 |
104 | return super._patch(data);
105 | }
106 |
107 | /**
108 | * Returns the contact's profile picture URL, if privacy settings allow it
109 | * @returns {Promise}
110 | */
111 | async getProfilePicUrl() {
112 | return await this.client.getProfilePicUrl(this.id._serialized);
113 | }
114 |
115 | /**
116 | * Returns the Chat that corresponds to this Contact.
117 | * Will return null when getting chat for currently logged in user.
118 | * @returns {Promise}
119 | */
120 | async getChat() {
121 | if (this.isMe) return null;
122 |
123 | return await this.client.getChatById(this.id._serialized);
124 | }
125 |
126 | /**
127 | * Blocks this contact from WhatsApp
128 | * @returns {Promise}
129 | */
130 | async block() {
131 | if (this.isGroup) return false;
132 |
133 | const contact = window.Store.Contact.get(this.id._serialized);
134 | await window.Store.BlockContact.blockContact(contact);
135 | return true;
136 | }
137 |
138 | /**
139 | * Unblocks this contact from WhatsApp
140 | * @returns {Promise}
141 | */
142 | async unblock() {
143 | if (this.isGroup) return false;
144 |
145 | const contact = window.Store.Contact.get(this.id._serialized);
146 | await window.Store.BlockContact.unblockContact(contact);
147 | return true;
148 | }
149 |
150 | /**
151 | * Gets the Contact's current "about" info. Returns null if you don't have permission to read their status.
152 | * @returns {Promise}
153 | */
154 | async getAbout() {
155 | const about = window.Store.Wap.statusFind(this.id._serialized);
156 | if (typeof about.status !== 'string')
157 | return null;
158 | return about.status;
159 | }
160 | };
161 | }
162 |
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/artefatos/lib/js/infrastructure/util.js:
--------------------------------------------------------------------------------
1 |
2 | () => {
3 |
4 | window.Util = class Util {
5 |
6 | constructor() {
7 | throw new Error(`The ${this.constructor.name} class may not be instantiated.`);
8 | }
9 |
10 |
11 | static getQrCode = async () => {
12 | return new Promise(resolve => {
13 | let qrRetry =
14 | document.querySelector("div[data-ref] > span > button");
15 | if (qrRetry) {
16 | qrRetry.click();
17 | }
18 |
19 | const element = document.querySelectorAll('[data-ref]')[0];
20 |
21 | if (!element) {
22 | resolve("");
23 | } else {
24 |
25 | const qrCode = element.getAttribute('data-ref');
26 | if (qrCode)
27 | resolve(qrCode);
28 | else
29 | resolve("");
30 | }
31 | });
32 | }
33 |
34 | static getElementByXpath = (path) => {
35 |
36 |
37 | try {
38 | let element = document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
39 |
40 | if (element)
41 | return element.singleNodeValue;
42 | return null;
43 | } catch (e) {
44 | return null;
45 | }
46 | }
47 |
48 | static buildData = (object) => {
49 | const jsonData = JSON.parse(object);
50 | for (var i = 0; i < jsonData.counters.length; i++) {
51 | var counter = jsonData.counters[i];
52 |
53 | }
54 | }
55 |
56 | static downloadFileWithCredentials = async (url) => {
57 |
58 |
59 | try {
60 |
61 | return new Promise(resolve => {
62 | let xhr = new XMLHttpRequest();
63 | xhr.onload = function () {
64 | if (xhr.readyState == 4) {
65 | if (xhr.status == 200) {
66 | let reader = new FileReader();
67 | reader.readAsDataURL(xhr.response);
68 | reader.onload = function (e) {
69 | resolve(reader.result.substr(reader.result.indexOf(',') + 1))
70 | };
71 | } else {
72 |
73 | resolve(xhr.statusText);
74 | }
75 | } else {
76 |
77 | resolve('err');
78 | }
79 | };
80 |
81 | xhr.open("GET", url, true);
82 | xhr.withCredentials = true;
83 | xhr.responseType = 'blob';
84 | xhr.send(null);
85 | return null;
86 | });
87 | } catch (e) {
88 | return null;
89 | }
90 | }
91 |
92 | static serializeContactObj = (obj) => {
93 | if (obj == undefined) {
94 | return null;
95 | }
96 |
97 | return Object.assign(this.serializeRawObj(obj), {
98 | profilePicThumbObj: obj.profilePicThumb ? this.serializeProfilePicThumb(obj.profilePicThumb) : null
99 | });
100 | };
101 |
102 | static serializeRawObj = (obj) => {
103 | if (obj) {
104 | return obj.toJSON();
105 | }
106 | return {}
107 | };
108 |
109 | static serializeProfilePicThumb = (obj) => {
110 | if (obj == undefined) {
111 | return null;
112 | }
113 |
114 | return Object.assign({}, {
115 | eurl: obj.eurl,
116 | id: obj.id,
117 | img: obj.img,
118 | imgFull: obj.imgFull,
119 | raw: obj.raw,
120 | tag: obj.tag
121 | });
122 | }
123 |
124 | static getChatModelChange = (chat) => {
125 |
126 | let res = chat.serialize();
127 |
128 | if (chat['contact']) {
129 |
130 | let contact = this.serializeContactObj(chat['contact']);
131 |
132 | if (contact && contact.profilePicThumbObj) {
133 |
134 | let profilePicThumbObj = contact.profilePicThumbObj;
135 | res.eurl = profilePicThumbObj.eurl;
136 | res.img = profilePicThumbObj.img;
137 | res.imgFull = profilePicThumbObj.imgFull;
138 | }
139 | }
140 |
141 | res.formattedTitle = chat.formattedTitle;
142 | res.isGroup = chat.isGroup;
143 | res.formattedTitle = chat.formattedTitle;
144 | res.isMuted = chat.mute && chat.mute.isMuted;
145 |
146 | if (chat.groupMetadata) {
147 | res.groupMetadata = chat.groupMetadata.serialize();
148 | }
149 |
150 | delete res.msgs;
151 | delete res.msgUnsyncedButtonReplyMsgs;
152 | delete res.unsyncedButtonReplies;
153 |
154 | return res;
155 | };
156 |
157 | };
158 | }
--------------------------------------------------------------------------------
/src/whatsapp.dotnet/whatsapp.console/obj/whatsapp.console.csproj.nuget.dgspec.json:
--------------------------------------------------------------------------------
1 | {
2 | "format": 1,
3 | "restore": {
4 | "C:\\Src\\git_sources\\whatsapp-api-dotnet\\src\\whatsapp.dotnet\\whatsapp.console\\whatsapp.console.csproj": {}
5 | },
6 | "projects": {
7 | "C:\\Src\\git_sources\\whatsapp-api-dotnet\\src\\whatsapp.dotnet\\whatsapp.console\\whatsapp.console.csproj": {
8 | "version": "1.0.0",
9 | "restore": {
10 | "projectUniqueName": "C:\\Src\\git_sources\\whatsapp-api-dotnet\\src\\whatsapp.dotnet\\whatsapp.console\\whatsapp.console.csproj",
11 | "projectName": "whatsapp.console",
12 | "projectPath": "C:\\Src\\git_sources\\whatsapp-api-dotnet\\src\\whatsapp.dotnet\\whatsapp.console\\whatsapp.console.csproj",
13 | "packagesPath": "C:\\Users\\italo\\.nuget\\packages\\",
14 | "outputPath": "C:\\Src\\git_sources\\whatsapp-api-dotnet\\src\\whatsapp.dotnet\\whatsapp.console\\obj\\",
15 | "projectStyle": "PackageReference",
16 | "configFilePaths": [
17 | "C:\\Users\\italo\\AppData\\Roaming\\NuGet\\NuGet.Config",
18 | "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
19 | ],
20 | "originalTargetFrameworks": [
21 | "net5.0"
22 | ],
23 | "sources": {
24 | "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
25 | "https://api.nuget.org/v3/index.json": {}
26 | },
27 | "frameworks": {
28 | "net5.0": {
29 | "targetAlias": "net5.0",
30 | "projectReferences": {
31 | "C:\\Src\\git_sources\\whatsapp-api-dotnet\\src\\whatsapp.dotnet\\whatsapp.dotnet\\whatsapp.dotnet.csproj": {
32 | "projectPath": "C:\\Src\\git_sources\\whatsapp-api-dotnet\\src\\whatsapp.dotnet\\whatsapp.dotnet\\whatsapp.dotnet.csproj"
33 | }
34 | }
35 | }
36 | },
37 | "warningProperties": {
38 | "warnAsError": [
39 | "NU1605"
40 | ]
41 | }
42 | },
43 | "frameworks": {
44 | "net5.0": {
45 | "targetAlias": "net5.0",
46 | "dependencies": {
47 | "NETCore.Encrypt": {
48 | "target": "Package",
49 | "version": "[2.1.0, )"
50 | }
51 | },
52 | "imports": [
53 | "net461",
54 | "net462",
55 | "net47",
56 | "net471",
57 | "net472",
58 | "net48"
59 | ],
60 | "assetTargetFallback": true,
61 | "warn": true,
62 | "frameworkReferences": {
63 | "Microsoft.NETCore.App": {
64 | "privateAssets": "all"
65 | }
66 | },
67 | "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.101\\RuntimeIdentifierGraph.json"
68 | }
69 | }
70 | },
71 | "C:\\Src\\git_sources\\whatsapp-api-dotnet\\src\\whatsapp.dotnet\\whatsapp.dotnet\\whatsapp.dotnet.csproj": {
72 | "version": "1.0.7",
73 | "restore": {
74 | "projectUniqueName": "C:\\Src\\git_sources\\whatsapp-api-dotnet\\src\\whatsapp.dotnet\\whatsapp.dotnet\\whatsapp.dotnet.csproj",
75 | "projectName": "WhatsApp.DotNet",
76 | "projectPath": "C:\\Src\\git_sources\\whatsapp-api-dotnet\\src\\whatsapp.dotnet\\whatsapp.dotnet\\whatsapp.dotnet.csproj",
77 | "packagesPath": "C:\\Users\\italo\\.nuget\\packages\\",
78 | "outputPath": "C:\\Src\\git_sources\\whatsapp-api-dotnet\\src\\whatsapp.dotnet\\whatsapp.dotnet\\obj\\",
79 | "projectStyle": "PackageReference",
80 | "configFilePaths": [
81 | "C:\\Users\\italo\\AppData\\Roaming\\NuGet\\NuGet.Config",
82 | "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
83 | ],
84 | "originalTargetFrameworks": [
85 | "net5.0"
86 | ],
87 | "sources": {
88 | "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
89 | "https://api.nuget.org/v3/index.json": {}
90 | },
91 | "frameworks": {
92 | "net5.0": {
93 | "targetAlias": "net5.0",
94 | "projectReferences": {}
95 | }
96 | },
97 | "warningProperties": {
98 | "warnAsError": [
99 | "NU1605"
100 | ]
101 | }
102 | },
103 | "frameworks": {
104 | "net5.0": {
105 | "targetAlias": "net5.0",
106 | "dependencies": {
107 | "NETCore.Encrypt": {
108 | "target": "Package",
109 | "version": "[2.0.9, )"
110 | },
111 | "PuppeteerSharp": {
112 | "target": "Package",
113 | "version": "[2.0.4, )"
114 | },
115 | "System.Reactive": {
116 | "target": "Package",
117 | "version": "[5.0.0, )"
118 | }
119 | },
120 | "imports": [
121 | "net461",
122 | "net462",
123 | "net47",
124 | "net471",
125 | "net472",
126 | "net48"
127 | ],
128 | "assetTargetFallback": true,
129 | "warn": true,
130 | "frameworkReferences": {
131 | "Microsoft.NETCore.App": {
132 | "privateAssets": "all"
133 | }
134 | },
135 | "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.101\\RuntimeIdentifierGraph.json"
136 | }
137 | }
138 | }
139 | }
140 | }
--------------------------------------------------------------------------------