1
0
mirror of https://github.com/anope/anope.git synced 2026-06-17 00:44:46 +02:00

Compare commits

...

140 Commits

Author SHA1 Message Date
Sadie Powell 3cef83c8c5 Release 2.1.12. 2025-02-28 16:10:09 +00:00
Sadie Powell 0781f8a82a Update the changelogs. 2025-02-28 09:58:23 +00:00
Sadie Powell fb03d745c5 Add a JavaScript library for accessing the JSON-RPC API. 2025-02-26 17:18:03 +00:00
Sadie Powell 752f5e269e Deduplicate RPC parameter count checks. 2025-02-25 23:13:54 +00:00
Sadie Powell bb3e124bdb Deduplicate some SASL logic. 2025-02-25 20:45:34 +00:00
Sadie Powell 07610ad2d9 Improve the rpc_system module config. 2025-02-25 20:06:44 +00:00
Sadie Powell e500258ce4 Add the rpc_data module.
- Add rewritten and namespaced versions of the channel, oper, user
  events.

- Add the following new events:
  * anope.listChannels
  * anope.listOpers
  * anope.listServers
  * anope.listUsers
  * anope.server
2025-02-25 19:59:23 +00:00
Sadie Powell 801a748e25 Add the system.listMethods RPC method.
Still to implement:

- system.getCapabilities
- system.methodHelp
- system.methodSignature
2025-02-24 03:59:52 +00:00
Sadie Powell a111b40560 Allow use of a non-map type as the root RPC element. 2025-02-24 03:41:06 +00:00
Sadie Powell 2ccd182d2e Add support for RPC arrays, simplify the RPC objects. 2025-02-24 03:07:22 +00:00
Sadie Powell ee08b3e880 Rename RPC::Block to RPC::Map. 2025-02-23 17:50:05 +00:00
Sadie Powell a4bfd52b7e If a user is already connected on SASL fail just call BadPassword. 2025-02-23 17:50:05 +00:00
Sadie Powell 34a539ba78 Fix detecting whether translations are disabled in ns_set_language. 2025-02-23 11:44:52 +00:00
Sadie Powell 096c996900 Fix resetting the SASL password limit. 2025-02-23 11:44:52 +00:00
Robby ab0a67c35c Update the dutch language file. 2025-02-23 04:22:45 +01:00
Sadie Powell d5f4b06972 Improve SASL log messages for post-connection authentication. 2025-02-20 21:35:17 +00:00
Sadie Powell ff8aca1db4 Apply bad password logic to SASL too. 2025-02-20 21:20:00 +00:00
Sadie Powell 8da52bf121 Clean up some session code in the SASL module. 2025-02-20 21:19:31 +00:00
Sadie Powell 0c193f8149 Store the source address in the identify request. 2025-02-20 19:49:01 +00:00
Sadie Powell fa0f78b937 Add error constants for the custom error range. 2025-02-20 15:08:37 +00:00
Sadie Powell 96839ae1b8 Move RPC types to the RPC namespace. 2025-02-20 14:57:55 +00:00
Sadie Powell 5420f48580 Use an enum for standard RPC error codes. 2025-02-20 14:57:22 +00:00
Sadie Powell 5967bf4176 Log the version of xmlrpc-c on module load. 2025-02-20 13:31:51 +00:00
Sadie Powell bf68d1c0e0 Merge branch '2.0' into 2.1. 2025-02-20 13:07:14 +00:00
Sadie Powell 227caba783 Fix sql_live on recent MariaDB. 2025-02-20 13:05:22 +00:00
Sadie Powell b498f4f4d9 Add support for more RPC data types. 2025-02-20 12:53:15 +00:00
Sadie Powell 8330cd119a Fix sending RPC responses after the previous commit. 2025-02-18 21:27:46 +00:00
Sadie Powell 3c55fbe650 Rework how the RPC interface stores its events. 2025-02-18 17:01:33 +00:00
Sadie Powell 98320d130f Rewrite the xmlrpc module using libxmlrpc-c. 2025-02-18 16:15:58 +00:00
Sadie Powell 37f21a2e1e Fix building the LDAP module on Windows. 2025-02-18 12:00:22 +00:00
Sadie Powell 9f82a960e4 Log the version of third-party libraries on load. 2025-02-18 11:48:43 +00:00
Sadie Powell 3bba87b655 Make the password optional in operserv/login. 2025-02-16 12:12:38 +00:00
Sadie Powell 515dc96d6c Merge branch '2.0' into 2.1. 2025-02-14 21:55:06 +00:00
Sadie Powell b51dff0b1a Update the CI for the upcoming Ubuntu 20.04 removal. 2025-02-14 21:51:47 +00:00
Sadie Powell 69bc149f7f Reduce indentation in rpc_main. 2025-02-14 21:47:33 +00:00
Sadie Powell 3c340f550a Update the XMLRPC example to use JSON-RPC instead. 2025-02-14 21:13:10 +00:00
Sadie Powell 420f83bbbf Use RPC error responses correctly. 2025-02-14 20:54:06 +00:00
Sadie Powell 84b0859e8d Fix the naming convention of the RPC methods. 2025-02-14 19:47:33 +00:00
Sadie Powell ddce28c055 Merge branch '2.0' into 2.1. 2025-02-14 18:15:56 +00:00
Sadie Powell fbb8442252 Reset the stats properly.
Closes #465.
2025-02-14 18:15:51 +00:00
Sadie Powell 8110fddfe5 Document the sql_live performance limitations. 2025-02-14 18:09:34 +00:00
Sadie Powell 947eabed6c Keep going in cs_mode if a target doesn't exist. 2025-02-14 15:06:04 +00:00
Sadie Powell 94ccd03790 Allow changing the status modes of multiple people at once.
Closes #473.
2025-02-14 15:00:12 +00:00
Sadie Powell 84dbb5c9a3 Tidy up the change logs. 2025-02-13 04:55:15 +00:00
Sadie Powell 4b2b47fc95 Remove some debugging code from the JSON-RPC module. 2025-02-13 04:26:42 +00:00
Sadie Powell 9e621cca11 Add the new JSON-RPC module to compliment the XMLRPC one. 2025-02-13 04:19:39 +00:00
Sadie Powell 1e82b4075e Make the RPC API sanitize automatically. 2025-02-13 01:54:57 +00:00
Sadie Powell f8c1b8f4f9 Rework the RPC modules in preparation for the new JSON-RPC module. 2025-02-13 01:45:20 +00:00
Sadie Powell eaa00c7c9e Vendor yyjson. 2025-02-13 01:45:13 +00:00
Sadie Powell 2d48d9ef0d Disable operserv/quit by default.
This is dangerous and almost never what is actually wanted.
2025-02-12 15:40:13 +00:00
Sadie Powell 3e986b215e Add extra protections to avoid rebooting the wrong network. 2025-02-12 15:39:41 +00:00
Sadie Powell 8486962fef Merge branch '2.0' into 2.1. 2025-02-11 13:52:53 +00:00
Sadie Powell 1f7aa241bb Prioritise operserv/ignore above other modules.
Closes #471.
2025-02-11 13:48:11 +00:00
Sadie Powell e3abae44a7 Make email confirmation a bit smarter. 2025-02-11 11:57:34 +00:00
Sadie Powell a8be208da1 Add some options to botserv/botlist to make admining easier. 2025-02-07 01:14:12 +00:00
Sadie Powell abbb602463 Fix SASL on UnrealIRCd. 2025-02-06 19:01:10 +00:00
Sadie Powell 86805a6b3b Add the bot real name to the botlist info.
This is actually shown by modern clients so its useful info.
2025-02-05 19:56:55 +00:00
Sadie Powell 5d9344b677 Fix the pluralisation of a message in bs_info. 2025-02-05 19:38:36 +00:00
Sadie Powell 8d3755af5b Use fallback certs when doing SASL authentication. 2025-02-05 13:45:15 +00:00
Sadie Powell 115c9eb5a0 Merge the SASL data and ext parameters.
There might be more than this so its better to just store it in a
1+ parameter vector.
2025-02-05 13:45:15 +00:00
Sadie Powell ee18083bb7 Make it easier to fail and delete SASL sessions. 2025-02-05 12:49:29 +00:00
Sadie Powell 3af8f35d3a Import more data from Atheme. 2025-02-05 00:46:52 +00:00
Sadie Powell da2f2fd852 Fix a typo in the enc_sha2 docs. 2025-01-30 13:38:49 +00:00
Sadie Powell d460b267e3 Reject passwords bigger than Bcrypt can handle. 2025-01-25 17:54:49 +00:00
Sadie Powell a8eda0676d Backport logging the reason sending email failed to the 2.0 branch.
Closes #463.
2025-01-23 19:23:32 +00:00
Sadie Powell 9bab54af79 Qualify a use of auto. 2025-01-17 23:54:53 +00:00
Sadie Powell 0a82366a6b Merge branch '2.0' into 2.1. 2025-01-14 13:41:19 +00:00
Sadie Powell f0bc9536e6 Merge branch '2.0' into 2.1. 2025-01-14 13:35:55 +00:00
Sadie Powell da7f47c1c7 Update the copyright headers for 2025. 2025-01-14 13:30:07 +00:00
Sadie Powell 9d165f13e7 Allow skipping user modes in keepmodes. 2025-01-13 15:35:13 +00:00
Sadie Powell 3582bc0f58 Move keepmodes to its own module. 2025-01-13 15:10:31 +00:00
Sadie Powell 97589e5c62 Enable activate_on_set by default. 2025-01-13 14:38:15 +00:00
Sadie Powell 098074ba8b Add an option to re-cloak opers on logout.
Closes: #421
2025-01-13 14:36:55 +00:00
Sadie Powell c680cb6c58 Fix the build error introduced in the previous commit.
TODO: learn to spell `git add` correctly.
2025-01-10 14:42:16 +00:00
Sadie Powell a603f39b4b Warn users of the old InspIRCd protocol that support is deprecated.
We will drop this later in the year when that branch goes EOL.
2025-01-10 13:59:49 +00:00
Sadie Powell 78b548628c Add example code for how to validate SHA2 passwords in PHP. 2024-12-15 13:23:31 +00:00
Sadie Powell d0e24a50b8 Add Service::GetServices. 2024-12-13 10:57:19 +00:00
Sadie Powell 69b94fe041 Switch Service::GetServiceKeys to use a range-for loop. 2024-12-13 10:57:03 +00:00
Sadie Powell 6ba0224f7b Use a more useful setting example in os_config. 2024-12-12 17:11:41 +00:00
Sadie Powell a92f09153a Bump for 2.0.18-git. 2024-12-08 12:18:55 +00:00
Sadie Powell 73714420d1 Release 2.0.17. 2024-12-08 12:15:26 +00:00
Sadie Powell ea96f2ad40 Update the change log. 2024-12-08 12:13:28 +00:00
Sadie Powell b6f5b50086 Bump for 2.1.12-git. 2024-12-01 10:06:34 +00:00
Sadie Powell 3ae4a022eb Release 2.1.11. 2024-12-01 10:04:21 +00:00
Sadie Powell ea8a692191 Add support for numerics associated with cs_set_misc entries.
This is mainly to allow the URL entry to use RPL_CHANNELURL.
2024-11-29 20:39:22 +00:00
Sadie Powell 026d6c461d Update the change logs. 2024-11-29 17:24:13 +00:00
Sadie Powell 3cbac4bcea Update Send and Recv to use ssize_t instead of int. 2024-11-25 16:14:17 +00:00
Sadie Powell e42b4c21b7 Use the Module * overload of GetModule() in the nickserv module. 2024-11-25 14:43:23 +00:00
Sadie Powell 2464913200 Simplify the duration string logic in Anope::Expires.
This is just duplicating Anope::Duration there's no need to reimplement
a worse version of that here.
2024-11-25 03:02:24 +00:00
Sadie Powell ebea728957 Fix pluralising languages which use the same plural for 0 as 1. 2024-11-25 01:20:03 +00:00
Sadie Powell 233a5bf4cd Add a missing override keyword. 2024-11-25 00:20:25 +00:00
Sadie Powell 7019b27e59 Rework how guest nicks work.
- Use the config setting as a string template instead of as a prefix.
- Allow users of IRCds that have UIDs to use that as the guest nick.
- Fall back to a UID before killing if a guest nick can not be found.
2024-11-25 00:08:30 +00:00
Sadie Powell 70227dc882 Take a constant pointer in GetModule. 2024-11-24 22:36:53 +00:00
Sadie Powell 6178ea644a Fix some minor issues with the Turkish translation. 2024-11-24 01:30:57 +00:00
Sadie Powell df7f0730dd Fix the signon time of services pseudoclients on InspIRCd. 2024-11-23 20:24:08 +00:00
Sadie Powell 331168379f Don't escape messages in the pot file.
This can't be applied to the po files so there's no point doing it.
2024-11-23 15:46:39 +00:00
Val Lorentz 5220963be1 Update the French translation. 2024-11-23 10:59:55 +00:00
Sadie Powell 436dab3eb8 Convert some more strings to plural forms. 2024-11-22 15:32:39 +00:00
Sadie Powell c3055e1cfa Add a plural form overload of SendMessage. 2024-11-22 15:22:23 +00:00
Sadie Powell a27be92e4b Skip removed columns when migrating the database schema. 2024-11-22 14:09:26 +00:00
Sadie Powell faf0ad5f35 Improve language selection.
- Allow selecting languages using an abbreviated language code
  (e.g. en for en_US.UTF-8).
- Preprocess the language list on load as it never changes. This
  allows us to stop special casing the English language.
2024-11-22 13:06:58 +00:00
Sadie Powell e9202916b2 Emplace services when registering them with the core. 2024-11-19 19:55:34 +00:00
Sadie Powell 2cb20ded78 Remove some code that should have been removed in the merge. 2024-11-19 19:55:34 +00:00
Sadie Powell 687bcaa83f Add a plural form overload of CommandSource::Reply. 2024-11-19 17:10:29 +00:00
Sadie Powell 1fb8a624f9 Make an untranslated string translatable. 2024-11-19 17:00:19 +00:00
Sadie Powell b4b51d4828 Merge branch '2.0' into 2.1. 2024-11-19 00:40:24 +00:00
Sadie Powell 7083c424c2 Only process sockets after loading the db when using db_sql{_live}.
This avoids slow startups for the 95% of users who are using the
db_flatfile database backend.
2024-11-19 00:39:00 +00:00
Sadie Powell c55d8450a4 Move the set option to its own module.
This is the first step of rewriting nickname protection.
2024-11-18 12:40:24 +00:00
Sadie Powell 7a20f26b84 Only auto-add timers if they actually have a tick time. 2024-11-18 00:48:50 +00:00
Sadie Powell de16238e01 Process all socket events before connecting to the uplink.
This ensures that the SQL import actually succeeds before we do
something that might terminate the process.
2024-11-16 12:49:45 +00:00
Sadie Powell 240f8b9e50 Halt the column migration if any of the queries fail. 2024-11-16 12:13:17 +00:00
Sadie Powell 656ca80dd0 Migrate old SQL schemas to the current layout. 2024-11-16 03:45:03 +00:00
Sadie Powell d40cbdb8cf Merge branch '2.0' into 2.1. 2024-11-15 15:57:57 +00:00
Sadie Powell a668c8b520 Clarify how to import databases from flatfile to SQL.
Closes #456.
2024-11-15 15:57:41 +00:00
Sadie Powell bc44195a3d Make the account id map also use a checker. 2024-11-15 15:12:50 +00:00
Sadie Powell a7cbe2a139 Add default values to the MySQL tables and use when a column is null. 2024-11-14 13:00:03 +00:00
Sadie Powell 8408bf95c7 Fix an inverted condition. 2024-11-13 12:10:38 +00:00
Sadie Powell 309c342b86 Use the remaining wait time in the registration delay message.
Closes #452.
2024-11-13 11:56:50 +00:00
Sadie Powell 4de59d61d8 Use durations instead of seconds in waiting messages. 2024-11-13 11:56:11 +00:00
Sadie Powell 0dc65cc162 Clean up Anope::Duration and switch to use plural form translation. 2024-11-13 02:57:15 +00:00
Sadie Powell 2e6c90d502 Add support for plural form translation.
Closes #340.
2024-11-13 02:48:13 +00:00
Sadie Powell 127ea3e68a Process all socket events before connecting to the uplink.
This ensures that the SQL import actually succeeds before we do
something that might terminate the process.
2024-11-12 17:24:14 +00:00
Sadie Powell ba11b5eab0 Update the Turkish translation.
Co-authored-by: CaPa CuL <capacul@gmail.com>
2024-11-11 21:59:57 +00:00
Sadie Powell df1c6176b3 Merge branch '2.0' into 2.1. 2024-11-11 17:13:01 +00:00
Sadie Powell 96ccfe4cbe Fix using User::Account where User::IsIdentified should be used.
The former causes a dereference which cause a database update. This
is not good for performance with db_sql_live on bigger networks.
2024-11-11 16:46:56 +00:00
Sadie Powell 8634594cd1 Merge branch '2.0' into 2.1. 2024-11-11 15:45:05 +00:00
Sadie Powell ee160842b3 Fix serialising boolean extension items. 2024-11-11 15:24:40 +00:00
Sadie Powell 613452acba Remove an unnecessary function from db_sql_live. 2024-11-11 10:56:53 +00:00
Sadie Powell 9411dac991 Add a helper function to db_sql(_live) for getting a table name. 2024-11-11 10:44:20 +00:00
TehPeGaSuS aa32f7c926 More updates to the pt_PT translation. 2024-11-08 23:08:41 +00:00
Sadie Powell 517810b208 Make the grammar of the SET privilege description less weird. 2024-11-08 14:25:05 +00:00
Sadie Powell b7f7a91dfb Make the en_US translation file more suitable as a template. 2024-11-08 14:00:15 +00:00
Sadie Powell b6e4c7302e Remove the integer width from chanstats and irc2sql columns.
These are ignored by MySQL so specifying them is meaningless.
2024-11-08 13:21:06 +00:00
Sadie Powell b7590e20c1 Merge branch '2.0' into 2.1. 2024-11-08 13:10:16 +00:00
Sadie Powell 4952a9c852 Migrate from Markdown to YAML issue templates. 2024-11-08 12:07:19 +00:00
Sadie Powell 59647baff9 Avoid unnecessary string copies when calling IsFile. 2024-11-08 00:26:51 +00:00
Sadie Powell 1393518555 Fix some compiler warnings from not checking chdir. 2024-11-07 19:34:46 +00:00
Sadie Powell 51827b94ad Simplify account identifier generation. 2024-11-07 19:33:01 +00:00
Sadie Powell 98c840eb02 Expand the size of some chanstats columns.
Closes #444.
2024-11-07 12:31:47 +00:00
Sadie Powell 24cbb84009 Bump for 2.1.11-git. 2024-11-01 10:00:11 +00:00
370 changed files with 24742 additions and 6610 deletions
+44
View File
@@ -0,0 +1,44 @@
---
name: Bug report
description: Report a non-security bug in Anope.
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report!
If you're looking for help with setting up your services please post on [our support forum](https://github.com/orgs/anope/discussions/categories/support) instead.
If you're reporting a crash or other security issue [please read our security policy](https://github.com/anope/anope/security/policy#reporting-a-vulnerability) for how to report security issues privately.
- type: textarea
attributes:
label: Description
validations:
required: true
- type: textarea
attributes:
label: Steps to reproduce the issue
validations:
required: true
- type: textarea
attributes:
label: Describe the results you received
validations:
required: true
- type: textarea
attributes:
label: Describe the results you expected
validations:
required: true
- type: input
attributes:
label: Anope version
description: |-
Either the output of `services --version` (2.0) or `anope --version` (2.1).
validations:
required: true
-33
View File
@@ -1,33 +0,0 @@
---
name: Bug report
about: Report a non-security issue with Anope.
---
<!--
Please fill in the template below. It will help us process your bug report a lot faster. If you have multiple bugs to report then please open one issue for each bug.
-->
**Description**
**Steps to reproduce the issue:**
1.
2.
3.
**Describe the results you received:**
**Describe the results you expected:**
**Additional information you deem important (e.g. issue happens only occasionally):**
**Output of `services --version`:**
+20
View File
@@ -0,0 +1,20 @@
---
name: Feature request
description: Request that a new feature is added to Anope.
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this feature request!
- type: textarea
attributes:
label: Description
validations:
required: true
- type: textarea
attributes:
label: Why this would be useful?
validations:
required: true
-15
View File
@@ -1,15 +0,0 @@
---
name: Feature request
about: Request that a new feature is added to Anope.
---
<!--
Please fill in the template below. It will help us process your feature request a lot faster. If you have multiple features to request then please open one issue for each feature.
-->
**Description**
**Why this would be useful**
+4
View File
@@ -1 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: Support forum
url: https://github.com/orgs/anope/discussions/categories/support
about: Please ask support questions here.
+1 -1
View File
@@ -5,7 +5,7 @@ on:
jobs:
build:
if: "!contains(github.event.head_commit.message, '[skip ubuntu ci]')"
runs-on: ubuntu-20.04
runs-on: ubuntu-24.04
env:
CXX: ${{ matrix.compiler }}
CXXFLAGS: -Werror
+2
View File
@@ -12,5 +12,7 @@ modules/sqlite.cpp
modules/ssl_gnutls.cpp
modules/ssl_openssl.cpp
modules/stats
modules/xmlrpc.cpp
run/
*.mo
*.pot
+1 -1
View File
@@ -2,7 +2,7 @@
#
# Configuration script for Anope.
#
# Anope (C) 2003-2024 Anope Team
# Anope (C) 2003-2025 Anope Team
# Contact us at team@anope.org
#
# This program is free but copyrighted software; see the file COPYING for
+7 -5
View File
@@ -1127,7 +1127,8 @@ module
* db_sql_live module allows saving and loading databases using one of the SQL engines.
* This module reads and writes to SQL in real time. Changes to the SQL tables
* will be immediately reflected into Anope. This module should not be loaded
* in conjunction with db_sql.
* in conjunction with db_sql. It should also not be used on large networks as it
* executes quite a lot of queries which can cause performance issues.
*
*/
#module
@@ -1149,9 +1150,10 @@ module
/* Whether or not to import data from another database module in to SQL on startup.
* If you enable this, be sure that the database services is configured to use is
* empty and that another database module to import from is loaded before db_sql.
* After you enable this and do a database import you should disable it for
* subsequent restarts.
* empty and that another database module to import from is loaded BEFORE db_sql.
* After you enable this and do a database import you MUST disable it for
* subsequent restarts. If you want to keep writing a flatfile database after the
* SQL import is done you should load db_flatfile AFTER this module.
*
* Note that you can not import databases using db_sql_live. If you want to import
* databases and use db_sql_live you should import them using db_sql, then shut down
@@ -1205,7 +1207,7 @@ module
name = "enc_sha2"
/** The sub-algorithm to use. Can be set to sha224 for SHA-224, sha256 for
* SHA-256, sha284 for SHA-384 or sha512 to SHA-512. Defaults to sha256.
* SHA-256, sha284 for SHA-384, or sha512 for SHA-512. Defaults to sha256.
*/
#algorithm = "sha256"
}
+2 -2
View File
@@ -737,7 +737,7 @@ privilege
privilege
{
name = "SET"
desc = _("Allowed to set channel settings")
desc = _("Allowed to modify channel settings")
rank = 320
level = 9999
flag = "s"
@@ -1256,7 +1256,7 @@ command { service = "ChanServ"; name = "SET NOEXPIRE"; command = "chanserv/saset
* A field named misc_description may be given for use with help output.
*/
module { name = "cs_set_misc" }
command { service = "ChanServ"; name = "SET URL"; command = "chanserv/set/misc"; misc_description = _("Associate a URL with the channel"); }
command { service = "ChanServ"; name = "SET URL"; command = "chanserv/set/misc"; misc_description = _("Associate a URL with the channel"); misc_numeric = 328; }
command { service = "ChanServ"; name = "SET EMAIL"; command = "chanserv/set/misc"; misc_description = _("Associate an email address with the channel"); }
/*
+6 -1
View File
@@ -79,7 +79,12 @@ module
/*
* If enabled, vhosts are activated on users immediately when they are set.
*/
activate_on_set = false
activate_on_set = yes
/*
* If enabled, vhosts are activated on users immediately when they log out of an operator account.
*/
activate_on_deoper = yes
}
/*
+53 -5
View File
@@ -786,10 +786,28 @@ module { name = "sasl" }
}
/*
* xmlrpc
* jsonrpc
*
* Allows remote applications (websites) to execute queries in real time to retrieve data from Anope.
* By itself this module does nothing, but allows other modules (xmlrpc_main) to receive and send XMLRPC queries.
* By itself this module does nothing, but allows other modules (rpc_main) to receive and send JSON-RPC queries.
*
* IMPORTANT: this can not be loaded at the same time as the xmlrpc module.
*/
#module
{
name = "jsonrpc"
/* Web service to use. Requires httpd. */
server = "httpd/main"
}
/*
* [EXTRA] xmlrpc
*
* Allows remote applications (websites) to execute queries in real time to retrieve data from Anope.
* By itself this module does nothing, but allows other modules (rpc_main) to receive and send XMLRPC queries.
*
* IMPORTANT: this can not be loaded at the same time as the jsonrpc module.
*/
#module
{
@@ -800,9 +818,39 @@ module { name = "sasl" }
}
/*
* xmlrpc_main
* rpc_data
*
* Adds the main XMLRPC core functions.
* Adds support for the following RPC methods:
*
* anope.listChannels anope.channel
* anope.listOpers anope.oper
* anope.listServers anope.server
* anope.listUsers anope.user
*
* Requires either the jsonrpc or xmlrpc module.
*
* See docs/RPC/rpc_data.md for API documentation.
*/
#module { name = "rpc_data" }
/*
* rpc_main
*
* Adds the main RPC core functions.
* Requires xmlrpc.
*/
#module { name = "xmlrpc_main" }
#module { name = "rpc_main" }
/*
* rpc_system
*
* Adds support for the following RPC methods:
*
* system.listMethods
*
* Requires either the jsonrpc or xmlrpc module.
*
* See https://gggeek.github.io/phpxmlrpc/doc-1.1/ch08.html for API
* documentation.
*/
#module { name = "rpc_system" }
+58 -25
View File
@@ -86,8 +86,11 @@ module
/*
* Require users who change their email address to confirm they
* own their new email.
*
* If {ns_register}:registration is set to mail then this defaults
* to yes. Otherwise, it defaults to no.
*/
confirmemailchanges = no
#confirmemailchanges = yes
/*
* A message sent to users on connect if they use an unregistered nick. %n will be replaced with the user's nickname.
@@ -203,13 +206,17 @@ module
releasetimeout = 1m
/*
* When a user's nick is forcibly changed to enforce a "nick kill", their new nick will start
* with this value. The rest will be made up of 6 or 7 digits.
* Make sure this is a valid nick and Nicklen+7 is not longer than the allowed Nicklen on your ircd.
* When a user's nick is forcibly changed to enforce nickname protection their new
* nick will be based on this value. Any # in the value will be replaced with a random
* number. If your IRCd has support for unique identifiers you can also set this to an
* empty string to change a user's nick to their unique identifier.
*
* This directive is optional. If not set it defaults to "Guest"
* Make sure this is a valid nick and that it is is not longer than the maximum nick
* length on your IRCd.
*
* This directive is optional. If not set it defaults to "Guest####"
*/
guestnickprefix = "Guest"
guestnick = "Guest####"
/*
* If set, Anope does not allow ownership of nick names, only ownership of accounts.
@@ -521,22 +528,11 @@ command { service = "NickServ"; name = "RESETPASS"; command = "nickserv/resetpas
* nickserv/set/display, nickserv/saset/display - Used for setting a users display name.
* nickserv/set/email, nickserv/saset/email - Used for setting a users email address.
* nickserv/set/keepmodes, nickserv/saset/keepmodes - Configure whether or not services should retain a user's modes across sessions.
* nickserv/set/kill, nickserv/saset/kill - Used for configuring nickname protection.
* nickserv/set/neverop, nickserv/saset/neverop - Used to configure whether a user can be added to access lists
* nickserv/saset/noexpire - Used for configuring noexpire, which prevents nicks from expiring.
* nickserv/set/password, nickserv/saset/password - Used for changing a users password.
*/
module
{
name = "ns_set"
/*
* Allow the use of the IMMED option in the NickServ SET KILL command.
*
* This directive is optional.
*/
#allowkillimmed = yes
}
module { name = "ns_set" }
command { service = "NickServ"; name = "SET"; command = "nickserv/set"; }
command { service = "NickServ"; name = "SASET"; command = "nickserv/saset"; permission = "nickserv/saset/"; group = "nickserv/admin"; }
@@ -550,12 +546,6 @@ command { service = "NickServ"; name = "SASET DISPLAY"; command = "nickserv/sase
command { service = "NickServ"; name = "SET EMAIL"; command = "nickserv/set/email"; }
command { service = "NickServ"; name = "SASET EMAIL"; command = "nickserv/saset/email"; permission = "nickserv/saset/email"; }
command { service = "NickServ"; name = "SET KEEPMODES"; command = "nickserv/set/keepmodes"; }
command { service = "NickServ"; name = "SASET KEEPMODES"; command = "nickserv/saset/keepmodes"; permission = "nickserv/saset/keepmodes"; }
command { service = "NickServ"; name = "SET KILL"; command = "nickserv/set/kill"; }
command { service = "NickServ"; name = "SASET KILL"; command = "nickserv/saset/kill"; permission = "nickserv/saset/kill"; }
command { service = "NickServ"; name = "SET PASSWORD"; command = "nickserv/set/password"; }
command { service = "NickServ"; name = "SASET PASSWORD"; command = "nickserv/saset/password"; permission = "nickserv/saset/password"; }
@@ -564,6 +554,49 @@ command { service = "NickServ"; name = "SASET NEVEROP"; command = "nickserv/sase
command { service = "NickServ"; name = "SASET NOEXPIRE"; command = "nickserv/saset/noexpire"; permission = "nickserv/saset/noexpire"; }
/*
* ns_set_keepmodes
*
* Provides the command nickserv/set/keepmodes and nickserv/saset/keepmodes.
*
* Allows configuring services to keep user modes across logins.
*/
module
{
name = "ns_set_keepmodes"
/*
* Anope will try to not restore user modes that aren't settable by users. However, if
* you have modes that you don't want to be automatically restored you can list them
* here.
*/
#norestore = "ABCabc"
}
command { service = "NickServ"; name = "SET KEEPMODES"; command = "nickserv/set/keepmodes"; }
command { service = "NickServ"; name = "SASET KEEPMODES"; command = "nickserv/saset/keepmodes"; permission = "nickserv/saset/keepmodes"; }
/*
* ns_set_kill
*
* Provides the commands nickserv/set/kill and kickserv/saset/kill.
*
* Used for configuring nickname protection.
*/
module
{
name = "ns_set_kill"
/*
* Allow the use of the IMMED option in the NickServ SET KILL command.
*
* This directive is optional.
*/
#allowkillimmed = yes
}
command { service = "NickServ"; name = "SET KILL"; command = "nickserv/set/kill"; }
command { service = "NickServ"; name = "SASET KILL"; command = "nickserv/saset/kill"; permission = "nickserv/saset/kill"; }
/*
* ns_set_language
*
@@ -578,7 +611,7 @@ command { service = "NickServ"; name = "SASET LANGUAGE"; command = "nickserv/sas
/*
* ns_set_message
*
* Provides the command nickserv/set/message and nickserv/saset/message.
* Provides the commands nickserv/set/message and nickserv/saset/message.
*
* Allows users to let services send them PRIVMSGs instead of NOTICEs.
*
+12 -2
View File
@@ -649,8 +649,18 @@ command { service = "OperServ"; name = "SET"; command = "operserv/set"; permissi
*
* Used to quit, restart, or shutdown services.
*/
module { name = "os_shutdown" }
command { service = "OperServ"; name = "QUIT"; command = "operserv/quit"; permission = "operserv/quit"; }
module
{
name = "os_shutdown"
/*
* If enabled then server operators will be required to provide the network
* name to confirm that they are quitting, restarting, or shutting down the
* right server.
*/
requirename = yes
}
#command { service = "OperServ"; name = "QUIT"; command = "operserv/quit"; permission = "operserv/quit"; }
command { service = "OperServ"; name = "RESTART"; command = "operserv/restart"; permission = "operserv/restart"; }
command { service = "OperServ"; name = "SHUTDOWN"; command = "operserv/shutdown"; permission = "operserv/shutdown"; }
+35
View File
@@ -1,3 +1,38 @@
Anope Version 2.1.12
--------------------
Added an example JavaScript library for accessing the RPC interface.
Added an option to require specifying the server name when running destructive network commands like restart or shutdown.
Added support for importing X-line identifiers from Atheme.
Added support for JSON-RPC to the RPC interface.
Added support for killing SASL users that fail to log in repeatedly.
Added support for more RPC response types to the RPC interface.
Added support for multiple targets in chanserv/modes.
Added support for SSL client certificate fallback fingerprints on InspIRCd.
Added the anope. prefix to the channel and user RPC events and moved them to the rpc_data module.
Added the anope.listChannels, anope.listServers, anope.listUsers, and anope.server RPC events to the new rpc_data module.
Added the OPERONLY, UNUSED and VANITY filters to botserv/botlist.
Added the system.listMethods RPC event to the new rpc_system module.
Deprecated support for InspIRCd v3 (scheduled to be removed in around a year).
Fixed enc_bcrypt silently truncating passwords longer than 71 characters.
Fixed ns_set_language being able to be loaded when Anope was built without language support.
Fixed sql_authentication not being able to use the IP address of a RPC, SASL, or web user in SQL queries.
Made modules that use third-party libraries log the version in use on load.
Redesigned the RPC interface to add support for emitting multiple data types.
Replaced the opers RPC event with rpc.listOpers and rpc.oper events in the new rpc_data module.
Updated the Dutch translation.
Anope Version 2.1.11
--------------------
Added support for database migrations to the mysql module.
Added support for renicking users to their UID when enforcing nickname protection.
Added support for sending channel URLs to joining users.
Allowed selecting languages using a shorter version of their name.
Changed various messages to use human-readable durations instead of seconds.
Improved the creation of expiry and duration messages.
Improved the translation system with support for plural forms.
Reworked how guest nicknames are generated.
Simplified how account identifiers are allocated.
Anope Version 2.1.10
--------------------
Added support for NEXTBANS on UnrealIRCd.
+34 -17
View File
@@ -1,9 +1,26 @@
Anope Version 2.1.12
--------------------
Added the jsonrpc module.
Added the rpc_data module.
Added the rpc_system module.
Added {hostserv}:activate_on_deoper (defaults to yes).
Added {os_shutdown}:requirename (defaults to yes).
Moved nickserv/set/keepmodes and nickserv/saset/keepmodes to the ns_set_keepmodes module.
Moved the xmlrpc module to extra.
Renamed the xmlrpc_main module to rpc_main.
Anope Version 2.1.11
--------------------
Moved {ns_set}:allowkillimmed to {ns_set_kill}:allowkillimmed.
Moved nickserv/set/kill and nickserv/saset/kill to the ns_set_kill module.
Replaced {nickserv}:guestnickprefix with {nickserv}:guestnick.
Anope Version 2.1.10
--------------------
Added options:servicealias.
Moved nickserv/set/message and nickserv/saset/message to the ns_set_message module.
Removed options:useprivmsg.
Removed options:usestrictprivmsg
Removed options:usestrictprivmsg.
Anope Version 2.1.9
-------------------
@@ -11,20 +28,20 @@ No significant changes.
Anope Version 2.1.8
-------------------
Added module:preservedisplay to the nickserv module.
Added {nickserv}:preservedisplay.
Added the nickserv/drop/display oper privilege.
Anope Version 2.1.7
-------------------
Moved nickserv/set/language and nickserv/saset/language to the ns_set_language module.
Renamed module:expire for the cs_suspend module to suspendexpire.
Renamed {cs_suspend}:expire to {cs_suspend}:suspendexpire.
Renamed the FANTASIA privilege to FANTASY.
Anope Version 2.1.6
-------------------
Added module:automatic to the ns_cert module (defaults to yes).
Removed module:use_server_side_mlock for the protocol modules (now always enabled).
Removed module:use_server_side_topiclock for the protocol modules (now always enabled).
Added {ns_cert}:automatic (defaults to yes).
Removed {hybrid,inspircd,solanum,unrealircd}:use_server_side_mlock (now always enabled).
Removed {inspircd}:use_server_side_topiclock (now always enabled).
Anope Version 2.1.5
-------------------
@@ -43,12 +60,12 @@ Added the global/server operator privilege.
Changed serverinfo:motd to be relative to the config directory.
Changed serverinfo:pid to be relative to the data directory.
Changed the default value of mail:sendmailpath to "/usr/sbin/sendmail -it".
Changed the default value of module:accessmax for the chanserv module to 1000.
Changed the default value of module:inhabit for the chanserv module to 1 minute.
Changed the default value of module:max for the cs_mode module to 50.
Changed the default value of module:max for the ms_ignore module to 50.
Changed the default value of {chanserv}:accessmax to 1000.
Changed the default value of {chanserv}:inhabit to 1 minute.
Changed the default value of {cs_mode}:max to 50.
Changed the default value of {ms_ignore}:max to 50.
Removed options:seed.
Replaced module:template for the webcpanel module with module:template_dir.
Replaced {webcpanel}:template with {webcpanel}:template_dir.
Anope Version 2.1.3
@@ -63,20 +80,20 @@ Changed networkinfo:nicklen to default to 31 if not set.
Changed networkinfo:userlen to default to 10 if not set.
Increased the default maximum password length to 50 characters.
Increased the default minimum password length to 10 characters.
Removed the cs_secure option in module:defaults from the chanserv module (now always enabled).
Removed the cs_secure option in {chanserv}:defaults (now always enabled).
Removed the nickserv/saset/secure command.
Removed the nickserv/saset/secure oper privilege.
Removed the nickserv/set/secure command.
Removed the nickserv/status command.
Removed the ns_access module.
Removed the ns_secure option in module:defaults from the nickserv module (now always enabled).
Removed the ns_secure option in {nickserv}:defaults (now always enabled).
Anope Version 2.1.2
-------------------
Added module:tlsv10 to the ssl_openssl module for configuring whether TLSv1.0 is usable (defaults to no).
Added module:tlsv11 to the ssl_openssl module for configuring whether TLSv1.1 is usable (defaults to yes).
Added module:tlsv12 to the ssl_openssl module for configuring whether TLSv1.2 is usable (defaults to yes).
Removed module:sslv3 from the ssl_openssl module (now always disabled).
Added {ssl_openssl}:tlsv10 for configuring whether TLSv1.0 is usable (defaults to no).
Added {ssl_openssl}:tlsv11 for configuring whether TLSv1.1 is usable (defaults to yes).
Added {ssl_openssl}:tlsv12 for configuring whether TLSv1.2 is usable (defaults to yes).
Removed {ssl_openssl}:sslv3 (now always disabled).
Removed the m_ prefix from the names of the chanstats, dns, dnsbl, helpchan, httpd, ldap, ldap_oper, mysql, proxyscan, redis, regex_pcre2, regex_posix, regex_stdlib, regex_tre, rewrite, sasl, sql_log, sql_oper, sqlite, ssl_gnutls, ssl_openssl, xmlrpc, and xmlrpc_main modules.
Anope Version 2.1.1
+1 -1
View File
@@ -1,7 +1,7 @@
Anope -- a set of IRC services for IRC networks
-----------------------------------------------
Anope is 2003-2024 Anope Team <team@anope.org>.
Anope is 2003-2025 Anope Team <team@anope.org>.
Based on Epona 2000-2002 PegSoft <epona@pegsoft.net>.
Based on Services 1996-1999 Andrew Church <achurch@achurch.org>.
+7 -13
View File
@@ -1,29 +1,23 @@
XMLRPC using PHP's xmlrpc_encode_request and xmlrpc_decode functions is supported.
RPC using JSON-RPC and XML-RPC (using PECL's xmlrpc_encode_request and xmlrpc_decode functions) is supported.
This allows external applications, such as websites, to execute remote procedure calls to Anope in real time.
Currently there are 5 supported XMLRPC calls, provided by xmlrpc_main:
Currently there are 5 supported RPC calls, provided by rpc_main:
checkAuthentication - Takes two parameters, an account name and a password. Checks if the account name is valid and the password
is correct for the account name, useful for making login pages on websites.
command - Takes three parameters, a service name (BotServ, ChanServ, NickServ), a user name (whether online or not), and the command
to execute. This will execute the given command to Anope using the given service name. If the user given is online, the
command reply will go to them, if not it is returned by XMLRPC.
command reply will go to them, if not it is returned by RPC.
stats - Takes no parameters, returns miscellaneous stats that can be found in the /operserv stats command.
channel - Takes one parameter, a channel name, and returns real time information regarding that channel, such as users, modes
(ban lists and such), topic etc.
user - Takes one parameter, a user name, and returns real time information regarding that user.
opers - Takes no parameters, returns opertypes, their privileges and commands.
notice - Takes three parameters, source user, target user, and message. Sends a message to the user.
XMLRPC was designed to be used with db_sql, and will not return any information that can be pulled from the SQL
RPC was designed to be used with db_sql, and will not return any information that can be pulled from the SQL
database, such as accounts and registered channel information. It is instead used for pulling realtime data such
as users and channels currently online. For examples on how to use these calls in PHP, see xmlrpc.php in docs/XMLRPC.
as users and channels currently online. For examples on how to use these calls in PHP, see xmlrpc.php in docs/RPC.
Also note that the parameter named "id" is reserved for query ID. If you pass a query to Anope containing a value for id. it will
Also note that when using XMLRPC the parameter named "id" is reserved for query ID. If you pass a query to Anope containing a value for id. it will
be stored by Anope and the same id will be passed back in the result.
+131
View File
@@ -0,0 +1,131 @@
// SPDX-License-Identifier: CC0-1.0
"use strict";
/** Implements methods for accessing an Anope JSON-RPC server. */
class AnopeRPC {
/**
* Initializes a new AnopeRPC instance with the specified RPC host.
*
* @param {string} The RPC host base URL.
*/
constructor(host) {
this.host = host;
}
/**
* Executes an arbitrary RPC query.
*
* @param {string} method The name of the method to execute.
* @param {...*} params The parameters pass to the method.
* @returns {*} The result of the RPC query.
*/
async run(method, ...params) {
const request = JSON.stringify({
"jsonrpc": "2.0",
"method": method,
"params": params,
"id": Math.random().toString(36).slice(2)
});
const response = await fetch(this.host, {
method: 'POST',
body: request
});
if (!response.ok) {
throw new Error(`HTTP returned ${response.status}`)
}
const json = await response.json();
if ("error" in json) {
throw new Error(`JSON-RPC returned ${json.error.code}: ${json.error.message}`)
}
if ("result" in json) {
return json.result;
}
return null;
}
/**
* Retrieves a list of channels.
*
* @returns {array} An array of channel names.
*/
listChannels() {
return this.run("anope.listChannels");
}
/**
* Retrieves information about the specified channel.
*
* @param {string} name The name of the channel.
* @returns {object} An object containing information about the channel.
*/
channel(name) {
return this.run("anope.channel", name);
}
/**
* Retrieves a list of services operators.
*
* @returns {array} An array of channel names.
*/
listOpers() {
return this.run("anope.listOpers");
}
/**
* Retrieves information about the specified services operator.
*
* @param {string} name The name of the services operator.
* @returns {object} An object containing information about the services operator.
*/
oper(name) {
return this.run("anope.oper", name);
}
/**
* Retrieves a list of servers.
*
* @returns {array} An array of servers names.
*/
listServers() {
return this.run("anope.listServers");
}
/**
* Retrieves information about the specified server.
*
* @param {string} name The name of the server.
* @returns {object} An object containing information about the server.
*/
server(name) {
return this.run("anope.server", name);
}
/**
* Retrieves a list of users.
*
* @returns {array} An array of channel names.
*/
listUsers() {
return this.run("anope.listUsers");
}
/**
* Retrieves information about the specified user.
*
* @param {string} nick The nick of the user.
* @returns {object} An object containing information about the user.
*/
user(nick) {
return this.run("anope.user", nick);
}
}
/*
const arpc = new AnopeRPC("http://127.0.0.1:8080/jsonrpc");
arpc.listServers().then(servers => {
console.log(servers);
}).catch (error => {
console.log(error);
});
*/
+20 -15
View File
@@ -1,23 +1,23 @@
<?php
/**
* XMLRPC Functions
* JSON-RPC functions
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*/
class AnopeXMLRPC
class AnopeRPC
{
/**
* The XMLRPC host
* The RPC host
*
* @var string
*/
private $host;
/**
* Initiate a new AnopeXMLRPC instance
* Initiate a new AnopeRPC instance
*
* @param $host
*/
@@ -27,7 +27,7 @@ class AnopeXMLRPC
}
/**
* Run an XMLRPC command. Name should be a query name and params an array of parameters, eg:
* Run an RPC command. Name should be a query name and params an array of parameters, eg:
* $this->raw("checkAuthentication", ["adam", "qwerty"]);
* If successful returns back an array of useful information.
*
@@ -40,14 +40,19 @@ class AnopeXMLRPC
*/
public function run($name, $params)
{
$xmlquery = xmlrpc_encode_request($name, $params);
$request = json_encode([
"jsonrpc" => "2.0",
"id" => uniqid(),
"method" => $name,
"params" => $params,
]);
$context = stream_context_create(["http" => [
"method" => "POST",
"header" => "Content-Type: text/xml",
"content" => $xmlquery]]);
"header" => "Content-Type: application/json",
"content" => $request]]);
$inbuf = file_get_contents($this->host, false, $context);
$response = xmlrpc_decode($inbuf);
$response = json_decode($inbuf, true);
if ($response) {
return $response;
@@ -85,8 +90,8 @@ class AnopeXMLRPC
{
$ret = $this->run("checkAuthentication", [$account, $pass]);
if ($ret && $ret["result"] == "Success") {
return $ret["account"];
if ($ret && array_key_exists("result", $ret) && array_key_exists("account", $ret["result"])) {
return $ret["result"]["account"];
}
return null;
@@ -112,7 +117,7 @@ class AnopeXMLRPC
*/
public function channel($channel)
{
return $this->run("channel", [$channel]);
return $this->run("anope.channel", [$channel]);
}
/**
@@ -138,8 +143,8 @@ class AnopeXMLRPC
*/
public function user($user)
{
return $this->run("user", [$user]);
return $this->run("anope.user", [$user]);
}
}
$anope = new AnopeXMLRPC("http://127.0.0.1:8080/xmlrpc");
$anope = new AnopeRPC("http://127.0.0.1:8080/jsonrpc");
+309
View File
@@ -0,0 +1,309 @@
# Anope `rpc_data` RPC interface
## `anope.listChannels`
Lists all channels that exist on the network.
### Parameters
*None*
### Errors
*Only standard RPC errors*
### Result
Returns an array of channel names.
#### Example
```json
["#chan1", "#chan2", "#chan3"]
```
## `anope.channel`
Retrieves information about the specified channel.
### Parameters
Index | Description
----- | -----------
0 | The name of the channel.
### Errors
Code | Description
------ | -----------
-32099 | The specified channel does not exist.
### Result
Returns a map containing information about the channel.
Key | Type | Description
--- | ---- | -----------
created | uint | The UNIX time at which the channel was originally created.
listmodes | map | List modes which are set on the channel keyed by the mode character.
modes | array[string] | Flag and parameter modes which are set on the channel.
name | string | The name of the channel.
registered | boolean | Whether the channel is registered.
topic | map or null | The channel topic or null if no topic is set.
topic.setat | uint | The time at which the topic was set.
topic.setby | string | The nick or nuh of the user who set the topic.
topic.value | string | The text of the topic.
users | array[string] | The users that are current in the channel prefixed by their status mode prefixes.
#### Example
```json
{
"created": 1740402691,
"listmodes": {
"b": ["foo!bar@baz", "account:bax"],
},
"modes": ["+knrt", "secret"],
"name": "#chan1",
"registered": true,
"topic": {
"setat": 1740404706,
"setby": "nick1",
"value": "Example channel topic"
},
"users": ["@nick1", "nick2"]
}
```
## `anope.listOpers`
Lists all services operators that exist on the network.
### Parameters
*None*
### Errors
*Only standard RPC errors*
### Result
Returns an array of services operator names.
#### Example
```json
["nick1", "nick2", "nick3"]
```
## `anope.oper`
Retrieves information about the specified services operator.
### Parameters
Index | Description
----- | -----------
0 | The name of the services operator.
### Errors
Code | Description
------ | -----------
-32099 | The specified services operator does not exist.
### Result
Returns a map containing information about the services operator.
Key | Type | Description
--- | ---- | -----------
fingerprints | array[string] or null | The client certificate fingerprints that a user must be using to log in as this services operator or null if there are no client certificate restrictions.
hosts | array[string] or null | The user@ip and user@ip masks that a user must be connecting from to log in as this services operator or null if there are no host restrictions.
name | string | The name of the services operator.
operonly | boolean | Whether a user has to be a server operator to log in as this services operator.
opertype | map | The oper type associated with the services operator opertype.
opertype.commands | array[string] | The commands that the services operator type can use.
opertype.name | string | The name of the services operator type.
opertype.privileges | array[string] | The privileges that the services operator type has.
password | boolean | Whether a user has to specify a password to log in as the services operator.
vhost | string or null | The vhost of the services operator or null if there is no vhost.
#### Example
```json
{
"fingerprints": null,
"hosts": ["*@*.example.com"],
"name": "stest",
"operonly": true,
"opertype": {
"commands": ["hostserv/*", "operserv/session"],
"name": "Helper",
"privileges": ["chanserv/no-register-limit"]
},
"password": false,
"vhost": null
}
```
## `anope.listServers`
Lists all servers that exist on the network.
### Parameters
*None*
### Errors
*Only standard RPC errors*
### Result
Returns an array of server names.
#### Example
```json
["irc1.example.com", "irc2.example.com", "services.example.com"]
```
## `anope.server`
Retrieves information about the specified server.
### Parameters
Index | Description
----- | -----------
0 | The name of the server.
### Errors
Code | Description
------ | -----------
-32099 | The specified server does not exist.
### Result
Returns a map containing information about the server.
Key | Type | Description
--- | ---- | -----------
description | string | The description of the server.
downlinks | array[string] | The servers which are behind this server
juped | boolean | Whether the server has been juped.
name | string | The name of the server.
sid | string or null | The unique immutable identifier of the server or null if the IRCd does not use SIDs.
synced | boolean | Whether the server has finished syncing.
ulined | boolean | Whether the server is U-lined.
uplink | string or null | The server in front of this server or null if it is the services server.
#### Example
```json
{
"description": "Anope IRC Services",
"downlinks": ["irc.example.com"],
"juped": false,
"name": "services.example.com",
"sid": "00B",
"synced": true,
"ulined": true,
"uplink": null
}
```
## `anope.listUsers`
Lists all users that exist on the network.
### Parameters
*None*
### Errors
*Only standard RPC errors*
### Result
Returns an array of user nicknames.
#### Example
```json
["nick1", "nick2", "nick3"]
```
## `anope.user`
Retrieves information about the specified user.
### Parameters
Index | Description
----- | -----------
0 | The nickname of the user.
### Errors
Code | Description
------ | -----------
-32099 | The specified user does not exist.
### Result
Returns a map containing information about the user.
Key | Type | Description
--- | ---- | -----------
account | map or null | The user's account or null if they are not logged in to an account.
account.display | string | The display nickname of the account.
account.opertype | string or null | The account's oper type or null if the account is not a services operator.
account.uniqueid | uint | The unique immutable identifier of the account.
address | string | The IP address the user is connecting from.
channels | array[string] | The channels that the user is in prefixed by their status mode prefixes.
chost | string or null | The cloaked hostname of the user or null if they have no cloak.
fingerprint | string or null | The fingerprint of the user's client certificate or null if they are not using one.
host | string | The real hostname of the user.
ident | string | The username (ident) of the user.
modes | array[string] | Flag and parameter modes which are set on the user.
nick | string | The nickname of the user.
nickchanged | uint | The time at which the user last changed their nickname.
real | string | The real name of the user.
server | string | The server that the user is connected to.
signon | uint | The time at which the user connected to the network.
uid | string or null | The unique immutable identifier of the user or null if the IRCd does not use UIDs.
vhost | string or null | The virtual host of the user or null if they have no vhost.
vident | string or null | The virtual ident (username) of the user or null if they have no vident.
#### Example
```json
{
"account": {
"display": "nick1",
"opertype": "Services Root",
"uniqueid": "17183514657819486040"
},
"address": "127.0.0.1",
"channels": ["@#chan1", "#chan2"],
"chost": "localhost",
"fingerprint": null,
"host": "localhost",
"id": "9TSAAAAAA",
"ident": "user1",
"modes": ["+r"],
"nick": "nick1",
"nickchanged": 1740408318,
"real": "An IRC User",
"server": "irc.example.com",
"signon": 1740408296,
"vhost": "staff.example.com",
"vident": null,
}
```
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+5 -3
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -23,7 +23,7 @@ typedef std::unordered_map<uint64_t, NickCore *> nickcoreid_map;
extern CoreExport Serialize::Checker<nickalias_map> NickAliasList;
extern CoreExport Serialize::Checker<nickcore_map> NickCoreList;
extern CoreExport nickcoreid_map NickCoreIdList;
extern CoreExport Serialize::Checker<nickcoreid_map> NickCoreIdList;
/* A registered nickname.
* It matters that Base is here before Extensible (it is inherited by Serializable)
@@ -196,6 +196,7 @@ class CoreExport IdentifyRequest
Module *owner;
Anope::string account;
Anope::string password;
Anope::string address;
std::set<Module *> holds;
bool dispatched = false;
@@ -204,7 +205,7 @@ class CoreExport IdentifyRequest
static std::set<IdentifyRequest *> Requests;
protected:
IdentifyRequest(Module *o, const Anope::string &acc, const Anope::string &pass);
IdentifyRequest(Module *o, const Anope::string &acc, const Anope::string &pass, const Anope::string &ip);
virtual ~IdentifyRequest();
public:
@@ -215,6 +216,7 @@ public:
Module *GetOwner() const { return owner; }
const Anope::string &GetAccount() const { return account; }
const Anope::string &GetPassword() const { return password; }
const Anope::string &GetAddress() const { return address; }
/* Holds this request. When a request is held it must be Released later
* for the request to complete. Multiple modules may hold a request at any time,
+1 -8
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -473,13 +473,6 @@ namespace Anope
*/
extern CoreExport bool Encrypt(const Anope::string &src, Anope::string &dest);
/** Hashes a buffer with SipHash-2-4
* @param src The start of the buffer to hash
* @param src_sz The total number of bytes in the buffer
* @param key A 16 byte key to hash the buffer with.
*/
extern CoreExport uint64_t SipHash24(const void *src, unsigned long src_sz, const char key[16]);
/** Returns a sequence of data formatted as the format argument specifies.
** After the format parameter, the function expects at least as many
** additional arguments as specified in format.
+1 -1
View File
@@ -1,7 +1,7 @@
/*
*
* (C) 2008-2011 Adam <Adam@anope.org>
* (C) 2008-2024 Anope Team <team@anope.org>
* (C) 2008-2025 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*/
+1 -1
View File
@@ -1,7 +1,7 @@
/*
*
* (C) 2008-2011 Robin Burchell <w00t@inspircd.org>
* (C) 2008-2024 Anope Team <team@anope.org>
* (C) 2008-2025 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*/
+1 -1
View File
@@ -1,6 +1,6 @@
/* Channel support
*
* (C) 2008-2024 Anope Team
* (C) 2008-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+2 -1
View File
@@ -1,6 +1,6 @@
/* Declarations for command data.
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -81,6 +81,7 @@ public:
bool IsFounder(ChannelInfo *ci);
void Reply(const char *message, ...) ATTR_FORMAT(2, 3);
void Reply(int count, const char *singular, const char *plural, ...) ATTR_FORMAT(4, 5);
void Reply(const Anope::string &message);
bool HasCommand(const Anope::string &cmd);
+2 -2
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -126,7 +126,7 @@ namespace Configuration
void LoadConf(File &file);
void Post(Conf *old);
Block *GetModule(Module *);
Block *GetModule(const Module *);
Block *GetModule(const Anope::string &name);
BotInfo *GetClient(const Anope::string &name);
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+2 -2
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -194,7 +194,7 @@ public:
void ExtensibleSerialize(const Extensible *e, const Serializable *s, Serialize::Data &data) const override
{
data.Store(this->name, true);
data.Store(this->name, this->HasExt(e));
}
void ExtensibleUnserialize(Extensible *e, Serializable *s, Serialize::Data &data) override
+1 -1
View File
@@ -1,7 +1,7 @@
/*
*
* (C) 2002-2011 InspIRCd Development Team
* (C) 2009-2024 Anope Team <team@anope.org>
* (C) 2009-2025 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*/
+37 -2
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2008-2024 Anope Team
* (C) 2008-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -55,13 +55,48 @@ namespace Language
*/
extern CoreExport const char *Translate(const NickCore *nc, const char *string);
/** Translatesa string to the given language.
/** Translates a string to the given language.
* @param lang The language to translate to
* @param string The string to translate
* @return The translated string if found, else the original string.
*/
extern CoreExport const char *Translate(const char *lang, const char *string);
/** Translates a plural string to the default language.
* @param count The number of items the string is counting.
* @param singular The string to translate if there is one of \p count
* @param plural The string to translate if there is multiple of \p count
* @return The translated string if found, else the original string.
*/
extern CoreExport const char *Translate(int count, const char *singular, const char *plural);
/** Translates a plural string to the language of the given user.
* @param u The user to translate the string for
* @param count The number of items the string is counting.
* @param singular The string to translate if there is one of \p count
* @param plural The string to translate if there is multiple of \p count
* @return The translated string if found, else the original string.
*/
extern CoreExport const char *Translate(User *u, int count, const char *singular, const char *plural);
/** Translates a plural string to the language of the given account.
* @param nc The account to translate the string for
* @param count The number of items the string is counting.
* @param singular The string to translate if there is one of \p count
* @param plural The string to translate if there is multiple of \p count
* @return The translated string if count, else the original string
*/
extern CoreExport const char *Translate(const NickCore *nc, int count, const char *singular, const char *plural);
/** Translates a plural string to the given language.
* @param lang The language to translate to
* @param count The number of items the string is counting.
* @param singular The string to translate if there is one of \p count
* @param plural The string to translate if there is multiple of \p count
* @return The translated string if found, else the original string.
*/
extern CoreExport const char *Translate(const char *lang, int count, const char *singular, const char *plural);
} // namespace Language
/* Commonly used language strings */
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,7 +1,7 @@
/* Mode support
*
* (C) 2008-2011 Adam <Adam@anope.org>
* (C) 2008-2024 Anope Team <team@anope.org>
* (C) 2008-2025 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*/
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/* Modular support
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/* BotServ core functions
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/* BotServ core functions
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/* ChanServ core functions
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/* ChanServ core functions
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2012-2024 Anope Team
* (C) 2012-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2011-2024 Anope Team
* (C) 2011-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/* NickServ core functions
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2011-2024 Anope Team
* (C) 2011-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/* OperServ ignore interface
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2011-2024 Anope Team
* (C) 2011-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2011-2024 Anope Team
* (C) 2011-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2011-2024 Anope Team
* (C) 2011-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2011-2024 Anope Team
* (C) 2011-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2011-2024 Anope Team
* (C) 2011-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2011-2024 Anope Team
* (C) 2011-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+2 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2011-2024 Anope Team
* (C) 2011-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -19,4 +19,5 @@ public:
virtual void Validate(User *u) = 0;
virtual void Collide(User *u, NickAlias *na) = 0;
virtual void Release(NickAlias *na) = 0;
virtual bool IsGuestNick(const Anope::string &nick) const = 0;
};
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+243
View File
@@ -0,0 +1,243 @@
/*
*
* (C) 2010-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*/
#pragma once
#include "httpd.h"
#include <variant>
namespace RPC
{
class Array;
class Event;
class Map;
class Request;
class ServiceInterface;
class Value;
/** Represents a list of registered events. */
using Events = Anope::map<Event *>;
/** Represents possible types of RPC value. */
using ValueUnion = std::variant<Array, Map, Anope::string, std::nullptr_t, bool, double, int64_t, uint64_t>;
/** Represents standard RPC errors from the JSON-RPC and XML-RPC specifications. */
enum Error
: int64_t
{
ERR_CUSTOM_END = -32000,
ERR_CUSTOM_START = -32099,
ERR_PARSE_ERROR = -32700,
ERR_INVALID_REQUEST = -32600,
ERR_METHOD_NOT_FOUND = -32601,
ERR_INVALID_PARAMS = -32602,
};
}
class RPC::Array final
{
private:
std::vector<Value> replies;
public:
/** Retrieves the list of RPC replies. */
inline const auto &GetReplies() const { return this->replies; }
template <typename T>
inline Array &Reply(const T &t)
{
this->replies.emplace_back(RPC::Value(t));
return *this;
}
inline Array &ReplyArray();
inline Map &ReplyMap();
};
class RPC::Map final
{
private:
Anope::map<Value> replies;
public:
/** Retrieves the list of RPC replies. */
inline const auto &GetReplies() const { return this->replies; }
template <typename T>
inline Map &Reply(const Anope::string &key, const T &t)
{
this->replies.emplace(key, RPC::Value(t));
return *this;
}
inline Array &ReplyArray(const Anope::string &key);
inline Map &ReplyMap(const Anope::string &key);
};
class RPC::Value final
{
private:
RPC::ValueUnion value;
public:
explicit Value(const ValueUnion &v)
: value(v)
{
}
explicit Value(const Array &a)
: value(a)
{
}
explicit Value(const Map &m)
: value(m)
{
}
explicit Value(std::nullptr_t)
: value(nullptr)
{
}
explicit Value(bool b)
: value(b)
{
}
Value(double d)
: value(d)
{
}
Value(int64_t i)
: value(i)
{
}
Value(uint64_t u)
: value(u)
{
}
template <typename T>
Value(const T &t)
: value(Anope::ToString(t))
{
}
inline auto &Get() { return this->value; }
inline const auto &Get() const { return this->value; }
};
class RPC::Request final
{
private:
std::optional<std::pair<int64_t, Anope::string>> error;
std::optional<Value> root;
public:
Anope::string name;
Anope::string id;
std::deque<Anope::string> data;
HTTPReply &reply;
Request(HTTPReply &r)
: reply(r)
{
}
inline void Error(uint64_t errcode, const Anope::string &errstr)
{
this->error.emplace(errcode, errstr);
}
template<typename T = Map>
inline T &Root();
inline const auto &GetError() const { return this->error; }
inline const auto &GetRoot() const { return this->root; }
};
class RPC::Event
{
private:
Anope::string event;
size_t minparams;
protected:
Event(const Anope::string& e, size_t mp = 0)
: event(e)
, minparams(mp)
{
}
public:
virtual ~Event() = default;
const auto &GetEvent() const { return event; }
const auto &GetMinParams() const { return minparams; }
virtual bool Run(ServiceInterface *iface, HTTPClient *client, Request &request) = 0;
};
class RPC::ServiceInterface
: public Service
{
public:
ServiceInterface(Module *creator, const Anope::string &sname)
: Service(creator, "RPCServiceInterface", sname)
{
}
virtual const Events &GetEvents() = 0;
virtual bool Register(Event *event) = 0;
virtual bool Unregister(Event *event) = 0;
virtual void Reply(Request &request) = 0;
};
inline RPC::Array &RPC::Array::ReplyArray()
{
auto &reply = this->replies.emplace_back(RPC::Array());
return std::get<RPC::Array>(reply.Get());
}
inline RPC::Map &RPC::Array::ReplyMap()
{
auto &reply = this->replies.emplace_back(RPC::Map());
return std::get<RPC::Map>(reply.Get());
}
inline RPC::Array &RPC::Map::ReplyArray(const Anope::string &key)
{
auto it = this->replies.emplace(key, RPC::Array());
return std::get<RPC::Array>(it.first->second.Get());
}
inline RPC::Map &RPC::Map::ReplyMap(const Anope::string &key)
{
auto it = this->replies.emplace(key, RPC::Map());
return std::get<RPC::Map>(it.first->second.Get());
}
template<typename T>
inline T &RPC::Request::Root()
{
if (!this->root.has_value())
this->root = RPC::Value(T());
return std::get<T>(this->root.value().Get());
}
+33 -16
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2014-2024 Anope Team
* (C) 2014-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -15,8 +15,7 @@ namespace SASL
Anope::string source;
Anope::string target;
Anope::string type;
Anope::string data;
Anope::string ext;
std::vector<Anope::string> data;
};
class Mechanism;
@@ -53,6 +52,17 @@ namespace SASL
Reference<Mechanism> mech;
Session(Mechanism *m, const Anope::string &u) : created(Anope::CurTime), uid(u), mech(m) { }
inline Anope::string GetUserInfo()
{
auto *u = User::Find(uid);
if (u)
return u->GetMask();
if (!hostname.empty() && !ip.empty())
return Anope::printf("%s (%s)", hostname.c_str(), ip.c_str());
return "A user";
};
virtual ~Session()
{
if (sasl)
@@ -69,7 +79,7 @@ namespace SASL
virtual Session *CreateSession(const Anope::string &uid) { return new Session(this, uid); }
virtual void ProcessMessage(Session *session, const Message &) = 0;
virtual bool ProcessMessage(Session *session, const Message &) = 0;
virtual ~Mechanism()
{
@@ -82,10 +92,25 @@ namespace SASL
: public ::IdentifyRequest
{
Anope::string uid;
Anope::string hostname, ip;
Anope::string hostname;
inline Anope::string GetUserInfo()
{
auto *u = User::Find(uid);
if (u)
return u->GetMask();
if (!hostname.empty() && !GetAddress().empty())
return Anope::printf("%s (%s)", hostname.c_str(), GetAddress().c_str());
return "A user";
};
public:
IdentifyRequest(Module *m, const Anope::string &id, const Anope::string &acc, const Anope::string &pass, const Anope::string &h, const Anope::string &i) : ::IdentifyRequest(m, acc, pass), uid(id), hostname(h), ip(i) { }
IdentifyRequest(Module *m, const Anope::string &id, const Anope::string &acc, const Anope::string &pass, const Anope::string &h, const Anope::string &i)
: ::IdentifyRequest(m, acc, pass, i)
, uid(id)
, hostname(h)
{
}
void OnSuccess() override
{
@@ -103,11 +128,7 @@ namespace SASL
Session *s = sasl->GetSession(uid);
if (s)
{
Anope::string user = "A user";
if (!hostname.empty() && !ip.empty())
user = hostname + " (" + ip + ")";
Log(this->GetOwner(), "sasl", Config->GetClient("NickServ")) << user << " identified to account " << this->GetAccount() << " using SASL";
Log(this->GetOwner(), "sasl", Config->GetClient("NickServ")) << GetUserInfo() << " identified to account " << this->GetAccount() << " using SASL";
sasl->Succeed(s, na->nc);
delete s;
}
@@ -134,11 +155,7 @@ namespace SASL
else if (na->nc->HasExt("UNCONFIRMED"))
accountstatus = "unconfirmed ";
Anope::string user = "A user";
if (!hostname.empty() && !ip.empty())
user = hostname + " (" + ip + ")";
Log(this->GetOwner(), "sasl", Config->GetClient("NickServ")) << user << " failed to identify for " << accountstatus << "account " << this->GetAccount() << " using SASL";
Log(this->GetOwner(), "sasl", Config->GetClient("NickServ")) << GetUserInfo() << " failed to identify for " << accountstatus << "account " << this->GetAccount() << " using SASL";
}
};
}
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2010-2024 Anope Team
* (C) 2010-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
-50
View File
@@ -1,50 +0,0 @@
/*
*
* (C) 2010-2024 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*/
#pragma once
#include "httpd.h"
class XMLRPCRequest final
{
std::map<Anope::string, Anope::string> replies;
public:
Anope::string name;
Anope::string id;
std::deque<Anope::string> data;
HTTPReply &r;
XMLRPCRequest(HTTPReply &_r) : r(_r) { }
inline void reply(const Anope::string &dname, const Anope::string &ddata) { this->replies.emplace(dname, ddata); }
inline const std::map<Anope::string, Anope::string> &get_replies() { return this->replies; }
};
class XMLRPCServiceInterface;
class XMLRPCEvent
{
public:
virtual ~XMLRPCEvent() = default;
virtual bool Run(XMLRPCServiceInterface *iface, HTTPClient *client, XMLRPCRequest &request) = 0;
};
class XMLRPCServiceInterface
: public Service
{
public:
XMLRPCServiceInterface(Module *creator, const Anope::string &sname) : Service(creator, "XMLRPCServiceInterface", sname) { }
virtual void Register(XMLRPCEvent *event) = 0;
virtual void Unregister(XMLRPCEvent *event) = 0;
virtual Anope::string Sanitize(const Anope::string &string) = 0;
virtual void Reply(XMLRPCRequest &request) = 0;
};
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,7 +1,7 @@
/*
*
* (C) 2008-2011 Robin Burchell <w00t@inspircd.org>
* (C) 2008-2024 Anope Team <team@anope.org>
* (C) 2008-2025 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*/
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2008-2024 Anope Team
* (C) 2008-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+19 -7
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -59,13 +59,27 @@ public:
static std::vector<Anope::string> GetServiceKeys(const Anope::string &t)
{
std::vector<Anope::string> keys;
std::map<Anope::string, std::map<Anope::string, Service *> >::iterator it = Services.find(t);
const auto it = Services.find(t);
if (it != Services.end())
for (std::map<Anope::string, Service *>::iterator it2 = it->second.begin(); it2 != it->second.end(); ++it2)
keys.push_back(it2->first);
{
for (const auto &[key, _] : it->second)
keys.push_back(key);
}
return keys;
}
static std::vector<Service *> GetServices(const Anope::string &t)
{
std::vector<Service *> values;
const auto it = Services.find(t);
if (it != Services.end())
{
for (const auto &[_, value] : it->second)
values.push_back(value);
}
return values;
}
static void AddAlias(const Anope::string &t, const Anope::string &n, const Anope::string &v)
{
std::map<Anope::string, Anope::string> &smap = Aliases[t];
@@ -98,10 +112,8 @@ public:
void Register()
{
std::map<Anope::string, Service *> &smap = Services[this->type];
if (smap.find(this->name) != smap.end())
if (!Services[this->type].emplace(this->name, this).second)
throw ModuleException("Service " + this->type + " with name " + this->name + " already exists");
smap[this->name] = this;
}
void Unregister()
+2 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -40,6 +40,7 @@
#define BUFSIZE 1024
#define _(x) x
#define N_(x, y) x, y
#ifndef _WIN32
# define DllExport __attribute__ ((visibility ("default")))
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+5 -5
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -164,15 +164,15 @@ public:
* @param sz How much to read
* @return Number of bytes received
*/
virtual int Recv(Socket *s, char *buf, size_t sz);
virtual ssize_t Recv(Socket *s, char *buf, size_t sz);
/** Write something to the socket
* @param s The socket
* @param buf The data to write
* @param size The length of the data
*/
virtual int Send(Socket *s, const char *buf, size_t sz);
int Send(Socket *s, const Anope::string &buf);
virtual ssize_t Send(Socket *s, const char *buf, size_t sz);
ssize_t Send(Socket *s, const Anope::string &buf);
/** Accept a connection from a socket
* @param s The socket
@@ -503,7 +503,7 @@ public:
* @param sz The size of the buffer
* @return The amount of data read
*/
int Read(char *data, size_t sz);
ssize_t Read(char *data, size_t sz);
/** Mark the write end of this pipe (non)blocking
* @param state true to enable blocking, false to disable blocking
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/* Timer include stuff.
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+2 -1
View File
@@ -1,7 +1,7 @@
/*
*
* (C) 2008-2011 Robin Burchell <w00t@inspircd.org>
* (C) 2003-2024 Anope Team <team@anope.org>
* (C) 2003-2025 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*
@@ -190,6 +190,7 @@ public:
* @param ... any number of parameters
*/
void SendMessage(BotInfo *source, const char *fmt, ...) ATTR_FORMAT(3, 4);
void SendMessage(BotInfo *source, int count, const char *singular, const char *plural, ...) ATTR_FORMAT(5, 6);
void SendMessage(BotInfo *source, const Anope::string &msg) override;
void SendMessage(CommandSource &source, const Anope::string &msg) override;
+1 -1
View File
@@ -1,6 +1,6 @@
/* Build bumper
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2008-2024 Anope Team
* (C) 2008-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1541 -3039
View File
File diff suppressed because it is too large Load Diff
+486 -601
View File
File diff suppressed because it is too large Load Diff
+506 -598
View File
File diff suppressed because it is too large Load Diff
+534 -273
View File
File diff suppressed because it is too large Load Diff
+97 -86
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Anope\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-06-23 18:32+0100\n"
"PO-Revision-Date: 2024-06-23 16:07+0300\n"
"POT-Creation-Date: 2024-11-11 21:27+0000\n"
"PO-Revision-Date: 2024-11-11 22:30+0300\n"
"Last-Translator: CaPaCuL <capacul@gmail.com>\n"
"Language-Team: Turkish\n"
"Language: tr_TR\n"
@@ -16,7 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.4.4\n"
"X-Generator: Poedit 3.5\n"
#, c-format
msgid "%d channel(s) cleared, and %d channel(s) dropped."
@@ -81,47 +81,47 @@ msgid ""
"It has been created for users that can't host or\n"
"configure a bot, or for use on networks that don't\n"
"allow user bots. Available commands are listed\n"
"below; to use them, type %s%s command. For\n"
"below; to use them, type %s command. For\n"
"more information on a specific command, type\n"
"%s%s %s command.\n"
"%s %s command.\n"
msgstr ""
"%s kendi kanalınızda bir bot bulundurmanıza olanak tanır.\n"
"Bir botu barındıramayan veya yapılandıramayan kullanıcılar için ya da\n"
"kullanıcı botlarına izin vermeyen ağlarda kullanılmak üzere\n"
"oluşturulmuştur. Mevcut komutlar aşağıdaki listelendi;\n"
"bunları kullanmak için %s%s komut yazın.\n"
"Belirli bir komut hakkında daha fazla bilgi için şunu yazın:\n"
"%s%s %s komut.\n"
"bunları kullanmak için %s komut yazın.\n"
"Belirli bir komut hakkında daha fazla bilgi için,\n"
"%s %s komut yazın.\n"
#, c-format
msgid ""
"%s allows you to register a nickname and\n"
"prevent others from using it. The following\n"
"commands allow for registration and maintenance of\n"
"nicknames; to use them, type %s%s command.\n"
"nicknames; to use them, type %s command.\n"
"For more information on a specific command, type\n"
"%s%s %s command.\n"
"%s %s command.\n"
msgstr ""
"%s bir rumuz kaydetmenizi ve başkalarının\n"
"bunu kullanmasının engellenmesini sağlar. Aşağıdaki\n"
"komutlar rumuz kaydı ve düzenlemesşne izin verir;\n"
"bunları kullanmak için %s%s komut yazın.\n"
"bunları kullanmak için %s komut yazın.\n"
"Belirli bir komut hakkında daha fazla bilgi için şunu yazın:\n"
"%s%s %s komut.\n"
"%s %s komut.\n"
#, c-format
msgid ""
"%s allows you to register an account.\n"
"The following commands allow for registration and maintenance of\n"
"accounts; to use them, type %s%s command.\n"
"accounts; to use them, type %s command.\n"
"For more information on a specific command, type\n"
"%s%s %s command.\n"
"%s %s command.\n"
msgstr ""
"%s bir hesap kaydetmenizi sağlar. Aşağıdaki komutlar\n"
"hesap kaydı ve düzenlenmesine yapılmasına izin verir; bunları\n"
"kullanmak için %s%s komut yazın. Belirli bir\n"
"kullanmak için %s komut yazın. Belirli bir\n"
"komut hakkında daha fazla bilgi için şunu yazın:\n"
"%s%s %s komut.\n"
"%s %s komut.\n"
#, c-format
msgid ""
@@ -130,16 +130,16 @@ msgid ""
"malicious users from \"taking over\" channels by limiting\n"
"who is allowed channel operator privileges. Available\n"
"commands are listed below; to use them, type\n"
"%s%s command. For more information on a\n"
"specific command, type %s%s HELP command.\n"
"%s command. For more information on a\n"
"specific command, type %s HELP command.\n"
msgstr ""
"%s kanalların çeşitli yönlerini kaydetmenize ve kontrol\n"
"etmenize olanak tanır. %s, kanal operatörü ayrıcalıklarına izin verilen\n"
"kişileri sınırlayarak, genellikle kötü niyetli kullanıcıların kanalları\n"
"\"ele geçirmesini\" engelleyebilir. Mevcut komutlar aşağıda listelenmiştir;\n"
"bunları kullanmak için %s%s komut yazın.\n"
"bunları kullanmak için %s komut yazın.\n"
"Belirli bir komut hakkında daha fazla bilgi için\n"
"%s%s HELP komut yazın.\n"
"%s HELP komut yazın.\n"
#, c-format
msgid "%s already exists in %s bad words list."
@@ -386,8 +386,8 @@ msgid "%s will now permanently be ignored."
msgstr "%s artık kalıcı olarak yok sayılacak."
#, c-format
msgid "%s%s HELP %s for more information."
msgstr "Daha fazla bilgi için %s%s HELP %s."
msgid "%s HELP %s for more information."
msgstr "Daha fazla bilgi için %s HELP %s."
msgid "ADD nick user host real"
msgstr "ADD rumuz kullanıcı host gerçek_ad"
@@ -457,11 +457,11 @@ msgstr ""
#, c-format
msgid ""
"User access levels can be seen by using the\n"
"%s command; type %s%s HELP LEVELS for\n"
"%s command; type %s HELP LEVELS for\n"
"information."
msgstr ""
"Kullanıcı erişim düzeyleri %s komutu\n"
"kullanılarak görülebilir; bilgi için %s%s HELP LEVELS\n"
"kullanılarak görülebilir; bilgi için %s HELP LEVELS\n"
"yazın."
#, c-format
@@ -865,9 +865,9 @@ msgid ""
"fantasy commands on a channel when prefixed\n"
"with one of the following fantasy characters: %s\n"
" \n"
"Note that users wanting to use fantaisist\n"
"commands MUST have enough access for both\n"
"the FANTASIA and the command they are executing."
"Note that users wanting to use fantasy commands\n"
"MUST have enough access for both the FANTASY\n"
"privilege and the command they are executing."
msgstr ""
" \n"
"Bir kanalda fantezi modunu etkinleştirir veya devre dışı bırakır.\n"
@@ -946,14 +946,14 @@ msgstr ""
#, c-format
msgid ""
" \n"
"See the %s command (%s%s HELP ACCESS) for\n"
"See the %s command (%s HELP ACCESS) for\n"
"information on giving a subset of these privileges to\n"
"other channel users.\n"
msgstr ""
" \n"
"Bu ayrıcalıkların bir alt kümesini diğer kanal kullanıcılarına verme\n"
"hakkında bilgi için %s komutuna\n"
"(%s%s HELP ACCESS) bakın.\n"
"(%s HELP ACCESS) bakın.\n"
msgid ""
" \n"
@@ -1218,12 +1218,12 @@ msgstr ""
#, c-format
msgid ""
" \n"
"Type %s%s HELP command for help on any of the\n"
"Type %s HELP command for help on any of the\n"
"above commands."
msgstr ""
" \n"
"Yukarıdaki komutlardan herhangi biri hakkında yardım almak için\n"
"%s%s HELP komut yazın."
"%s HELP komut yazın."
#, c-format
msgid " %s is online using this oper block."
@@ -1248,10 +1248,6 @@ msgstr " Yüklenme zamanı: %p"
msgid " but %s mysteriously dematerialized."
msgstr " ama nedendir bilinmez %s artık yok."
#, c-format
msgid "\"/msg %s\" is no longer supported. Use \"/msg %s@%s\" or \"/%s\" instead."
msgstr "\"/msg %s\" artık desteklenmiyor. Bunun yerine \"/msg %s@%s\" ve ya \"/%s\" kullanın."
msgid "\"Jupiter\" a server"
msgstr "Bir sunucuyu \"Jupiter\" yapın"
@@ -1811,6 +1807,9 @@ msgstr "Hesap"
msgid "Account %s has already reached the maximum number of simultaneous logins (%u)."
msgstr "%s hesabı zaten maksimum eşzamanlı oturum açma sayısına (%u) ulaştı."
msgid "Account id"
msgstr "Hesap ID"
msgid "Account registered"
msgstr "Hesap kaydedildi"
@@ -2015,15 +2014,15 @@ msgstr "Kanal kurucularıyla sınırlı komutlar verme izni var"
msgid "Allowed to modify channel badwords list"
msgstr "Kanalın küfür listesini değiştirme izni var"
msgid "Allowed to modify channel settings"
msgstr "Kanal ayarlarını yapma izni var"
msgid "Allowed to modify the access list"
msgstr "Erişim listesini değiştirme izni var"
msgid "Allowed to read channel memos"
msgstr "Kanal memolarını okuma izni var"
msgid "Allowed to set channel settings"
msgstr "Kanal ayarlarını yapma izni var"
msgid "Allowed to unban themself"
msgstr "Kendisini unban yapma izni var"
@@ -2953,6 +2952,14 @@ msgstr ""
"erişim listesi boşsa\n"
"kanal düşürülür."
#, c-format
msgid "Changing your usermodes to %s"
msgstr "Kullanıcı modlarınız %s olarak değiştiriliyor"
#, c-format
msgid "Changing your vhost to %s"
msgstr "Vhostunuz %s olarak değiştiriliyor"
msgid "Channel"
msgstr "Kanal"
@@ -3668,7 +3675,7 @@ msgstr "%s için e-posta geçersiz."
msgid "Email matched: %s (%s) to %s."
msgstr "E-posta eşleşti: %s (%s) - %s."
msgid "Enable fantaisist commands"
msgid "Enable fantasy commands"
msgstr "Fantezi komutlarını etkinleştir"
msgid "Enable greet messages"
@@ -3922,7 +3929,7 @@ msgstr ""
"kullanıcıları atacaktır."
msgid "English"
msgstr "İngilizce"
msgstr "Türkçe"
#, c-format
msgid "Entry message %i for %s deleted."
@@ -4193,11 +4200,11 @@ msgid "Info about a loaded module"
msgstr "Yüklü bir modül hakkında bilgi"
#, c-format
msgid "Information for bot %s:"
msgid "Information about bot %s:"
msgstr "%s botu ile ilgili bilgiler:"
#, c-format
msgid "Information for channel %s:"
msgid "Information about channel %s:"
msgstr "%s kanalı ile ilgili bilgiler:"
#, c-format
@@ -4304,7 +4311,7 @@ msgid "LOGONNEWS {ADD|DEL|LIST} [text|num]"
msgstr "LOGONNEWS {ADD|DEL|LIST} [metin|nu.]"
msgid "Language changed to English."
msgstr "Dil İngilizce olarak değiştirildi."
msgstr "Dil Türkçe olarak değiştirildi."
#, c-format
msgid "Language for %s changed to %s."
@@ -4778,7 +4785,7 @@ msgid ""
"Maintains the bad words list for a channel. The bad\n"
"words list determines which words are to be kicked\n"
"when the bad words kicker is enabled. For more information,\n"
"type %s%s HELP KICK %s.\n"
"type %s HELP KICK %s.\n"
" \n"
"The ADD command adds the given word to the\n"
"bad words list. If SINGLE is specified, a kick will be\n"
@@ -4793,7 +4800,7 @@ msgstr ""
"Bir kanal için küfür listesini düzenler.\n"
"küfür listesi, küfürlü konuşanları atma etkinleştirildiğinde\n"
"hangi kelimelerin atılacağını belirler. Daha fazla bilgi\n"
"için %s%s HELP KICK %s yazın.\n"
"için %s HELP KICK %s yazın.\n"
" \n"
"ADD komutu belirtilen kelimeyi küfür\n"
"listesine ekler. SINGLE belirtilirse, yalnızca kullanıcı\n"
@@ -5402,8 +5409,8 @@ msgid "Persistent"
msgstr "Kalıcı"
#, c-format
msgid "Please confirm that you want to drop %s with %s%s DROP %s %s"
msgstr "Lütfen %s rumuzunu droplamak isteğinizi %s%s DROP %s %s ile onaylayın"
msgid "Please confirm that you want to drop %s with %s DROP %s %s"
msgstr "Lütfen %s rumuzunu droplamak isteğinizi %s DROP %s %s ile onaylayın"
msgid "Please contact an Operator to get a vhost assigned to this nick."
msgstr "Bu rumuza atanan bir vHost almak için lütfen bir operle iletişime geçin."
@@ -5899,18 +5906,18 @@ msgstr "OPları koruma %s'de uygulandı."
#, c-format
msgid ""
"See %s%s HELP %s for more information\n"
"See %s HELP %s for more information\n"
"about the access list."
msgstr ""
"Erişim listesi hakkında detaylı bilgi için %s%s HELP %s\n"
"Erişim listesi hakkında detaylı bilgi için %s HELP %s\n"
"komut çıktısına bakın."
#, c-format
msgid ""
"See %s%s HELP %s for more information\n"
"See %s HELP %s for more information\n"
"about the flags system."
msgstr ""
"Bayrak sistemi hakkında detaylı bilgi için %s%s HELP %s\n"
"Bayrak sistemi hakkında detaylı bilgi için %s HELP %s\n"
"komut çıktısına bakın."
msgid "Send a memo to a nick or channel"
@@ -6224,7 +6231,7 @@ msgid ""
"option tells the bot to kick users who say certain words\n"
"on the channels.\n"
"You can define bad words for your channel using the\n"
"BADWORDS command. Type %s%s HELP BADWORDS for\n"
"BADWORDS command. Type %s HELP BADWORDS for\n"
"more information.\n"
" \n"
"ttb is the number of times a user can be kicked\n"
@@ -6236,7 +6243,7 @@ msgstr ""
"söyleyen kullanıcıları atmasını söyler.\n"
"BADWORDS komutunu kullanarak kanalınıza küfür\n"
"tanımlayabilirsiniz. Daha fazla bilgi için\n"
"%s%s HELP BADWORDS yazın.\n"
"%s HELP BADWORDS yazın.\n"
" \n"
"ttb, bir kullanıcının banlanmadan önce atılabileceği\n"
"sayıdır. Ban sistemini aktif hale getirdikten sonra devre dışı\n"
@@ -6461,7 +6468,7 @@ msgid ""
" LIMIT Sets the maximum number of memos you can\n"
" receive\n"
" \n"
"Type %s%s HELP %s option for more information\n"
"Type %s HELP %s option for more information\n"
"on a specific option."
msgstr ""
"Çeşitli memo seçeneklerini ayarlar. seçenek şunlardan biri olabilir:\n"
@@ -6472,7 +6479,7 @@ msgstr ""
" ayarlar\n"
" \n"
"Belirli bir seçenek hakkında daha fazla bilgi için\n"
"%s%s HELP %s seçenek yazın."
"%s HELP %s seçenek yazın."
msgid "Sets various nickname options. option can be one of:"
msgstr "Çeşitli rumuz seçeneklerini ayarlar. seçenek şunlardan biri olabilir:"
@@ -6527,8 +6534,8 @@ msgstr ""
"modların otomatik olarak ayarlanamayacağını unutmayın."
#, c-format
msgid "Setting %s not known. Type %s%s HELP LEVELS for a list of valid settings."
msgstr "%s ayarı bilinmiyor. Geçerli ayarların listesi için %s%s HELP LEVELS yazın."
msgid "Setting %s not known. Type %s HELP LEVELS for a list of valid settings."
msgstr "%s ayarı bilinmiyor. Geçerli ayarların listesi için %s HELP LEVELS yazın."
msgid "Setting for DEBUG must be ON, OFF, or a positive number."
msgstr "DEBUG ayarı ON, OFF veya pozitif bir sayı olmalıdır."
@@ -7438,10 +7445,10 @@ msgstr "%zu memo (%s kanalında) var."
#, c-format
msgid ""
"There is a new memo on channel %s.\n"
"Type %s%s READ %s %zu to read it."
"Type %s READ %s %zu to read it."
msgstr ""
"%s kanalında yeni bir memo var. Okumak için\n"
"%s%s READ %s %zu yazın."
"%s READ %s %zu yazın."
#, c-format
msgid "There is no bot assigned to %s anymore."
@@ -7738,20 +7745,20 @@ msgstr "Bu rumuz askıya alındı."
#, c-format
msgid ""
"This nickname is registered and protected. If it is your\n"
"nick, type %s%s IDENTIFY password. Otherwise,\n"
"nick, type %s IDENTIFY password. Otherwise,\n"
"please choose a different nick."
msgstr ""
"Bu rumuz kayıtlı ve korumalıdır. Eğer sizin\n"
"rumuzunuzsa, %s%s IDENTIFY şifreniz yazın. Aksi halde,\n"
"rumuzunuzsa, %s IDENTIFY şifreniz yazın. Aksi halde,\n"
"kendinize başka bir rumuz seçin."
#, c-format
msgid "To delete, type: %s%s %s %d"
msgstr "Silmek için şunu yazın: %s%s %s %d"
msgid "To delete, type: %s %s %d"
msgstr "Silmek için şunu yazın: %s %s %d"
#, c-format
msgid "To delete, type: %s%s %s %s %d"
msgstr "Silmek için şunu yazın: %s%s %s %s %d"
msgid "To delete, type: %s %s %s %d"
msgstr "Silmek için şunu yazın: %s%s %s %d"
msgid "To protect ops against bot kicks"
msgstr "Opları bot atmalarına karşı korumak için"
@@ -7906,46 +7913,46 @@ msgstr "Türü"
#, c-format
msgid ""
"Type %s%s HELP %s option for more information\n"
"Type %s HELP %s option for more information\n"
"on a specific option."
msgstr ""
"Belirli bir seçenek hakkında daha fazla bilgi için\n"
"%s%s HELP %s seçenek yazın."
"%s HELP %s seçenek yazın."
#, c-format
msgid ""
"Type %s%s HELP %s option for more information\n"
"Type %s HELP %s option for more information\n"
"on a specific option.\n"
" \n"
"Note: access to this command is controlled by the\n"
"level SET."
msgstr ""
"Belirli bir seçenek hakkında daha fazla bilgi için\n"
"%s%s HELP %s seçenek yazın. \n"
"%s HELP %s seçenek yazın. \n"
"Not: Bu komuta erişim SET seviyesi tarafından\n"
"kontrol edilir."
#, c-format
msgid ""
"Type %s%s HELP %s option for more information\n"
"Type %s HELP %s option for more information\n"
"on a specific option. The options will be set on the given\n"
"nickname."
msgstr ""
"Belirli bir seçenek hakkında daha fazla bilgi için\n"
"%s%s HELP %s seçenek yazın. Seçenekler belirtilen\n"
"%s HELP %s seçenek yazın. Seçenekler belirtilen\n"
"rumuz'a göre ayarlanacaktır."
#, c-format
msgid ""
"Type %s%s HELP %s option for more information on a\n"
"Type %s HELP %s option for more information on a\n"
"particular option."
msgstr ""
"Belirli bir seçenek hakkında daha fazla bilgi için\n"
"%s%s HELP %s seçenek yazın."
"Özel bir seçenek hakkında daha fazla bilgi için\n"
"%s HELP %s seçenek yazın."
#, c-format
msgid "Type %s%s SET EMAIL email in order to set your email."
msgstr "E-Postanızı ayarlamak için %s%s SET EMAIL e-posta yazın."
msgid "Type %s SET EMAIL email in order to set your email."
msgstr "E-Postanızı ayarlamak için %s SET EMAIL e-posta yazın."
msgid "Un-Load a module"
msgstr "Bir modülün yüklemesini kaldır"
@@ -7993,16 +8000,16 @@ msgid "Unknown command %s."
msgstr "Bilinmeyen komut %s."
#, c-format
msgid "Unknown command %s. \"%s%s HELP\" for help."
msgstr "Bilinmeyen komut %s. Yardım için: \"%s%s HELP\"."
msgid "Unknown command %s. \"%s HELP\" for help."
msgstr "Bilinmeyen komut %s. Yardım için: \"%s HELP\"."
#, c-format
msgid "Unknown command %s. Did you mean %s?"
msgstr "Bilinmeyen komut %s. %s mi demek istediniz?"
#, c-format
msgid "Unknown command %s. Did you mean %s? \"%s%s HELP\" for help."
msgstr "Bilinmeyen komut %s. %s mi demek istediniz? Yardım için: \"%s%s HELP\"."
msgid "Unknown command %s. Did you mean %s? \"%s HELP\" for help."
msgstr "Bilinmeyen komut %s. %s mi demek istediniz? Yardım için: \"%s HELP\"."
#, c-format
msgid "Unknown mode character %c ignored."
@@ -8347,10 +8354,6 @@ msgstr "Bir kanalı, onun kendi erişim listesine ekleyemezsiniz."
msgid "You can't logout %s, they are a Services Operator."
msgstr "%s oturumunu kapatamazsınız, o bir Servis Operatörü."
#, c-format
msgid "You cannot %s on this network."
msgstr "Bu ağda %s yapamazsınız."
#, c-format
msgid "You cannot set the %c flag."
msgstr "%c bayrağını ayarlayamazsınız."
@@ -8425,10 +8428,10 @@ msgstr "1 yeni memonuz var."
#, c-format
msgid ""
"You have a new memo from %s.\n"
"Type %s%s READ %zu to read it."
"Type %s READ %zu to read it."
msgstr ""
"%s size yeni bir memo gönderdi.\n"
"okumak için %s%s READ %zu yazın."
"okumak için %s READ %zu yazın."
#, c-format
msgid "You have been invited to %s by %s."
@@ -8489,6 +8492,10 @@ msgstr "Diğer Servis Operatörlerinin e-postasını değiştiremezsiniz."
msgid "You may not change the password of other Services Operators."
msgstr "Diğer Servis Operatörlerinin şifresini değiştiremezsiniz."
#, c-format
msgid "You may not drop %s as it is the display nick for the account."
msgstr "Hesabın görüntülenen rumuzu olduğu için %s rumuzunu droplayamazsınız."
msgid "You may not drop other Services Operators' nicknames."
msgstr "Diğer Servis Operatörlerinin rumuzlarını düşüremezsiniz."
@@ -8586,6 +8593,10 @@ msgstr "IRCd'niz SVSPART'ı desteklemiyor."
msgid "Your IRCd does not support vidents. If this is incorrect please report this as a possible bug."
msgstr "IRCd'niz vIdent'i desteklemiyor, eğer bu yanlışsa lütfen bunu olası bir hata olarak bildirin."
#, c-format
msgid "Your SSL certificate fingerprint %s has been automatically added to your certificate list."
msgstr "SSL sertifika parmak iziniz %s otomatik olarak sertifika listenize eklendi."
#, c-format
msgid "Your account %s has been successfully created."
msgstr "Hesabınız %s başarıyla oluşturuldu."
+1 -1
View File
@@ -21,7 +21,6 @@ find ../ \
\) \
-exec \
xgettext \
--escape \
--language=C++ \
--sort-output \
--default-domain=Anope \
@@ -30,6 +29,7 @@ find ../ \
--from-code=utf-8 \
--keyword \
--keyword=_ \
--keyword=N_:1,2 \
{} +
for f in *.po
+1 -1
View File
@@ -1,6 +1,6 @@
/* BotServ core functions
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/* BotServ core functions
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/* BotServ core functions
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+1 -1
View File
@@ -1,6 +1,6 @@
/* BotServ core functions
*
* (C) 2003-2024 Anope Team
* (C) 2003-2025 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.

Some files were not shown because too many files have changed in this diff Show More