├── IPCloneDetectorAndASNAnalyzer
├── README.md
├── screenshots
│ ├── screenshot.png
│ └── statistics.svg
├── users_by_asn.php
├── users_by_country.php
├── search.php
├── badasn
│ └── list.txt
├── IPCloneDetectorAndASNAnalyzer.php
└── index.php
├── emoji_trail
├── README.md
├── screenshots
│ └── emoji-trail.png
└── emoji_trail.php
├── live_map
├── README.md
├── live_map.php
├── index.php
└── leaflet.css
├── example_plugin
├── screenshots
│ ├── example_icon.png
│ ├── example_plugin.jpg
│ └── example_plugin2.jpg
├── README.md
├── example.php
└── example_plugin.php
├── mute
├── README.md
├── mute.php
└── index.php
├── php_mailer
├── README.md
├── mail-settings.php
└── php_mailer.php
└── README.md
/IPCloneDetectorAndASNAnalyzer/README.md:
--------------------------------------------------------------------------------
1 | Displays some statistics about ASNs, IPs, and clones.
--------------------------------------------------------------------------------
/emoji_trail/README.md:
--------------------------------------------------------------------------------
1 | Makes an emoji trail from your mouse cursor, an example how to easily add your own JavaScript to any page.
2 |
--------------------------------------------------------------------------------
/live_map/README.md:
--------------------------------------------------------------------------------
1 | This plugin adds a live map to your webpanel, allowing you to see new connections and where it comes from on the map.
2 |
--------------------------------------------------------------------------------
/emoji_trail/screenshots/emoji-trail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unrealircd/unrealircd-webpanel-plugins/main/emoji_trail/screenshots/emoji-trail.png
--------------------------------------------------------------------------------
/example_plugin/screenshots/example_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unrealircd/unrealircd-webpanel-plugins/main/example_plugin/screenshots/example_icon.png
--------------------------------------------------------------------------------
/example_plugin/screenshots/example_plugin.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unrealircd/unrealircd-webpanel-plugins/main/example_plugin/screenshots/example_plugin.jpg
--------------------------------------------------------------------------------
/example_plugin/screenshots/example_plugin2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unrealircd/unrealircd-webpanel-plugins/main/example_plugin/screenshots/example_plugin2.jpg
--------------------------------------------------------------------------------
/mute/README.md:
--------------------------------------------------------------------------------
1 | Used in conjunction with the 'mute' third-party module for UnrealIRCd, this plugin adds a new page into your "Server Bans" tab, letting you view and remove.
2 |
--------------------------------------------------------------------------------
/IPCloneDetectorAndASNAnalyzer/screenshots/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/unrealircd/unrealircd-webpanel-plugins/main/IPCloneDetectorAndASNAnalyzer/screenshots/screenshot.png
--------------------------------------------------------------------------------
/example_plugin/README.md:
--------------------------------------------------------------------------------
1 | This plugin adds a new page which is accessible via the navigation panel on the left.
2 |
3 | The page contains a heading saying "Example Page", followed by some random Latin.
4 |
5 | This writing is generated from the README.md file in the base directory of the plugin.
6 |
7 | I hope this inspires someone to see what they can make. There are plenty of hooks and many ways you can make something awesome and powerful.
8 |
9 | Good luck, adventurer!
10 |
--------------------------------------------------------------------------------
/php_mailer/README.md:
--------------------------------------------------------------------------------
1 | Complete your Panel - Get email notifications about logins and login attempts on your admin panel.
2 |
3 | Quick and easy, all you need to know is your email details and you can start automating right away.
4 |
5 | Your panel will let you know when there are any login attempts and valid logins.
6 |
7 | Users who specified an email will get a notification about logins and login attempts, and so will the master email address.
8 |
9 | Make your Panel Professional with PHPMailer().
10 |
--------------------------------------------------------------------------------
/example_plugin/example.php:
--------------------------------------------------------------------------------
1 | Example Page";
5 | echo "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
6 | require_once "../../inc/footer.php";
7 |
--------------------------------------------------------------------------------
/IPCloneDetectorAndASNAnalyzer/users_by_asn.php:
--------------------------------------------------------------------------------
1 | user()->getAll();
6 |
7 | header('Content-Type: application/json');
8 |
9 | usort($users, function ($a, $b) {
10 | return strcasecmp($a->name, $b->name);
11 | });
12 |
13 | $asnFilter = htmlentities($_GET['asn']);
14 |
15 | // Filtrer les utilisateurs en fonction du numéro ASN
16 | $filteredUsers = array_filter($users, function ($entry) use ($asnFilter) {
17 | return isset($entry->geoip->asn) && $entry->geoip->asn == $asnFilter;
18 | });
19 |
20 | $foundObjects = [];
21 |
22 | if (!empty($filteredUsers)) {
23 | foreach ($filteredUsers as $entry) {
24 | $asn = htmlspecialchars($entry->geoip->asn);
25 | $asname = htmlspecialchars($entry->geoip->asname);
26 | $country_code = htmlspecialchars($entry->geoip->country_code);
27 | $nickname = htmlspecialchars($entry->name);
28 |
29 | $foundObjects[] = $entry;
30 | }
31 | }
32 | echo json_encode($foundObjects);
33 |
--------------------------------------------------------------------------------
/IPCloneDetectorAndASNAnalyzer/users_by_country.php:
--------------------------------------------------------------------------------
1 | user()->getAll();
6 |
7 | header('Content-Type: application/json');
8 |
9 | usort($users, function ($a, $b) {
10 | return strcasecmp($a->name, $b->name);
11 | });
12 |
13 | $countryFilter = htmlentities($_GET['country']);
14 |
15 | // Filtrer les utilisateurs en fonction du pays
16 | $filteredUsers = array_filter($users, function ($entry) use ($countryFilter) {
17 | return isset($entry->geoip->country_code) && $entry->geoip->country_code == $countryFilter;
18 | });
19 |
20 | $foundObjects = [];
21 |
22 | if (!empty($filteredUsers)) {
23 | foreach ($filteredUsers as $entry) {
24 | $account = ($entry->user->account ? htmlspecialchars($entry->user->account) : null);
25 | $country_code = htmlspecialchars($entry->geoip->country_code);
26 | $nickname = htmlspecialchars($entry->name);
27 | $foundObjects[] = $entry;
28 | }
29 | }
30 | echo json_encode($foundObjects);
31 |
--------------------------------------------------------------------------------
/IPCloneDetectorAndASNAnalyzer/screenshots/statistics.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/IPCloneDetectorAndASNAnalyzer/search.php:
--------------------------------------------------------------------------------
1 | user()->getAll(4);
6 | ?>
7 | user->channels, 'name'));
17 | });
18 | }
19 | usort($users, function ($a, $b) {
20 | return strcmp($a->name, $b->name);
21 | });
22 |
23 | function searchInArray($array, $searchValue, &$foundObjects, $currentObject)
24 | {
25 | global $modeStrict;
26 | foreach ($array as $key => $value) {
27 | if (is_array($value)) {
28 | searchInArray($value, $searchValue, $foundObjects, $currentObject);
29 | } elseif (is_object($value)) {
30 | searchInArray((array) $value, $searchValue, $foundObjects, $currentObject);
31 | } elseif ($value == $searchValue || !$modeStrict && is_string($value) && stripos($value, $searchValue) !== false) {
32 | $foundObjects[] = $currentObject;
33 | return;
34 | }
35 | }
36 | }
37 |
38 | foreach ($users as $obj) {
39 | searchInArray((array) $obj, $searchValue, $foundObjects, $obj);
40 | }
41 |
42 | echo json_encode($foundObjects);
43 |
--------------------------------------------------------------------------------
/IPCloneDetectorAndASNAnalyzer/badasn/list.txt:
--------------------------------------------------------------------------------
1 | 174
2 | 701
3 | 812
4 | 852
5 | 1299
6 | 1680
7 | 2516
8 | 2609
9 | 3223
10 | 3257
11 | 3356
12 | 4785
13 | 4808
14 | 5089
15 | 5384
16 | 5606
17 | 6327
18 | 6461
19 | 6640
20 | 6696
21 | 6830
22 | 7489
23 | 7552
24 | 7765
25 | 8075
26 | 8100
27 | 8151
28 | 8399
29 | 8473
30 | 8560
31 | 8708
32 | 9009
33 | 10439
34 | 10796
35 | 11878
36 | 12400
37 | 12874
38 | 12876
39 | 13213
40 | 13335
41 | 13552
42 | 14061
43 | 15169
44 | 15830
45 | 16276
46 | 16347
47 | 16509
48 | 17676
49 | 18126
50 | 19148
51 | 19969
52 | 20001
53 | 20115
54 | 20473
55 | 20860
56 | 20940
57 | 21003
58 | 21100
59 | 21724
60 | 21859
61 | 22363
62 | 23969
63 | 24875
64 | 24940
65 | 24961
66 | 25369
67 | 27176
68 | 27323
69 | 28708
70 | 28753
71 | 29066
72 | 29075
73 | 30781
74 | 30889
75 | 31245
76 | 31404
77 | 31898
78 | 33387
79 | 34305
80 | 35625
81 | 36183
82 | 37705
83 | 39405
84 | 40021
85 | 40676
86 | 41564
87 | 41745
88 | 41798
89 | 42390
90 | 42473
91 | 43350
92 | 44066
93 | 44217
94 | 44477
95 | 44679
96 | 46475
97 | 46562
98 | 46844
99 | 49419
100 | 49981
101 | 51167
102 | 51765
103 | 51852
104 | 53667
105 | 54113
106 | 54203
107 | 54614
108 | 55081
109 | 55286
110 | 57169
111 | 57172
112 | 58065
113 | 60068
114 | 60404
115 | 60555
116 | 60781
117 | 60804
118 | 61317
119 | 62240
120 | 62563
121 | 63018
122 | 63023
123 | 63949
124 | 132933
125 | 133480
126 | 136787
127 | 137409
128 | 138915
129 | 147049
130 | 197706
131 | 197922
132 | 198605
133 | 198890
134 | 201011
135 | 202422
136 | 203020
137 | 205016
138 | 205544
139 | 206092
140 | 206804
141 | 207137
142 | 207713
143 | 209181
144 | 209854
145 | 210164
146 | 210558
147 | 211476
148 | 212238
149 | 262191
150 | 327989
151 | 393544
152 | 396356
153 | 397423
154 |
--------------------------------------------------------------------------------
/mute/mute.php:
--------------------------------------------------------------------------------
1 | $page_link, "no_irc_server_required" => true];
55 | }
56 |
57 | }
58 |
--------------------------------------------------------------------------------
/live_map/live_map.php:
--------------------------------------------------------------------------------
1 | $page_link, "no_irc_server_required" => false];
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/IPCloneDetectorAndASNAnalyzer/IPCloneDetectorAndASNAnalyzer.php:
--------------------------------------------------------------------------------
1 | $page_link, "no_irc_server_required" => true];
56 | }
57 | }
58 |
59 |
--------------------------------------------------------------------------------
/example_plugin/example_plugin.php:
--------------------------------------------------------------------------------
1 | $page_link, "no_irc_server_required" => true];
67 | }
68 | }
69 |
70 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # UnrealIRCd WebPanel Plugins
2 |
3 | ## WARNING: USE AT YOUR OWN RISK
4 |
5 | ### Overview
6 | Welcome to the UnrealIRCd WebPanel Plugins repository. This repository contains a collection of plugins for the UnrealIRCd WebPanel, made by the community with love, designed to enhance your experience and extend the functionality of your UnrealIRCd WebPanel.
7 |
8 | ### Important Notice
9 | **WARNING: USE AT YOUR OWN RISK**
10 |
11 | These plugins are provided as-is and come with no guarantees or warranties. By using these plugins, you acknowledge and accept the potential risks involved. The developers and contributors of this repository are not responsible for any damages or issues that may arise from the use of these plugins.
12 |
13 | ### Potential Risks
14 | 1. **Security Vulnerabilities**: Plugins may introduce security vulnerabilities that could be exploited by malicious actors.
15 | 2. **Data Loss**: Improper use or bugs within the plugins could result in loss of data.
16 | 3. **System Instability**: Plugins might cause your UnrealIRCd WebPanel or the underlying UnrealIRCd server to become unstable or crash.
17 | 4. **Compatibility Issues**: Not all plugins may be compatible with every version of UnrealIRCd WebPanel or UnrealIRCd.
18 |
19 | ### Recommendations
20 | - **Thoroughly Test**: Before deploying any plugin to a production environment, thoroughly test it in a development or staging environment.
21 | - **Backup Your Data**: Always make sure to backup your data and configuration files before installing any new plugins.
22 | - **Review Code**: If possible, review the source code of the plugins to understand their functionality and potential risks.
23 | - **Stay Updated**: Keep your UnrealIRCd WebPanel, UnrealIRCd server, and plugins updated to the latest versions to mitigate known issues and vulnerabilities.
24 |
25 | ### Installation
26 | To install a plugin from the repository, you can find the "Add New" button in the Plugins section on the webpanel. If you are creating your own plugin, generally this involves copying the plugin files to the appropriate directory and configuring the UnrealIRCd WebPanel to recognize and use the plugin (`config/config.php`)
27 |
28 | ### Contributing
29 | If you would like to contribute to this repository, please fork the repo, make your changes, and submit a pull request. Contributions are welcome but please ensure that your code is well-documented and tested.
30 |
31 | ### License
32 | This repository is licensed under the GPLv3 License. All contributions to this repository must also be GPLv3 or later.
33 |
34 | ### Disclaimer
35 | The use of these plugins is entirely at your own risk. The maintainers of this repository are not liable for any negative consequences resulting from the use of these plugins. Always exercise caution and make informed decisions when integrating third-party plugins into your systems.
36 |
37 | For any issues or questions, please open an issue in this repository or contact the maintainers directly.
38 |
39 | Thank you for using UnrealIRCd WebPanel Plugins. Stay safe and happy coding!
40 |
--------------------------------------------------------------------------------
/mute/index.php:
--------------------------------------------------------------------------------
1 | query("mute.list")->list;
21 | foreach($users as $user)
22 | {
23 | if ($rpc->query("mute.remove", ["nick" => $user->name]))
24 | $unmuted[] = $user->name;
25 | else
26 | $e_unmuted[] = $user->name;
27 | }
28 | }
29 | else
30 | {
31 | if ($rpc->query("mute.remove", ["nick" => $_GET['unmute']]))
32 | $unmuted[] = $_GET['unmute'];
33 | else
34 | $e_unmuted[] = $_GET['unmute'];
35 | }
36 | if (!empty($unmuted))
37 | Message::Success("Unmuted ".count($unmuted)." users");
38 | if (!empty($e_unmuted))
39 | Message::Fail("Could not unmute ".count($e_unmuted)." users");
40 | }
41 | function get_mute_version() : float|NULL
42 | {
43 | global $rpc;
44 | if (!$rpc)
45 | return NULL;
46 | $mods = $rpc->server()->module_list()->list;
47 | foreach ($mods as $m)
48 | {
49 | if ($m->name != "third/mute2" && $m->name != "third/mute")
50 | continue;
51 |
52 | return (float)$m->version;
53 | }
54 | return NULL;
55 | }
56 |
57 | $users = $rpc->query("mute.list");
58 | if (get_mute_version() < 1.4)
59 | Message::Fail("Need to be using module third/mute version 1.4 or later for this plugin to work");
60 | ?>
61 |
| ASN | ASName | Country Code | Count | IPv4 | IPv6 | " . ($asnIsGood ? "Good ASN | " : "") . "
|---|---|---|---|---|---|---|
| " . (empty($info['asn']) ? '-' : '' . $info['asn'] . '') . " | "; 422 | echo "" . (empty($info['asname']) ? 'Localhost ?' : '' . $info['asname']) . '' . " | "; 423 | echo "" . (empty($info['country_code']) ? '-' : "{$info['country_code']} | ";
424 | echo "" . (empty($info['asn']) ? $info['count'] : '') . " | "; 425 | echo "" . (empty($info['asn']) ? '-' : ipFromAsn(4, $info['asn'])) . " | "; 426 | echo "" . (empty($info['asn']) ? '-' : ipFromAsn(6, $info['asn'])) . " | "; 427 | if ($asnIsGood) 428 | echo "" . (empty($info['asn']) ? '-' : (asnExists($info['asn'], $asnFileContent) ? '⚠️' : '✅')) . " | "; 429 | echo "
The \"Good ASN\" column is experimental. By default, all ASNs are considered good, but special attention is given to those listed in the file plugins/IPCloneDetectorAndASNAnalyzer/badasn/list.txt.
"; 437 | ?> 438 | 439 | 440 || IP | 652 |Number of duplicates |
653 | List of names | 654 |
|---|---|---|
| {$entry['ip']} | 659 |{$entry['count']} | 660 |{$entry['names']} | 661 |
| IP | 702 |Number of duplicates |
703 | List of names | 704 |
|---|---|---|
| {$entry['ip']} | 709 |{$entry['count']} | 710 |{$entry['names']} | 711 |
| Type | 747 |Online number | 748 |
|---|---|
| Number of total users | 751 |{$usersCount} | 752 |
| Number of IPv4 | 755 |{$ipv4Count} | 756 |
| Number of IPv6 | 759 |{$ipv6Count} | 760 |
| Number of account | 763 |{$accountCount} | 764 |
| Number of no account | 767 |{$noAccountCount} | 768 |