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

Compare commits

..

329 Commits

Author SHA1 Message Date
Adam- 883d22d4da Bump for 1.9.2 Release
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@3007 5417fbe8-f217-4b02-8779-1006273d7864
2010-06-18 07:40:17 +00:00
cyberbotx b766b3a597 Minor edits to fix compile errors/warnings with clang and a small compile warning under Windows (gotta work on the other 450+ Windows warnings sometime).
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@3006 5417fbe8-f217-4b02-8779-1006273d7864
2010-06-16 23:50:33 +00:00
Adam- 834f4d1bf0 Cleaned up some of the cloaked host tracking on Unreal
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@3004 5417fbe8-f217-4b02-8779-1006273d7864
2010-06-15 17:04:27 +00:00
Adam- ab4533e58a Made db-convert change old disabled levels to newer ACCESS_QOP, keeps people from being locked out of controlling their own XOP channels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@3002 5417fbe8-f217-4b02-8779-1006273d7864
2010-06-12 22:28:56 +00:00
Adam- 4ba8c2ba74 Tell users to identify when they connect on InspIRCd
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@3001 5417fbe8-f217-4b02-8779-1006273d7864
2010-06-12 22:28:52 +00:00
Adam- 2cc4cd0165 Only enable vhosts automatically if the user doesn't already have the vhost set
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2998 5417fbe8-f217-4b02-8779-1006273d7864
2010-06-04 02:17:58 +00:00
Adam- 9abdb4e2e9 Added inspircd2.0 protocol module, moved usermode +r unsetting on nick change to the protocol modules to fix inspircd1.2s weird usermode +r behavior
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2997 5417fbe8-f217-4b02-8779-1006273d7864
2010-06-03 19:01:28 +00:00
Adam- f43f6c3864 Keep track of what IRCds set -r on nick change and dont inform us to keep the modemanager/modestacker in sync
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2996 5417fbe8-f217-4b02-8779-1006273d7864
2010-06-03 05:59:59 +00:00
Adam- 6d87e0eb72 Use pongs to determine when servers are done syncing in Unreal, fixes a problem with Unreals endburst system where we have clients introduced to us from a "synced" server when they really arent
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2995 5417fbe8-f217-4b02-8779-1006273d7864
2010-06-03 05:15:44 +00:00
Adam- 1c89004245 Removed ircd->b_delay_auth, have User::CheckAuthenticationToken validate users. Fixes us telling people to identify after netmerge then silently identifying them once we process svid.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2994 5417fbe8-f217-4b02-8779-1006273d7864
2010-06-03 05:15:39 +00:00
Adam- 8cc71ee794 Fixed a crash from r2990
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2992 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-30 03:21:10 +00:00
Adam- e4189822bc Rewrote some of the user nick changing code, enable vhosts for users on nick change, and dont update last seen/last realname when users are identified to an account which doesn't own the nick they are using
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2990 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-28 21:57:15 +00:00
Adam- a5ddbb0217 Fixed some compiler warnings found on 64bit systems
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2989 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-27 01:51:14 +00:00
Adam- 3d396f245b Fixed tracking of users with the +a channel mode on unrealircd during SJOINs
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2988 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-26 19:48:12 +00:00
Adam- 0018f790ed Fixed some windows problems with db_mysql_execute
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2987 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-26 19:48:08 +00:00
Adam- 6674797c7d Fixed some windows problems with db_mysql_execute
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2986 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-26 19:48:04 +00:00
Adam- 1e2e80bf75 Changed User::AutoID to always log in the user to the core, and to set usermode +r on users that should be. Fixes everyone being identified but not usermode +r on inspircd 1.2
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2985 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-25 20:21:59 +00:00
Adam- dc3744a71c Check if a module file exists before making runtime copy of it, keeps 0 byte sized unused modules out of the runtime/ directory
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2984 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-25 20:21:54 +00:00
Adam- a36e536a4d Fixed a crash if /ns ghost is used without a password
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2983 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-25 18:23:33 +00:00
Adam- 7f4afc22fa Truncate memo table before sqlsync and actually add sglines
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2982 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-24 06:17:25 +00:00
Adam- 6e7479170e Fixed bug #1167 - Fixed rsquitting juped servers on InspIRCd1.2+
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2980 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-23 20:46:29 +00:00
Adam- 543e0d770a Fixed bug #1165, fixed soem missing tables in /os sqlsync. Also added support for saving cs_levels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2979 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-23 20:46:23 +00:00
Adam- d5f0360175 Rewrote the nick colliding/releaseing/canceling system, fixes many many bugs on IRCds without svsnick and/or svshold
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2975 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-22 07:40:22 +00:00
Adam- fae2710ba7 Fixed saving capsmin in the database, fixes the bug also fixed by the last commit
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2974 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-21 23:05:38 +00:00
cyberbotx 8e39d5f219 Fix crash bug when there is a caps kicker in a channel but no alphabetic characters on a line.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2973 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-21 22:36:06 +00:00
Adam- 0a91d582c9 Fixed a crash when a users realname changes when they are on a registered nick but not identified, and made my last commit about case insensitive oper names really work
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2972 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-21 20:30:26 +00:00
Adam- 9b06dc5046 Made the oper:name config option case insensitive
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2971 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-21 06:46:52 +00:00
Adam- 6fb5ca2315 Fixed db-convert to properly convert mlocked mode names for the new databases
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2970 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-20 19:36:17 +00:00
Adam- 3860856dd2 Moved opertype access checking to NickAlises constructor, cleans up some code and fixes bug #1163
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2968 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-19 06:17:55 +00:00
Adam- 2b4d834f8c Fixed a potential crash in os_szline because of a bad pointer passed to an event
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2967 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-19 06:17:48 +00:00
Adam- 79c3a70ed7 Made is possible to change levels back to founder only and made founder only levels only apply to the real founder. Changed the defaults for things such as autoowner to ACCESS_QOP
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2965 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-17 18:12:40 +00:00
Adam- f9c4baf8fc Free access and badwords list when channels are deleted
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2964 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-17 18:12:26 +00:00
Adam- a0ff4cfed5 You dont see this
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2961 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-14 20:56:40 +00:00
Adam- 5993a65b87 Fixed many windows problems in the debug build
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2960 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-14 20:52:17 +00:00
Adam- 116a4b2bea Removed ns_noop_convert. The ns_noop module is for stable and almost 4 years old
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2959 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-14 16:51:28 +00:00
Adam- 29619eb206 Finished r2957
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2958 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-14 16:01:54 +00:00
DukePyrolator 78240c5790 Reversed the autoop flag to make it more logical. In 1.8, we set this flag to DISABLE autoop. Now we set this flag to ENABLE autoop. Also updated the database converter.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2957 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-14 06:16:25 +00:00
Adam- da277ad2c9 Fixed all of the bugs related to bug #1162 and fixed mlock params to be saved correctly in the mysql database
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2956 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-13 20:25:31 +00:00
DukePyrolator b88b98e627 fixed crashbugs in db_mysql_write when unsetting url, email and greet
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2955 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-13 19:30:56 +00:00
DukePyrolator 0ab5111bda fixed crashbug in db_mysql_write on updating an empty greet message
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2954 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-13 19:04:19 +00:00
Adam- 6c56c23837 Update core bot client names if the config is changed
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2953 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-13 06:27:16 +00:00
Adam- bd2fda42cf Fixed a potential crash caused from accessing a uninitialized pointer when enforcing mlock
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2951 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-12 01:53:29 +00:00
Adam- baa119f2e2 Changed the names of modes in the databases to be exactly the same way they are used internally. This will become very important in 1.9.3 later
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2949 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-10 22:05:01 +00:00
Adam- 5351fb4e4a Save & load nick requests from db_plain
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2948 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-10 19:26:18 +00:00
Adam- 2f3da52c3c Fixed tracking of InspIRCd channel mode R
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2945 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-10 06:41:16 +00:00
Adam- 80969ad89a Fixed tracking of channel mode +L on InspIRCd 1.2
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2944 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-10 06:30:17 +00:00
Adam- 7b6d1e1b52 Removed channel passwords from the CHAN_HELP_REGISTER and CHAN_HELP_DROP language strings
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2942 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-08 20:58:11 +00:00
Adam- 0a371aec7b Removed an unneeded static_cast in enc_none
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2941 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-07 20:57:29 +00:00
Adam- 011e426845 Removed the chanserv/aop/list command perm and switched it with chanserv/access/list. Fixed a bug so users on the access list can request the vop and hop list.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2940 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-07 20:16:09 +00:00
Adam- 75f39dec7a Fixed bug #1159 and made the SQL fields holding timestamps more consistant
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2939 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-06 17:08:55 +00:00
Adam- 3ebaa46c99 Revert "sql file should work fine on import now (exported via phpmyadmin, which puts constraints at the end)"
Revert "added DROP TABLE statements and english comments"
Revert "* SQL schema switched to InnoDB engine and UTF-8 encoding"

This reverts commit 196567ce68
This reverts commit 2e03670256
This reverts commit 7ffaa93865

git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2938 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-06 16:45:34 +00:00
pimpmylinux 196567ce68 sql file should work fine on import now (exported via phpmyadmin, which puts constraints at the end)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2937 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-06 06:55:00 +00:00
DukePyrolator 2e03670256 added DROP TABLE statements and english comments
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2936 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-06 05:25:23 +00:00
Adam- 845cca2722 Fixed a compile error in r2933
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2934 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-05 23:39:41 +00:00
pimpmylinux 1b7749f108 SVN Id keyword to .h/.c/.cpp files
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2933 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-05 23:09:14 +00:00
pimpmylinux 7ffaa93865 * SQL schema switched to InnoDB engine and UTF-8 encoding
* Defined several foreign keys and added some missing indexes

git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2932 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-05 22:55:18 +00:00
Adam- 6bd04bc936 db_mysql_read now loads the full database
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2928 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-04 18:43:13 +00:00
Adam- 8c1afc307a Fixed a crash because of a bad SQL query when changing your password
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2927 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-03 20:38:27 +00:00
Adam- d002ea1952 Moved CODING, TODO, and Changes* to docs/. Removed unused empty file install-sh.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2926 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-02 04:37:17 +00:00
Adam- 05eb3fd2d6 Added support for InspIRCd 2.0
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2925 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-01 22:49:41 +00:00
Adam- 9fc99cdfbb Fixed ms_rsend reply when sending a memo to a nick
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2924 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-30 18:04:25 +00:00
Adam- 0f45f286eb Made ms_rsend work
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2923 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-30 17:09:09 +00:00
Adam- f07adb2b25 Do not join ChanServ to hold channels if the channel is syncing
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2922 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-30 00:08:36 +00:00
Adam- ab7e430170 Don't use botserv bots to hold channels open, becomes too much of a problem if people unassign/reassign bots etc
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2921 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-30 00:08:33 +00:00
Adam- 8aa7fbe0ea Properly track users who join channels using an exception
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2920 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-29 23:05:09 +00:00
Adam- 7fc9b4f943 Forward port of r2918
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2919 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-29 00:23:18 +00:00
Adam- 3d367e9bde Fixed a typo in Changes and added an entry about new ipv6 support
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2917 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-28 21:32:28 +00:00
Adam- 582212b361 Allow superadmins and ulines to join channels always
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2916 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-25 23:12:27 +00:00
Adam- 1528727cc8 Fixed a crash when shutdown when not connected
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2915 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-25 01:23:23 +00:00
Adam- 492b543c7e Fixed the /nickserv help info output to services opers and the reply from /chanserv help info to be correct
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2914 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-24 22:48:58 +00:00
Adam- 0bfe09ba5d Fixed loading negatively mlocked modes from the DB and fixed loading access creators
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2913 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-24 22:20:14 +00:00
Adam- 76534583db Fix a potential crash when removing SQLines
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2912 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-24 22:20:10 +00:00
Adam- b8674ee3fb Logout the SQLUser & any fake users after using commands
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2911 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-24 22:20:00 +00:00
Adam- 9f47e2b137 Fixed typo in CHAN_SET_PERSIST_SYNTAX lang string
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2910 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-24 20:41:00 +00:00
Adam- aff1d04bab Updated TODO
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2909 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-24 20:40:52 +00:00
Adam- 01b0ad461a Fixed crash when shutting down when db_mysql_execute is loaded and logusers is enabled
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2908 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-24 06:51:23 +00:00
Adam- 80c9c4903e Fixed dropping nicks registered through MySQL
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2907 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-24 06:51:19 +00:00
Adam- 757c7ad973 Fixed some typos in log messages, found by Lethality
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2906 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-24 06:51:14 +00:00
Adam- 531cba9251 Actually use readtimeout from the config & fixed many valgrind errors
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2905 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-22 19:40:58 +00:00
Adam- 752e87a9f0 Fixed two log message typos, patch from Lethality
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2904 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-22 00:32:18 +00:00
Adam- 508996215f Fixed cs_clear ops to not deop users twice on Unreal and made it always use svsmode_ucmode if it can
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2902 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-21 02:15:48 +00:00
Adam- f87398b532 Correctly handle recieving messages over 65.5 thousand bytes
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2901 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-20 23:33:09 +00:00
Adam- a6cc0a305e Reply with the correct idle times for the core service bots
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2898 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-17 15:48:30 +00:00
DukePyrolator bf84e48549 fixed missing SID before FJOIN in the inspircd12 protocol module
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2897 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-17 14:22:16 +00:00
Adam- 99559d1acd Fixed loading botserv bots time created & number of channels from the database, and only readd the core bots if none exist, not just if nickserv doesn't exist
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2892 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-15 02:23:41 +00:00
Adam- 12a4aa4dba Fixed crash on /ns release and made release actually work
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2891 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-13 18:37:35 +00:00
Adam- a53719d91e Remove +r from nonregistered channels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2890 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-13 02:45:33 +00:00
Adam- 5a6ec7cf86 Fixed +q and +a channel modes on inspircd 1.2 if they have no prefixes
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2889 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-11 20:09:11 +00:00
Adam- e84db77a2c Correctly identify a user when they get autoidentified and made db_plain not crash if it gets a founderless channel
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2888 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-11 20:09:06 +00:00
Adam- 34f10d78fc Don't backup the database and not rewrite a new one (oops?)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2887 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-11 07:29:51 +00:00
Adam- 5d3491e72f Dont allow the first user in registered syncing channel to retain their access if they arent allowed to have it
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2886 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-11 07:29:46 +00:00
Adam- 1e9de0c7f1 Return MOD_STOP in various places where the user executing the command had been killed, fixes a crash if a user gets killed for too many invalid passwords
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2885 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-11 00:29:07 +00:00
Adam- 626afff37d Dont backup the database unless there is a database to backup
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2884 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-11 00:28:59 +00:00
Adam- aa677072e0 Fixed cs_modes to add commands after the modes requiring them are introduced
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2883 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-10 22:58:46 +00:00
Adam- c424dce517 Made db_plain backup its databases
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2882 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-10 22:58:42 +00:00
Adam- 91f6b2e29d Made MySQL log errors when executing queries instead of crashing
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2881 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-10 19:16:55 +00:00
dukepyrolator 7d3138a4cc changed all mysqlpp::String::empty() calls to mysqlpp::String::size() to make it compile with older versions of the mysql++ library
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2880 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-10 17:15:08 +00:00
Adam- c4f40ed3a7 Fixed tracking of InspIRCd mode +J and fixed mode manager and stacker to handle parameter modes correctly
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2879 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 22:50:48 +00:00
Adam- a1c49c827f Fixed a problem with binding to certian IPs
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2878 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 19:41:44 +00:00
Adam- 1f738f0ad4 Fixed a potential crash when a user does not pass connection checks (akill/session)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2877 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 18:51:05 +00:00
Adam- af45426be5 Fixed a crash when linking servers
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2876 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 18:11:00 +00:00
dukepyrolator 278314f8be fixed a small typo in the language files
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2875 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 16:10:46 +00:00
dukepyrolator 4e594d3acd fixed the database converter (streams dont like null pointers)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2874 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 14:27:54 +00:00
Adam- 89120afeba Fixed cs_ban, os_jupe, and os_restart
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2873 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 06:26:08 +00:00
Adam- 1a3a4b275f Removed the OnFind events, they are not necessary anymore and just waste CPU
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2872 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 06:04:52 +00:00
dukepyrolator a840ef8ae8 added a new event OnFinishSync, that allows modules to send additional data to the IRCd before we send the EOB
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2871 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 05:28:46 +00:00
dukepyrolator 2c79273205 changed the way how the IV is stored with the password and renamed some variables to make the code more understandable
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2870 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 05:22:25 +00:00
Adam- ac19ba79d1 Process the socket engine one last time before Anope disconnects to send everything through to the uplink
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2869 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 05:04:21 +00:00
Adam- a40c22a729 Made the mode stacker never send a mode change for something that is already (un)set, and set -r when dropping channels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2868 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 05:04:17 +00:00
Adam- 911eeea867 Fixed enc_none OnDecrypt to work correctly on Windows
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2867 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 05:04:09 +00:00
Adam- 1ec931a93a Fix a typo in Changes.conf
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2866 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 05:04:04 +00:00
Adam- 93949b8b96 Fixed windows compile on new sockets
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2865 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 05:03:57 +00:00
Adam- 6a70b5385b Fixed ns_getpass and ns_sendpass to not load when there is no supported encryption loaded
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2864 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 01:09:55 +00:00
Adam- f483ab87c6 Updated Change log
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2863 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-08 21:00:28 +00:00
Adam- 973ecb7058 Rewrote sockets. This adds support for IPv6 and makes Anope capable of reconnecting if it loses connection to the uplink.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2862 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-08 20:23:00 +00:00
Adam- e1ff14e0c4 Fixed make install
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2857 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-04 00:54:00 +00:00
Adam- b2380300ff Added a small example webpage that can be used to register nicknames online via SQL
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2852 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-31 20:53:08 +00:00
Adam- 2404bb74c5 Fixed windows build
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2850 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-31 06:21:16 +00:00
Adam- b1c34faf49 Fixed cs_xop to not add its commands until after it knows what modes as supported by the IRCd
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2849 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-31 04:42:00 +00:00
Adam- b55ac06019 Added akicks into SQL
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2848 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-31 04:41:56 +00:00
Adam- eaf211d59c Burned db-merger & docs, it will eventually need a complete rewrite
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2847 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-31 04:41:49 +00:00
Adam- 94822c99c0 Added last used time to akick view
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2846 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-31 04:41:44 +00:00
Adam- a3347b59a1 Marked mysql modules as a database module and fixed os_modlist to show database modules
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2845 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-31 04:41:35 +00:00
Adam- 3c4b3f0407 Fixed --with-mysqlpp configure option on some systems
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2844 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-30 19:17:50 +00:00
Adam- f4bcf833ec Finish rest of BotServ SQL stuff
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2839 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-28 07:57:05 +00:00
Adam- aa90411f3a Track BotServ settings in SQL
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2838 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-28 04:40:13 +00:00
Adam- 7e8e6e849b Removed some unused externs from extern.h
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2835 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-24 01:17:43 +00:00
Adam- 3ffd917926 Rewrote arg parsing system, changed lots of std::string*s to std::string&, made --config arg, and made Anope print out a few lines of information when starting
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2833 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-24 00:46:53 +00:00
Adam- 14fc57d24b Replaced old update/expire timers with newer timers
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2832 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-21 19:57:25 +00:00
Adam- 9302af51a3 Added options:passlen
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2831 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-21 19:57:22 +00:00
Adam- 287169d6e8 Made the database file name configurable
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2830 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-21 19:57:14 +00:00
Adam- fc05827621 Made usermax and hostmax configurable
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2829 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-21 19:57:08 +00:00
DukePyrolator 04bf65525a fixed typo in mysql query
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2828 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-21 11:28:42 +00:00
DukePyrolator 872a00242e assigned botserv bots will now join permanent channels when syncing with our uplink
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2827 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-21 08:43:12 +00:00
DukePyrolator d70948d81e fixed bad mysql query
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2826 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-21 06:01:31 +00:00
DukePyrolator 3e77eaa218 fixed sending CHGIDENT without parameter
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2825 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-20 22:27:11 +00:00
Adam- 28ccf79adf Fixed /ms list reply header to include the users nick
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2824 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-20 04:59:50 +00:00
Adam- 6ebc85b900 Fix loading akills/sxlines from plaintext database
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2823 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-20 04:59:43 +00:00
Adam- 51351aac2b Added in support for OperServ and MemoServ into SQL
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2822 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-20 04:59:38 +00:00
Adam- ba4c7d8138 Made the exception list really work
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2820 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-18 19:03:35 +00:00
Adam- 2871c4701b Fixed bug #1141, reodered some access checks in cs_kick and cs_modes to hide who is on the channel
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2817 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-16 20:21:40 +00:00
Adam- f62eb16176 Removed old parts for 1.7.x from mydbgen and fixed db_mysql_write query for /nickserv set
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2814 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-15 23:35:47 +00:00
Adam- b7477fc4d0 Foward port of r2809
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2812 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-13 20:46:34 +00:00
Adam- faed18f6e8 Fixed loading memo messages from the flatfile databases
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2806 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-09 05:26:10 +00:00
Adam- ce79b5023f Made guestnick generation really work
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2805 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-09 01:25:09 +00:00
Adam- 27364ac890 Added the --with-mysqlpp option to configure to tell it where mysql++ is installed at
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2804 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-08 03:08:37 +00:00
dukepyrolator dd7d2d4cf0 added a check for null pointers
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2803 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-06 10:33:28 +00:00
Adam- 023c2188f8 Added help for sqlsync and fixed installing mydbgen into the wrong directory when using configure
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2802 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-06 07:34:19 +00:00
Adam- ab1f8e01fa Made it so you can register empty nonregistered channels to make registering channels through SQL a bit more effective, fixed a some small bugs found on the testnet, added some missing modes into InspIRCd1.2 support, and updated TODO and Changes.lang
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2799 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-28 22:12:09 +00:00
Adam- 3f80e1cad0 Added in support for live updating MySQL databases and the ability to execute commands to Anope through MySQL. Currently database support only applies to NickServ, ChanServ and BotServ but will be expanded soon.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2798 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-28 17:33:31 +00:00
Adam- 393b5ab26e Marked mode +f on inspircd1.2 as minusnoarg
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2797 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-28 05:39:50 +00:00
Adam- 9edede4f3a Removed OnBotPreLoad event, this is a much better way to prevent multiple of the same bots being loaded
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2796 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-25 07:12:17 +00:00
Adam- 235c4ae95c Rewrote part of the Timer and CallBack code for modules to be sane
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2795 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-25 06:20:00 +00:00
Adam- 54a60add71 Actually use the cmdTable pointer in bot structures, it now points to the bots command hash
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2794 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-23 01:33:17 +00:00
cyberbotx a06e674305 Correctly identify CMake 2.8.x as being CMake 2.6 or better.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2793 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-20 04:21:15 +00:00
Adam- 84ecd1866c Added generic support for unknown modes told to Anope at runtime by the IRCd
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2790 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-12 19:51:16 +00:00
Adam- 2eb2cb7650 Changed up a small part of the mode API for preparation for dynamic mode support at runtime
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2789 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-10 23:40:54 +00:00
Adam- fcc08f61bc Updated docs to reflect CAPAB change
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2788 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-10 00:32:19 +00:00
Adam- 512b5bdaf3 Rewrote & fixed CAPAB support
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2786 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-08 03:09:19 +00:00
DukePyrolator f4db8c5360 fixed some uninitialized pointers
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2785 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-07 00:03:10 +00:00
Adam- 6b2f9e25cd Fix typo in inspircd11 that would cause people not to get status from FJOINs
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2784 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-06 20:16:30 +00:00
Adam- 4099944013 Recieve the max number of modes we can set at once from the IRCd and use it
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2783 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-06 19:27:32 +00:00
Adam- 87b62c433d Remove protectbotserv option from modes, just use options:botmodes instead
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2782 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-06 19:27:10 +00:00
Adam- de99f89894 Parse CAPAB from the server to determin what modes we know about
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2781 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-06 19:26:42 +00:00
Adam- 308070e019 We now store a list of users using a NickCore in the NickCore, this prevents having to loop every user all the time to find them
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2780 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-04 23:49:27 +00:00
Adam- 3d4cf39940 Only set necessary modes on people, eg dont set +qaohv.. unnecessary
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2779 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-02 03:21:03 +00:00
Adam- 122dcd082a Added options:botmodes to configure what modes BotServ bots should use in channels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2778 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-02 03:20:58 +00:00
DukePyrolator aa4b3e2563 replaced the alog() command with a new type-safe and stream-based Alog()
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2777 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-31 06:15:29 +00:00
Adam- 47504c9de5 Fixed db-convert and enc_old to work when converting databases using enc_old
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2776 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-24 23:15:08 +00:00
Adam- 0ed0fa4af6 Rewrote how Anope stores channel status modes on users.
This allows 3rd party modules to add and track their own status mode.
Additionally we now store a users status in both the UserContainer and ChannelContainer.
This also fixes the ModeStacker to not send any mode strings unnecessarially and shuffles some code
around so we don't have to manually remove channels from users lists everywhere.

git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2775 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-21 06:31:17 +00:00
DukePyrolator 15817208aa fixed a compile error on windows
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2765 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-16 20:15:14 +00:00
Adam- ff13d00eb5 Removed c_userlist and u_chanlist, replaced with std::list
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2764 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-16 06:57:14 +00:00
Adam- aaf1cefd1c Added channels.h and moved channel stuff from services.h to it
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2763 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-16 06:56:57 +00:00
Adam- c4c1242ac7 Fixed bug #1135 - Don't kick or ban ulined clients
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2762 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-15 19:30:11 +00:00
DukePyrolator f432789853 some code cleanup in enc_sha256
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2760 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-15 18:07:41 +00:00
DukePyrolator 1cf1f044fb burned helpserv from README
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2759 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-15 05:40:26 +00:00
Adam- 525dfe12e6 Added param arg to ChannelModeSet/Unset events, and fixed it to not ignore status and list modes
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2758 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-14 21:30:38 +00:00
Adam- 0d6fa568ec Use commasepstream in do_join and do_topic, much cleaner
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2757 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-14 21:30:15 +00:00
Adam- fadc61f89e Fixed crash caused by r2732 caused by adding someone to the exception list
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2756 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-14 21:29:39 +00:00
Adam- 711787b54d Burned do_sjoin and rewrote it to be sane. This changes how Anope handles new channel creations drasitcally as we now truely track it all instead of hack around it by not initially tracking user joins to new channels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2755 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-14 21:29:08 +00:00
sjaz f2c44c67b5 Update copyright for CBX
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2754 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-11 20:28:59 +00:00
pimpmylinux 0a61c06860 updated copyright info for 2010
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2753 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-11 19:36:24 +00:00
pimpmylinux ef442c3dc8 some language fixes ported from stable
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2751 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-11 19:06:21 +00:00
Adam- 420b11a235 Rewrote the os_staff command to work properly with the account system. This also fixing displaying users on opered nicks when not on their main nick
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2749 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-11 18:36:04 +00:00
Adam- 5ad60b70ee Forward port of r2747
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2748 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-11 14:28:48 +00:00
Adam- b73210e538 Rewrote the code that handles and sends kicks
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2746 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-10 22:56:03 +00:00
DukePyrolator 01d43e7db5 changed enc_sha256 to use random salts instead of a hardcoded salt
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2745 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-10 19:58:32 +00:00
DukePyrolator 20b5056315 changed the source argument of enc_decrypt to const
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2744 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-10 19:56:16 +00:00
DukePyrolator d66e928529 services will now send the correct message on /cs invite <nick>
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2742 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-09 19:35:01 +00:00
DukePyrolator 4ae43c7dd2 added a salted sha256 encryption module
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2741 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-09 08:56:58 +00:00
DukePyrolator 5e62e8f22e changed all password fields to std::string and reworked the way how the enc modules handle the passwords
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2740 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-09 08:49:00 +00:00
DukePyrolator a4b015b39d fixed a crashbug in os_ignore on db saving and cleaned up the db code in hs_request
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2739 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-09 06:54:11 +00:00
Adam- 0761d4f74b Fix crash caused by trying to add an akick to a channel when certain types of exceptions are set, this also fixes entry_match to match with case insensitivity, as bans/excepts/invexs arent case sensitive
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2738 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-06 22:55:21 +00:00
Adam- e34448092e Messaging service@server.name works again as it should
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2737 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-06 21:30:22 +00:00
Adam- 9124a3be53 Fixed windows build and cleaned up a few small things
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2736 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-06 20:09:48 +00:00
cyberbotx b462814760 Changed 'char *' fields in BotInfo to 'std::string', cleanup of bots.cpp, changed many other functions to use 'const std::string &' arguments as a chain reaction.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2733 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-04 06:40:24 +00:00
Adam- 2708eea5d1 Removed NICKMAX and CHANMAX, replaced user->nick, c->name, and ci->name with std::string
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2732 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-04 05:45:58 +00:00
cyberbotx f58026749b Fixed base64 functions to be const safe until I can convert them to use std::string instead, also a little cleanup while I was in there.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2729 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-03 07:42:49 +00:00
Adam- ed568f4750 Fixed db-convert to really convert vhosts
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2728 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-03 04:36:36 +00:00
Adam- de824a599a Fixed bug #1121 - Fixes a potential crash when a user changes hosts
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2725 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-02 08:21:12 +00:00
Adam- a819cb0cc0 Rewrote the vhost code, and moved it to be part of nickalias instead of in its own list. This also fixes being able to steal other users vhosts with /hs on
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2724 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-02 08:20:59 +00:00
cyberbotx 3617d79788 Convert 'const char *' and 'char *' function arguments to 'const std::string &' instead, done in actions.c along with chain reactions in other files.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2723 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-02 04:55:43 +00:00
Adam- 657e1deb59 Added in new plaintext databases. Note: This currently has no automatic backup feature. Big thanks to Phil on this for mass scale testing
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2722 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-31 01:25:10 +00:00
Adam- c595e6755d Fixed not being able to restart if anope was started from outside of the directory it is in
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2721 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-30 23:18:16 +00:00
Adam- 4fd169b184 Added in support for permanet channel modes on non-registered channels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2720 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-30 02:07:17 +00:00
Adam- 7665af27cd Chnaged ChannelModeSet/Unset events to be able to block checks such as secureops and mlock, and made it so you can't set a mode already set or unset a mode already unset so the modestacker doesn't send modes it doesn't need to
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2719 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-29 23:16:10 +00:00
sjaz df107dac1f Fix small typo in services.conf - thanks Phil.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2718 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-27 19:20:26 +00:00
Adam- bfd252b517 Send only the newly formatted users string to do_sjoin when using inspircd12, not the old one and the new one, as this implies the old users are parameters for modes, which makes mode manager unhappy
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2717 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-25 20:42:02 +00:00
DukePyrolator 90a500ffd6 fixed a small bug in the extensible class
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2716 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-25 19:11:04 +00:00
Adam- 80cbac3769 Replaced some static_casts related to modes with dynamic_cast - its a bit safer
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2715 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-23 08:41:22 +00:00
Adam- f82640af7c Fixed bug #1119 - Fixed a few help replies to respect the nickserv msg option when sending blank lines
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2714 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-22 23:59:06 +00:00
cyberbotx 77f0cd0c46 Change OperType's name to be ci::string instead of std::string, should hopefully make it so it doesn't matter what case is used in the oper blocks compared to the opertype blocks.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2713 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-21 02:30:14 +00:00
Adam- 7a7f1f8390 Rewrote part of extensible, it will now automatically unallocate memory for us so we don't have to manually delete it everywhere anymore
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2711 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-20 18:39:52 +00:00
Adam- 861fe9e7b3 Added BotInfo* sender arg to all of the User mode functions, changed IRcdProto::SendMode for channels to accept a Channel pointer and fixed unsetting users vhosts on Unreal
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2710 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-17 02:10:35 +00:00
Adam- 453963eeae Moved /chanserv unban to its own module and added support for unbanning a nickname, this readds !unban nick
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2709 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-16 23:50:33 +00:00
Adam- aad1a4ca8d Hopefully this fixes detecting if Unreal sends a TS at the end of the mode string and removing it, which keeps it from being passed to mode handler
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2708 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-16 23:50:19 +00:00
Adam- c6e3324b30 Made many of the functions in IRCDProto accept the relative object pointers instea of char* everywhere, and updated TODO
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2706 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-16 02:25:38 +00:00
robbeh 98aa38d800 Added !K trigger to kick people and updated Changes
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2705 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-15 21:31:53 +00:00
robbeh f1c975c89f Added a KB alias to ban to allow the !kb fantasy trigger
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2704 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-15 21:29:48 +00:00
Adam- 3beac16030 More work on db-convert, almost done. This also moves the bot section of the db above the chan section, so we can check if channel bot names are valid
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2703 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-14 23:52:59 +00:00
Adam- 511c4b73d2 Updated docs/IRCD to reflect recent changes in the ircdvar struct, and made botinfo constructors set created time not bs_bot, db loaders will change it later if needed
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2702 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-14 21:58:33 +00:00
Adam- 6f5bc22584 Did some more work on db-convert
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2701 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-14 03:50:27 +00:00
Adam- 744d6d4030 Set the created time for BotServ bots correctly
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2700 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-14 03:50:23 +00:00
Adam- d4af97a7a7 Ripped out old databases
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2699 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-14 00:56:58 +00:00
Adam- 710355fd2c Don't allow mlocking/defconing modes such as beIohv
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2698 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-13 23:14:20 +00:00
Adam- 46c0d40009 Moved hostserv/set priv to commands, only check for HasCommand() when trying to execute commands and not HasPriv(), as Privs should never be necessary to execute any command
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2697 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-13 19:57:22 +00:00
Adam- a7ac6a0ac7 Added in a modestacker and rewrote almost all of the remaining old mode code
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2696 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-13 19:32:19 +00:00
DukePyrolator 3a956c51be do not show the NICK_INFO_FOR_MORE message when the user has no permission to do it
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2695 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-11 21:17:08 +00:00
Adam- 280dcc7597 Only show the user as online in /nickserv info if they are identified for the group of that nick
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2693 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-08 02:33:39 +00:00
DukePyrolator 37de1286fa added a function to convert some mlock modes
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2692 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-07 22:30:43 +00:00
Adam- 4630ae454a Added options:mlock in the config so you can set what modes should be locked on new channels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2690 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-05 22:12:48 +00:00
Adam- 42b8cfe404 Got rid of some now unnecessary code in config.c and moved Config.Opers.clear() to InitOpers where it belongs
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2689 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-05 21:04:15 +00:00
cyberbotx 935c1974e8 Fix crontab script to correctly find services.pid, it's not in ~/anope/bin, it's in ~/anope/data.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2687 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-05 16:27:35 +00:00
Adam- f913188991 Added ci::string to run-cc.pl message filters, and fixed irc::string to display properly aswell
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2686 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-05 06:11:23 +00:00
Adam- eadf52caf2 Added ns_resetpass which can be used to reset user passwords by email, very useful if you're using encryption
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2685 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-05 05:44:02 +00:00
Adam- 661755a199 Fixed crash when using smartjoin and assigning a bot to an +i channel, reported by Platzii
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2684 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-04 23:11:08 +00:00
DukePyrolator 17a4789c1c some code cleanup
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2682 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-04 06:32:17 +00:00
Adam- 180ac9e4d2 Changed Extensible::Extend to not unnecessarially cast every pointer it recieves to char* and then to void*, but to just change it to void*. This allows storing of various things that the char* cast messed up, such as time_t etc
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2681 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-03 01:17:08 +00:00
DukePyrolator d4b595fdb8 the database converter can now convert the operserv database
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2678 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-29 20:55:41 +00:00
DukePyrolator f9cd8c200c the database converter can now handle a broken bot.db from 1.9.0
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2677 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-29 09:32:32 +00:00
DukePyrolator 0557f090fb fixed some bugs in the database converter
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2676 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-29 08:31:44 +00:00
DukePyrolator 23b3382347 updated database converter
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2675 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-29 07:56:35 +00:00
Adam- a08b3ec592 Massive move of all of the Config variables out of global scope to the Config class
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2674 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-28 23:02:07 +00:00
Adam- f6b823ade8 Set all of the default channel flags on new channels. Thix fixes persistant not being set on newly registered channels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2673 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-27 07:41:21 +00:00
Adam- 4fac8d6a91 Foward port of part of r2668
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2669 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-25 21:38:50 +00:00
DukePyrolator 4f550d29aa fixed a crash when a user connects without a vhost
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2666 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-24 06:19:32 +00:00
Adam- 68ef593292 Properly remove users on access lists that are below voice status when converting to XOP
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2664 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-24 03:05:38 +00:00
Adam- 24f7ffcf18 Remove the permanent channel mode from channels that are dropped/expired/etc
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2663 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-24 01:19:12 +00:00
Adam- c3529b6129 Marked +l and +L on InspIRCd 1.2 as minus no arg
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2662 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-24 01:18:59 +00:00
DukePyrolator c7893e471f updated french lang file. patch provided by nemosphere
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2661 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-21 20:51:01 +00:00
Adam- e514a3793d Changed the mode param handling code to be more into the general mode handling code, this cleans up and fixes some small problems with mlocking params. This also helps clarify that the ChannelInfo mode functions are for mlock only. Also, this adds the OnMLock and OnUnMLock events which can be used to control if something can be (un)mlocked
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2660 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-19 01:53:03 +00:00
Adam- 68381e69d9 Fix compile errors on some compilers that did not like our overloaded operators << on std::ostream
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2659 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-19 01:52:52 +00:00
cyberbotx aa421772e0 Make the correct folder be chmod'd on a *nix install of the tools directory (we got rid of installing the tools to a tools directory a long while back, now they go in the bin directory instead)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2658 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-18 13:02:22 +00:00
Adam- 5179a0a40f Delete the correct entries from akick and badwords list when given a numlist
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2657 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-18 02:51:46 +00:00
cyberbotx da8a1c7b60 Remove some CoreExports and add them in other places, fixed a few minor warnings under Windows build, made Windows build create a static library out of win32_memory.cpp and use that with everything instead of relying on it being compiled into everything (saves compiling time).
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2656 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-18 01:05:12 +00:00
cyberbotx e10fe1cd76 Removed some unnecessary casts, used C++-style casts over C-style casts, fixed a few warnings (one possibly fatal one).
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2655 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-17 04:04:24 +00:00
Adam- 88330c07ad Cleand up alot of the code in bs_badwords, made it much more C++-ish
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2654 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-17 03:15:31 +00:00
cyberbotx 88c0edc8f8 Fix the EXTRA_CONFIG_ARGS part of Config so it actually gets used, and doesn't get clobbered on no input.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2653 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-16 12:59:31 +00:00
Adam- d82771900e Made the 'Module compiled against current version of Anope' message debug only
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2652 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-16 02:38:46 +00:00
cyberbotx 7eadde9911 Possible fix for header dependency calculation causing CMake to freeze due to recursive including, fixed by removing my code to do that and letting CMake figure this out on it's own. Seems to work here, but might need testing still.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2651 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-15 21:14:11 +00:00
Adam- 8e8a1d96e4 Fixed potential segfault when deleting users from the access list by number, reported by Cronus
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2650 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-14 05:10:34 +00:00
Adam- 842b5609dc Updated docs dir, specifically the IRCD and EVENTS file to be up to date with 1.9s new systems
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2648 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-13 23:52:37 +00:00
Adam- 960968b8cd Made /nickserv group work properly with the new account system
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2647 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-13 02:56:47 +00:00
Adam- 9c6576f78e Fix bug introduced in r2574 that would set passwords incorrectly when using enc_none
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2646 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-12 02:52:27 +00:00
Adam- 65628dfdec Fix default OnSyntaxError subcommand to be the last param if its size is less than the minimum required for the command
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2645 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-12 00:28:09 +00:00
Adam- 848c0aaa21 Made Command::Execute's params const
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2644 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-12 00:28:05 +00:00
Adam- d16f4930f4 Made Command::OnSyntaxError accept a subcommand parameter, we now give syntax error messages for subcommands (eg, cs_set) instead of giving the general syntax error for the main command
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2643 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-11 23:43:02 +00:00
Adam- 30b7e50a43 Replaced all of the char* params in cs_set with ci::string so we dont use stricmp all over, and updated coding style
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2642 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-11 07:57:03 +00:00
Adam- 0264072b53 Made disabling chanserv levels *really* disable them so noone can use them (even founder), and have the ability to set it to 10000 for founders.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2641 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-11 07:20:44 +00:00
Adam- 0bd3141407 Made DefCon not use a ChannelInfo structure for saving its modes & params, it was ugly
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2640 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-11 06:03:40 +00:00
Adam- b9190ebc16 Moved alot of stuff to constructors and destructors, instead of having functions everywhere to create and destroy objects
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2639 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-11 06:03:25 +00:00
Adam- 86e43f1f14 Added support for permanent channels. This supports both permanent channel modes and the ability to have BotServ bots stay in the channel to keep it open.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2638 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-11 02:47:05 +00:00
Adam- 9d37cf1d5a Made the Module::ServHelp() functions part of the event system
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2637 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-08 23:43:51 +00:00
Adam- 458be36a32 Rewrote all of the old C style flag systems into a new Flag class which everything inherits from. This breaks reading and writing flags to the old databases (and probably many other things aswell) - Don't use it
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2636 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-08 20:06:21 +00:00
Adam- 38ad96c57c Fixed /chanserv help forbid to allow you to forbid unregistered channels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2634 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-08 19:53:05 +00:00
Adam- 1c1312624d Rewrote BuildStringList to use std::list instead of char**
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2632 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-08 18:00:54 +00:00
cyberbotx 608b63d979 Make CMake ignore the CMakeFiles directory, really only applies to Win32 build since it still allows in-source builds (unlike the *nix build).
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2631 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-08 15:42:38 +00:00
Adam- 9047b0347d Made mlock_on, mlock_off, access, and akick private in ChannelInfo
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2630 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-07 21:46:58 +00:00
Adam- 029f39964b Rewrote all of the akick code to be much cleaner
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2613 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-07 18:09:09 +00:00
Adam- 2ec83162d6 Added src/regchannel.cpp and moved the code from include/regchannel.h there
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2612 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-06 02:46:29 +00:00
Adam- 3317f406d2 Added /chanserv access view, which shows the access creator and last time used
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2611 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-06 02:08:15 +00:00
Adam- 95a017db9f Dont allow sending empty mode strings in check_modes
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2610 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-05 13:35:09 +00:00
Adam- 187868def9 Removed trailing -'s on mode strings sent in check_modes
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2609 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-05 03:32:33 +00:00
Adam- 154b0ded37 Rewrote part of check_modes to keep it from sending empty mode strings
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2608 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-04 23:28:40 +00:00
Adam- 3125c632b5 Made the -nothird optopn work
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2607 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-04 00:34:57 +00:00
Adam- 921ddbd517 Added OnPreNickExpire and OnPreChanExpire events, which can keep nicks and channels from expiring
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2605 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-03 02:05:45 +00:00
Adam- 65deeaf1e6 Moved some of the news variables out of the news module so other modules etc can access them, if needed
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2604 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-03 02:05:38 +00:00
DukePyrolator a1fe864c7f check for umode +r before sending svsmode -r
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2603 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-02 06:04:27 +00:00
DukePyrolator 9a0b1efc24 added a way to load multiple encryption modules at the same and to switch between encryption methods
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2602 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-02 05:22:35 +00:00
Adam- d2362719b2 Made do_nick return the user if I_OnPreUserConnect halts it if the user still exists, and removed unused defcon language string
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2600 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-30 17:13:50 +00:00
Adam- 987f371c0b Removed channel passwords and added /chanserv QOP command to add additional channel founders, aswell as access level 10000
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2599 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-30 02:38:06 +00:00
Adam- 6a9fa9f4d2 Rewrote all of the defcon code, and moved most of it to os_defcon. This fixes defcon to have the ability to use modes introduced to Anope at a later time than on startup (eg, from the IRCd), amongst other things
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2597 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-30 01:04:13 +00:00
Adam- 5fc268b750 Added I_OnPreUserConnect, I_OnUserModeAdd, and I_OnUserModeAdd events
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2596 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-30 01:03:54 +00:00
Adam- 5b62682223 Changed the "nickserv/confirm" opertype command to a permission, and added "nickserv/drop" permission used to drop other users nicks
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2595 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-29 00:44:26 +00:00
DukePyrolator 0b64cbc1d2 renaming to guestnick was not working properly
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2594 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-28 22:12:36 +00:00
Adam- fa622b4e9f Remove NickServ timers from TimerManager if we need to delete them, not just from NickServs timers - Fixes segfault reported by phantomal
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2593 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-28 15:12:47 +00:00
Adam- 52593ef71b Cleaned up some of the code in my last commit and made it a bit more consistant.. probably should have done this before but owell
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2592 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-27 13:19:01 +00:00
cyberbotx 9e48e683e7 Fix bug #1111, BS KICK should properly handle the CAPS, FLOOD, and REPEAT options now.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2591 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-27 11:52:51 +00:00
Adam- c64c2b6fd0 Rewrote part of chan_set_correct_modes and set Mode::ModeChar correctly
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2590 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-27 01:42:10 +00:00
Adam- a491eed3ff Added MinusNoArg to insp modes Ffj and unreal mode j
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2589 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 14:32:38 +00:00
Adam- a43424dbb9 Added internal tracking of InspIRCd1.2 channel modes BFfjMPT and user modes BcdGHIkQRSW, also added tracking of Unreal3.2s channel mode j
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2588 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 06:32:47 +00:00
Adam- 13f92e03be Document /ns confirm nick in /ns help confirm for services operators
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2587 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 04:13:07 +00:00
Adam- 6e3aa36876 Fixed passing invalid channel pointer to OnPartChannel if the last user in a channel parted, now we use NULL and just give it the channel name
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2586 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 04:12:54 +00:00
Adam- 7a429517af added options:enablelogchannel config file option, which turns on the logchannel on startup. yay!
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2585 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 04:12:47 +00:00
Adam- 0e8de37778 Rewrote part of news system and moved it all to os_news.c. Removed src/news.c
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2584 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 04:12:34 +00:00
Adam- 338cb38ee8 Added 4 new events for (un)setting modes on channels and users
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2583 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 04:12:21 +00:00
Adam- 8330009373 Actually use the I_OnRestart event
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2582 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 04:12:13 +00:00
Adam- 5ab705b6fe Fixed memos so identified users not on the nick's access list can send them
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2581 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 04:12:08 +00:00
cyberbotx a6c5207859 Move 1.9.1 TODO to Changes (as 1.9.1 was released), update Changes.conf, Changes.lang, and remove Changes.mysql (probably should've been done before 1.9,1's release, but better late than never).
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2580 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-24 03:49:49 +00:00
sjaz 2361cb8d40 Couple of typos in hs_request. Thanks Fudge.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2579 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-23 10:04:53 +00:00
sjaz d08461907c Couple more typo's from Fudge, cheers!
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2578 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-22 11:10:16 +00:00
sjaz fb997c5057 Fixed typo in example.conf. Thanks Fudge.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2577 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-22 09:12:07 +00:00
Adam- 6de7cb6eed Added SUFFIXES .c .cpp .so to makefiles to clean up some of the code
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2576 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-20 21:39:13 +00:00
Adam- 624c5ba5b6 Fixed makesfiles to work on both bsd make and gnu make
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2575 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-20 21:05:51 +00:00
cyberbotx 0b3824c86a Apply some changes based on possible "flaws" found with flawfinder.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2574 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-20 04:34:03 +00:00
cyberbotx 0d3ec454de Fix a few things that bugged me when I was working on one of my own modules.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2573 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-18 21:10:39 +00:00
jantje_85 12ac162d9e Fixed small typo in dutch translation.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2572 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-18 18:45:18 +00:00
Adam- d935d3d1b8 Call I_OnUserConnect and display news before checking if the user should be killed by sessions, sessions checking can delete the user if the IRCd doesn't send QUITs on KILL which could cause a segfault
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2570 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-17 20:24:10 +00:00
Adam- b705f7eda6 Fix crash when trying to parse a USERHOST reply for a nonexistant user on Unreal
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2569 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-17 18:33:25 +00:00
cyberbotx 00494c9020 dos2unix on files.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2568 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-17 15:45:19 +00:00
Adam- bbea1b5679 Give the proper error messages when trying to load/unload already loaded/unloaded modules, instead of just returning syntax error
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2567 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-17 01:17:19 +00:00
Adam- 72fed4d9bb Renamed OnServerConnect(Server*) event to OnNewServer, we have two OnServerConnect's which is slightly confusing...
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2566 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-17 01:17:06 +00:00
Adam- 63f55fa78b Made MOD_STOP returned from commands really halt processing (stops OnPostCommand event being called)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2565 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-17 01:17:00 +00:00
Adam- 11709eade6 Use the most recent NickServ collide/release timer for a nick instead of using the old and rejecting new ones
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2564 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-17 01:16:55 +00:00
Adam- 3806cd8440 Fixed bug #1110 - Fixed tracking of NickServ collide/release timers to only attempt to delete real ones
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2563 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-16 17:38:21 +00:00
Adam- f6510291aa Fixed inspircd12.cpp to actually work
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2562 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-14 17:39:25 +00:00
cyberbotx de917994f8 Fix CMake build generation, it was getting into an infinite loop due to the include of services.h inside of regchannel.h, will not happen now.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2561 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-13 23:58:56 +00:00
Adam- d3d64c27b1 Complete rewrite of everything associated with modes, this breaks saving and reading mlocked modes from the databases until the new databases are implemented
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2560 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-13 21:26:38 +00:00
sjaz 1fd6685132 Bump for SVN Version 1.9.2
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2559 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-13 17:06:06 +00:00
278 changed files with 31446 additions and 30500 deletions
+2 -33
View File
@@ -379,10 +379,7 @@ macro(calculate_depends SRC)
foreach(INCLUDE ${INCLUDES})
# Extract the filename from the #include line
extract_include_filename(${INCLUDE} FILENAME QUOTE_TYPE)
if(QUOTE_TYPE STREQUAL "quotes")
# Append the filename to the list of headers
append_to_list(HEADERS ${FILENAME})
else(QUOTE_TYPE STREQUAL "quotes")
if(QUOTE_TYPE STREQUAL "angle brackets")
# The following checks will only be done if there was a request for angle includes to be checked
if(CHECK_ANGLE_INCLUDES)
# Find the path of the include file
@@ -404,36 +401,8 @@ macro(calculate_depends SRC)
message(FATAL_ERROR "${SRC} needs header file ${FILENAME} but we were unable to locate that header file! Check that the header file is within the search path of your OS.")
endif(FOUND_${FILENAME}_INCLUDE)
endif(CHECK_ANGLE_INCLUDES)
endif(QUOTE_TYPE STREQUAL "quotes")
endif(QUOTE_TYPE STREQUAL "angle brackets")
endforeach(INCLUDE)
# Set the list of new headers to empty (this will store all the headers that the above list depends on)
set(NEW_HEADERS)
# Iterate through the list of headers
foreach(HEADER ${HEADERS})
# If the current header has it's own headers to depend on, append those to the list of new headers
if(${HEADER}_HEADERS)
append_to_list(NEW_HEADERS ${${HEADER}_HEADERS})
endif(${HEADER}_HEADERS)
endforeach(HEADER)
# If there were new headers, append them to the list of headers
if(NEW_HEADERS)
append_to_list(HEADERS ${NEW_HEADERS})
endif(NEW_HEADERS)
# If after all the above there is a list of header, we'll process them, converting them to full paths
if(HEADERS)
# Remove duplicate headers from the list and sort the list
remove_list_duplicates(HEADERS)
sort_list(HEADERS)
# Set the list of full path headers to empty
set(HEADERS_FULL)
# Iterate through the list of headers
foreach(HEADER ${HEADERS})
# Append the full path of the header to the full path headers list
append_to_list(HEADERS_FULL ${${HEADER}_FULLPATH})
endforeach(HEADER)
# Set the given source file to depend on the headers given
set_source_files_properties(${SRC} PROPERTIES OBJECT_DEPENDS "${HEADERS_FULL}")
endif(HEADERS)
endmacro(calculate_depends)
###############################################################################
+14 -88
View File
@@ -21,13 +21,19 @@ if(HAS_PATCH)
string(REGEX REPLACE "(.*)-patch .*" "\\1" MINOR_VERSION "${ONLY_VERSION}")
string(REGEX REPLACE ".*-patch (.*)" "\\1" PATCH_VERSION "${ONLY_VERSION}")
else(HAS_PATCH)
string(REGEX REPLACE "(.*)-beta" "\\1" MINOR_VERSION "${ONLY_VERSION}")
if(MINOR_VERSION STREQUAL "4-1\n")
set(PATCH_VERSION 1)
else(MINOR_VERSION STREQUAL "4-1\n")
set(PATCH_VERSION 0)
endif(MINOR_VERSION STREQUAL "4-1\n")
set(MINOR_VERSION 4)
string(REGEX MATCH "\\." HAS_DOT "${ONLY_VERSION}")
if(HAS_DOT)
string(REGEX REPLACE "(.*)\\..*" "\\1" MINOR_VERSION "${ONLY_VERSION}")
string(REGEX REPLACE ".*\\.(.*)" "\\1" PATCH_VERSION "${ONLY_VERSION}")
else(HAS_DOT)
string(REGEX REPLACE "(.*)-beta" "\\1" MINOR_VERSION "${ONLY_VERSION}")
if(MINOR_VERSION STREQUAL "4-1\n")
set(PATCH_VERSION 1)
else(MINOR_VERSION STREQUAL "4-1\n")
set(PATCH_VERSION 0)
endif(MINOR_VERSION STREQUAL "4-1\n")
set(MINOR_VERSION 4)
endif(HAS_DOT)
endif(HAS_PATCH)
# Detect is we are using CMake 2.6 or better, these versions include functions that require less work than CMake 2.4 does
@@ -378,86 +384,6 @@ if(WIN32)
configure_file(${Anope_SOURCE_DIR}/src/win32.rc.cmake ${Anope_BINARY_DIR}/src/win32.rc)
endif(WIN32)
# Calculate dependencies for each header
# I would've done this inside the CMakeLists.txt for the include directory, but since it's added AFTER everything else, it won't help...
# Firstly, find all the header files
file(GLOB_RECURSE ALL_HEADERS "*.h")
# Iterate through the headers
foreach(HEADER ${ALL_HEADERS})
# Don't process the file if it's in an obsolete directory
if(NOT HEADER MATCHES ".*obsolete.*")
append_to_list(TMP_HEADERS ${HEADER})
# In addition, also set up a variable to store the fullpath of the header, in a variable prefixed with just the header's filename for easy access later
get_filename_component(HEADER_FILENAME ${HEADER} NAME)
set(${HEADER_FILENAME}_FULLPATH ${HEADER})
endif(NOT HEADER MATCHES ".*obsolete.*")
endforeach(HEADER)
# Set the list of headers to be all the non-obsolete ones, then sort the list
if(TMP_HEADERS)
set(ALL_HEADERS ${TMP_HEADERS})
sort_list(ALL_HEADERS)
endif(TMP_HEADERS)
# Preparse step 1: get filenames sans paths
# Iterate through the headers
foreach(HEADER ${ALL_HEADERS})
# Find all the lines in the current header that have any form of #include on them, regardless of whitespace
read_from_file(${HEADER} "^[ \t]*#[ \t]*include[ \t]*\".*\"[ \t]*$" INCLUDES)
# Get the filename only of the header we just checked
get_filename_component(HEADER_FILENAME ${HEADER} NAME)
# Iterate through the strings containing #include (if any)
foreach(INCLUDE ${INCLUDES})
# Extract the filename from the #include line
extract_include_filename(${INCLUDE} FILENAME)
# Append this filename to the list of headers for the header we are checking
append_to_list(${HEADER_FILENAME}_HEADERS ${FILENAME})
endforeach(INCLUDE)
endforeach(HEADER)
# Preparse step 2: for every header from above that had includes, recursively find the headers each header relies on
# Iterate through the headers (again)
foreach(HEADER ${ALL_HEADERS})
# Get the filename only of the current header
get_filename_component(HEADER_FILENAME ${HEADER} NAME)
# If there were any include, we'll be checking them
if(${HEADER_FILENAME}_HEADERS)
# Set the variables, old for all previously found headers, new for all newly found headers
set(OLD_HEADERS)
set(HEADERS ${${HEADER_FILENAME}_HEADERS})
set(NEW_HEADERS)
# Loop as long as there are still headers to be parsed
while(HEADERS)
# Iterate through the list of the current headers
foreach(CURR_HEADER ${HEADERS})
# If that header has headers it relies on, we'll add them to the list of new headers
if(${CURR_HEADER}_HEADERS)
foreach(CURR_HEADERS_HEADER ${${CURR_HEADER}_HEADERS})
append_to_list(NEW_HEADERS ${CURR_HEADERS_HEADER})
endforeach(CURR_HEADERS_HEADER)
endif(${CURR_HEADER}_HEADERS)
endforeach(CURR_HEADER)
# Append the headers we checked to the old headers
append_to_list(OLD_HEADERS ${HEADERS})
# Set the headers to check to the new headers (it may be empty and that'll exit the loop)
set(HEADERS ${NEW_HEADERS})
# Erase the new headers
set(NEW_HEADERS)
endwhile(HEADERS)
# OLD_HEADERS will now contain all headers that the current header relies on, remove duplicate headers from the list and sort the list
remove_list_duplicates(OLD_HEADERS)
sort_list(OLD_HEADERS)
# Set the current header's list of headers to the cleaned up list from above
set(${HEADER_FILENAME}_HEADERS ${OLD_HEADERS})
endif(${HEADER_FILENAME}_HEADERS)
endforeach(HEADER)
# The following headers are generated from CMake rules and won't be found with the above
append_to_list(ALL_HEADERS ${Anope_BINARY_DIR}/lang/language.h ${Anope_BINARY_DIR}/include/sysconf.h ${Anope_BINARY_DIR}/include/version.h)
set(language.h_FULLPATH ${Anope_BINARY_DIR}/lang/language.h)
set(sysconf.h_FULLPATH ${Anope_BINARY_DIR}/include/sysconf.h)
set(version.h_FULLPATH ${Anope_BINARY_DIR}/include/version.h)
# Add the initial files to ignore which will be ignored regardless of if you are building in-source or out-of-source
add_to_cpack_ignored_files(".git\;config.cache\;.svn\;CMakeFiles\;sysconf.h$\;Makefile.inc$\;config.log\;config.status\;build\;autom4te.cache" TRUE)
# Add the files we don't want the periods converted for
@@ -501,7 +427,7 @@ if(WIN32)
install(FILES ${Anope_SOURCE_DIR}/anope.bat
DESTINATION bin
)
install(FILES ${Anope_SOURCE_DIR}/Changes ${Anope_SOURCE_DIR}/Changes.conf ${Anope_SOURCE_DIR}/Changes.lang
install(FILES ${Anope_SOURCE_DIR}/docs/Changes ${Anope_SOURCE_DIR}/docs/Changes.conf ${Anope_SOURCE_DIR}/docs/Changes.lang
DESTINATION .
)
endif(WIN32)
-14
View File
@@ -1,14 +0,0 @@
Anope Version 1.9.1
-------------------
** DELETED CONFIGURATION DIRECTIVES **
Nick tracking has been removed as an option.
Anope Version 1.9.0
-------------------
** ADDED CONFIGURATION DIRECTIVES **
** MODIFIED CONFIGURATION DIRECTIVES **
** DELETED CONFIGURATION DIRECTIVES **
-8
View File
@@ -1,8 +0,0 @@
Anope Version 1.9.0
-------------------
*** New Strings:
*** Mod Strings:
*** Del Strings:
-4
View File
@@ -1,4 +0,0 @@
Anope Version 1.9.0
-------------------
- MySQL Support Withdrawn until rewritten.
+8 -7
View File
@@ -2,7 +2,7 @@
#
# Configuration script for Services.
#
# Anope (c) 2003-2008 Anope team
# Anope (c) 2003-2010 Anope team
# Contact us at team@anope.org
#
# This program is free but copyrighted software; see the file COPYING for
@@ -42,7 +42,6 @@ Run_Build_System () {
WITH_PERM=""
BUILD_TYPE=""
RUN_CC_PL=""
EXTRA_ARGS=""
GEN_TYPE=""
if [ "$INSTDIR" != "" ] ; then
@@ -114,9 +113,9 @@ Run_Build_System () {
REAL_SOURCE_DIR="$SOURCE_DIR"
fi
echo "cmake $GEN_TYPE $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $RUN_CC_PL $EXTRA_ARGS $REAL_SOURCE_DIR"
echo "cmake $GEN_TYPE $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $RUN_CC_PL $EXTRA_CONFIG_ARGS $REAL_SOURCE_DIR"
cmake $GEN_TYPE $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $RUN_CC_PL $EXTRA_ARGS $REAL_SOURCE_DIR
cmake $GEN_TYPE $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $RUN_CC_PL $EXTRA_CONFIG_ARGS $REAL_SOURCE_DIR
echo ""
if [ "$SOURCE_DIR" = "." ] ; then
@@ -126,9 +125,9 @@ Run_Build_System () {
echo "Now run make to build Anope."
fi
else
echo "./configure $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $EXTRA_ARGS $RUN_CC_PL"
echo "./configure $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $EXTRA_CONFIG_ARGS $RUN_CC_PL"
./configure $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $EXTRA_ARGS $RUN_CC_PL
./configure $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $EXTRA_CONFIG_ARGS $RUN_CC_PL
fi
}
@@ -393,7 +392,9 @@ echo "(You may only need to do this if $BUILD_SYSTEM is unable to locate"
echo "missing dependencies without hints)"
echo2 "[$EXTRA_CONFIG_ARGS] "
if read INPUT ; then : ; else echo "" ; exit 1 ; fi
EXTRA_CONFIG_ARGS=$INPUT
if [ "$INPUT" ] ; then
EXTRA_CONFIG_ARGS=$INPUT
fi
echo ""
####
+2 -1
View File
@@ -7,6 +7,7 @@ LDPROFILE=
SHELL=/bin/sh
INSTDIR=@INSTDIR@
MAKEBIN=@MAKEBIN@
MYSQLDIR=@MYSQLDIR@
INSTALL=@INSTALL@
RM=@RM@
CP=@CP@
@@ -25,7 +26,7 @@ MAKEARGS = 'CFLAGS=${CFLAGS}' 'CC=${CC}' 'ANOPELIBS=${ANOPELIBS}' \
'TOUCH=${TOUCH}' 'SHELL=${SHELL}' \
'RUNGROUP=${RUNGROUP}' \
'SHARED=${SHARED}' 'MODULEFLAGS=${MODULEFLAGS}' \
'MAKEBIN=${MAKEBIN}'
'MAKEBIN=${MAKEBIN}' 'MYSQLDIR=${MYSQLDIR}'
build: language headers
@${MAKE} -C src ${MAKEARGS} all
-1
View File
@@ -3,4 +3,3 @@
file(READ "${FILE}" RESULT)
message("${RESULT}")
-98
View File
@@ -1,98 +0,0 @@
Legend:
x = done
? = unsure
+ = in progress
1.9.1
-----
[x] Remove modules_unload_all fini + hack that goes with it
[x] signal handling cleanup
[x] Seamless fantasy support for all ChanServ commands, instead of requiring bs_fantasy_*
Remaining issues:
[x] Allow fantasy to be disabled from some commands (e.g. FORBID?) seems unnecessary, really.
[x] (think on this carefully): some commands (e.g. !help) need to strip the pre-provided channelname from them.
[x] HelpServ must die
[x] Command parser cleanup: mod_current_buffer needs to go away and be replaced by a proper parser. Commands should then indicate how they want the buffer split.
[x] Make NS ENFORCE/RELEASE stuff more sane, redo timers
[x] Support operoverride and such things (stop reversing mode changes from nonopped people where unnecessary) - done by Liber
[x] Settable oper flags (split into types containing privs+commands, allow each oper to be set to a type, like we do with insp?)
Outstanding issues:
- Add some events that were not present before but useful for future versions
1.9.2
-----
[ ] Redo database insanity.
[ ] Move database load/save to a module
[ ] realtime SQL/whatever module using events (possibly ongoing)
[ ] flatfile save on a periodic timer
[ ] SANE password encryption - prefix password with the method it was encrypted with, allowing for *seamless* upgrading to different methods
[ ] Salted SHA256 (contact Special for this)
[ ] New database format (text, not binary - works very well for merging and so on)
[ ] IRCd capability support: don't rely on CAPAB, provide an interface to turn capabilities on specifically
[ ] Socket subsystem needs some serious loving
[ ] Multiple sockets
[ ] Asynchronous, using select() (multiple engines? not really needed..)
[ ] Callbacks, event style, see also inspircd
[ ] Asynchronous DNS?
Future
------
[ ] Move a (lot) of stuff to class members as a defined interface rather than copypasta everywhere (ns_set, ns_saset!)
[ ] CS SET INHABIT to keep pseudoclient in a channel after it empties to maintain banlists and such
[?] Remote identification (1.9.1? will this break stuff?)
[ ] Requires a rejig of how Alias vs Core works
[ ] Language charset stuff, including collation (1.9.1? phoenix?)
[ ] Add support for +k, +q, etc type umodes
[ ] Fix permanent channels support properly. This will require removing do_sjoin().
[ ] burn do_sjoin with fire
[ ] fantasy: allow replies/notifications to fantasy commands to go to the channel via notice
[ ] way for one module to depend on another... not like 2 MOD_HEADs and it being unpredictable which is loaded first..
the MOD_HEAD MOD_TAIL allows for too few combinations (interface code of insp, hooks code of insp?)
[ ] generic database routines modules can use to create their own database
[ ] generic way to check which modes a user has set (u->HasUmode(UMODE_OPER))
[?] a way for a module to queue itself (or even another module) for unloading
[ ] add overridden form of SendGlobops accepting BotInfo
[ ] SendAkill should just take a pointer to the Akill class instead of millions of fields (same for some other stuff)
[ ] chan_set_modes should take BotInfo, possibly with override for User *?
[ ] Language system is disgusting, it must die.
[ ] Modules should also have a way to add strings programatically
[ ] Should be able to add many strings by dropping a file in a set location.
[ ] I forsee this working via a function rather than defines, as it seems to do now: e.g. _("NS_NICK_IS_REGISTERED").
[?] Update help to reflect the fact /msg memoserv set notify mail - works just fine ;)
[ ] Useful/common "third party" modules to core distro
[ ] NS AJOIN
[ ] Last used time on AKICK/access entries
[ ] Channel access additions
[ ] Method to store listmodes (more generically than AKICK, too) for e.g. +beI and extbans, etc.
[ ] Setter
[ ] Time added
[ ] Time modified
[ ] Expiry (useful?)
[ ] Set forbidden channels +s
[ ] NS INFO: seperate field for last seen realhost, shown to SRA only
[ ] NS SUSPEND: show suspender and reason, probably to sopers only (see CS SUSPEND)
XXX: is SUSPEND overlapping with OS IGNORE functionality?
[ ] Merge NS INFO blah ALL with NS INFO blah, if you're requesting info, you really want the info anyway.
[?] Channel passwords seem to be of limited use, think of a more appropriate way to handle this
[?] Don't allow soper accounts to expire
[?] Reason for CS SET RESTRICTED
[ ] NS IDENTIFY changes
[?] Last failed identify? Maybe more useful for sopers only, so users don't get unnecessarily worried
[?] Last successful login time/ip? perhaps both of these should be a new nick setting
[ ] AKILL/SGLINE/etc..
[ ] Setter
[ ] Time added
[ ] Time modified (can they be modified?)
[ ] Time until expiry/expiry time (YES, time until expiry *instead of* expiry time, more human)
[ ] Reason
[ ] Unique IDs on each AKILL/blah so that networks may use them as ticket IDs
[ ] HS ACTIVATE -ALL (rob sez this all needs reviewing)
[ ] NS MARK, CS MARK. Allow multiple marks. Combine into OS MARK?
[ ] General options block, ability to turn LOGCHAN on from the config file..
[ ] Method to list suspended/forbidden nicks/channels?
[?] MS IGNORE. Make it take nick (accounts) or n!u@h masks. Fake success of memo send still, but send to opers?
[?] More "friendly" date displays of some things like registration time ("November 7th 2006 (2 years, 0 months, 0 days ago)")
[?] Review settings like NSModeOnID for whether they actually have a point existing (Rob says it does not - and that it should probably be a nickname setting)
[?] OS INJECT
[?] Drop CS SET ENTRYMSG, replace with a 'news' type system? (limited to a configured number of items, default 3)
Vendored
+197 -310
View File
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.62.
# Generated by GNU Autoconf 2.63.
#
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
@@ -635,75 +635,74 @@ ac_includes_default="\
# include <unistd.h>
#endif"
ac_subst_vars='SHELL
PATH_SEPARATOR
PACKAGE_NAME
PACKAGE_TARNAME
PACKAGE_VERSION
PACKAGE_STRING
PACKAGE_BUGREPORT
exec_prefix
prefix
program_transform_name
bindir
sbindir
libexecdir
datarootdir
datadir
sysconfdir
sharedstatedir
localstatedir
includedir
oldincludedir
docdir
infodir
htmldir
dvidir
pdfdir
psdir
libdir
localedir
mandir
DEFS
ECHO_C
ECHO_N
ECHO_T
LIBS
build_alias
host_alias
target_alias
CC
CFLAGS
LDFLAGS
CPPFLAGS
ac_ct_CC
EXEEXT
OBJEXT
RM
CP
TOUCH
INSTALL
MYSQLCONF
ANOPELIBS
CPP
GREP
EGREP
SHARED
MODULEFLAGS
RUNGROUP
INSTDIR
MAKEBIN
ac_subst_vars='LTLIBOBJS
LIBOBJS
LTLIBOBJS'
MYSQLDIR
MAKEBIN
INSTDIR
RUNGROUP
MODULEFLAGS
SHARED
EGREP
GREP
CPP
ANOPELIBS
INSTALL
TOUCH
CP
RM
OBJEXT
EXEEXT
ac_ct_CC
CPPFLAGS
LDFLAGS
CFLAGS
CC
target_alias
host_alias
build_alias
LIBS
ECHO_T
ECHO_N
ECHO_C
DEFS
mandir
localedir
libdir
psdir
pdfdir
dvidir
htmldir
infodir
docdir
oldincludedir
includedir
localstatedir
sharedstatedir
sysconfdir
datadir
datarootdir
libexecdir
sbindir
bindir
program_transform_name
prefix
exec_prefix
PACKAGE_BUGREPORT
PACKAGE_STRING
PACKAGE_VERSION
PACKAGE_TARNAME
PACKAGE_NAME
PATH_SEPARATOR
SHELL'
ac_subst_files=''
ac_user_opts='
enable_option_checking
with_mysql
with_mysqlconfig_path
with_rungroup
with_permissions
with_instdir
with_makebin
with_mysqlpp
with_optimization
with_debugsym
'
@@ -1138,9 +1137,9 @@ fi
if test -n "$ac_unrecognized_opts"; then
case $enable_option_checking in
no) ;;
fatal) { $as_echo "$as_me: error: Unrecognized options: $ac_unrecognized_opts" >&2
fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2
{ (exit 1); exit 1; }; } ;;
*) $as_echo "$as_me: WARNING: Unrecognized options: $ac_unrecognized_opts" >&2 ;;
*) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
esac
fi
@@ -1193,7 +1192,7 @@ test "$silent" = yes && exec 6>/dev/null
ac_pwd=`pwd` && test -n "$ac_pwd" &&
ac_ls_di=`ls -di .` &&
ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
{ $as_echo "$as_me: error: Working directory cannot be determined" >&2
{ $as_echo "$as_me: error: working directory cannot be determined" >&2
{ (exit 1); exit 1; }; }
test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
{ $as_echo "$as_me: error: pwd does not report name of working directory" >&2
@@ -1334,14 +1333,13 @@ if test -n "$ac_init_help"; then
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--without-mysql Do not use MySQL or attempt to find it
--with-mysqlconfig-path=PATH Complete path to the mysql_config executable
--with-rungroup=group Specify the rungroup for anope
--with-permissions=permissions Specify the default permissions for anope
--with-instdir=instdir Specify the default install dir for anope
--with-makebin=run-cc.pl Specify the default make binary to use
--with-optimization=1|2|3|4|5 Specify the optimization level
--with-debugsym Include debugging symbols
--with-rungroup=group Specify the rungroup for anope
--with-permissions=permissions Specify the default permissions for anope
--with-instdir=instdir Specify the default install dir for anope
--with-makebin=run-cc.pl Specify the default make binary to use
--with-mysqlpp=/usr/local/ The base directory of the MySQL++ installation
--with-optimization=1|2|3|4|5 Specify the optimization level
--with-debugsym Include debugging symbols
Some influential environment variables:
CC C compiler command
@@ -1419,7 +1417,7 @@ test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
configure
generated by GNU Autoconf 2.62
generated by GNU Autoconf 2.63
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
@@ -1433,7 +1431,7 @@ This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by $as_me, which was
generated by GNU Autoconf 2.62. Invocation command line was
generated by GNU Autoconf 2.63. Invocation command line was
$ $0 $@
@@ -1556,8 +1554,8 @@ _ASBOX
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
*_cv_*) { $as_echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
$as_echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
*_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
@@ -1760,6 +1758,8 @@ $as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
fi
done
if $ac_cache_corrupted; then
{ $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
{ $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
{ { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
@@ -1891,12 +1891,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
whose name does not start with the host triplet. If you think this
configuration is useful to you, please write to autoconf@gnu.org." >&5
$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
whose name does not start with the host triplet. If you think this
configuration is useful to you, please write to autoconf@gnu.org." >&2;}
{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
@@ -2095,12 +2091,8 @@ done
else
case $cross_compiling:$ac_tool_warned in
yes:)
{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
whose name does not start with the host triplet. If you think this
configuration is useful to you, please write to autoconf@gnu.org." >&5
$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
whose name does not start with the host triplet. If you think this
configuration is useful to you, please write to autoconf@gnu.org." >&2;}
{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
@@ -2110,11 +2102,13 @@ fi
fi
test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
See \`config.log' for more details." >&5
$as_echo "$as_me: error: no acceptable C compiler found in \$PATH
See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }
{ (exit 1); exit 1; }; }; }
# Provide some information about the compiler.
$as_echo "$as_me:$LINENO: checking for C compiler version" >&5
@@ -2244,11 +2238,13 @@ if test -z "$ac_file"; then
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables
See \`config.log' for more details." >&5
$as_echo "$as_me: error: C compiler cannot create executables
See \`config.log' for more details." >&2;}
{ (exit 77); exit 77; }; }
{ (exit 77); exit 77; }; }; }
fi
ac_exeext=$ac_cv_exeext
@@ -2276,13 +2272,15 @@ $as_echo "$ac_try_echo") >&5
if test "$cross_compiling" = maybe; then
cross_compiling=yes
else
{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs.
{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs.
If you meant to cross compile, use \`--host'.
See \`config.log' for more details." >&5
$as_echo "$as_me: error: cannot run C compiled programs.
If you meant to cross compile, use \`--host'.
See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }
{ (exit 1); exit 1; }; }; }
fi
fi
fi
@@ -2325,11 +2323,13 @@ for ac_file in conftest.exe conftest conftest.*; do
esac
done
else
{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
See \`config.log' for more details." >&5
$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }
{ (exit 1); exit 1; }; }; }
fi
rm -f conftest$ac_cv_exeext
@@ -2383,11 +2383,13 @@ else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
See \`config.log' for more details." >&5
$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile
See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }
{ (exit 1); exit 1; }; }; }
fi
rm -f conftest.$ac_cv_objext conftest.$ac_ext
@@ -3024,7 +3026,7 @@ LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_inet_ntoa" >&5
$as_echo "$ac_cv_lib_nsl_inet_ntoa" >&6; }
if test $ac_cv_lib_nsl_inet_ntoa = yes; then
if test "x$ac_cv_lib_nsl_inet_ntoa" = x""yes; then
ANOPELIBS="$ANOPELIBS-lnsl "
fi
@@ -3093,7 +3095,7 @@ LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_socket_socket" >&5
$as_echo "$ac_cv_lib_socket_socket" >&6; }
if test $ac_cv_lib_socket_socket = yes; then
if test "x$ac_cv_lib_socket_socket" = x""yes; then
ANOPELIBS="$ANOPELIBS-lsocket "
fi
@@ -3162,7 +3164,7 @@ LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_resolv_res_query" >&5
$as_echo "$ac_cv_lib_resolv_res_query" >&6; }
if test $ac_cv_lib_resolv_res_query = yes; then
if test "x$ac_cv_lib_resolv_res_query" = x""yes; then
ANOPELIBS="$ANOPELIBS-lresolv "
fi
@@ -3231,7 +3233,7 @@ LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_revoke" >&5
$as_echo "$ac_cv_lib_bsd_revoke" >&6; }
if test $ac_cv_lib_bsd_revoke = yes; then
if test "x$ac_cv_lib_bsd_revoke" = x""yes; then
ANOPELIBS="$ANOPELIBS-lbsd "
fi
@@ -3316,164 +3318,16 @@ else
$as_echo "no" >&6; }
fi
DIS_MYSQL=" MySQL: No"
# Check whether --with-mysql was given.
if test "${with_mysql+set}" = set; then
withval=$with_mysql;
else
# Check whether --with-mysqlconfig-path was given.
if test "${with_mysqlconfig_path+set}" = set; then
withval=$with_mysqlconfig_path; mysql_config_path="$withval"
else
mysql_config_path=""
fi
MYSQLCONF=""
if test "$mysql_config_path" != ""; then
if test -x "$mysql_config_path"; then
MYSQLCONF="$mysql_config_path"
echo "checking for mysql_config... $MYSQLCONF" >&6
fi
fi
if test "$MYSQLCONF" = ""; then
# Extract the first word of "mysql_config", so it can be a program name with args.
set dummy mysql_config; ac_word=$2
{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if test "${ac_cv_path_MYSQLCONF+set}" = set; then
$as_echo_n "(cached) " >&6
else
case $MYSQLCONF in
[\\/]* | ?:[\\/]*)
ac_cv_path_MYSQLCONF="$MYSQLCONF" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_MYSQLCONF="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
test -z "$ac_cv_path_MYSQLCONF" && ac_cv_path_MYSQLCONF=""""
;;
esac
fi
MYSQLCONF=$ac_cv_path_MYSQLCONF
if test -n "$MYSQLCONF"; then
{ $as_echo "$as_me:$LINENO: result: $MYSQLCONF" >&5
$as_echo "$MYSQLCONF" >&6; }
else
{ $as_echo "$as_me:$LINENO: result: no" >&5
$as_echo "no" >&6; }
fi
fi
if test "$MYSQLCONF" != ""; then
hold_cflags="$CFLAGS"
hold_ldflags="$LDFLAGS"
if test "$MYSQL_CFLAGS" = ""; then
MYSQL_CFLAGS="`$MYSQLCONF --cflags`"
fi
if test "$MYSQL_LDFLAGS" = ""; then
MYSQL_LDFLAGS="`$MYSQLCONF --libs`"
fi
CFLAGS="$CFLAGS $MYSQL_CFLAGS"
LDFLAGS="$LDFLAGS $MYSQL_LDFLAGS"
echo $ECHO_N "checking if mysql_config produces valid values... $ECHO_C" >&6
if test "$cross_compiling" = yes; then
{ { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling
See \`config.log' for more details." >&5
$as_echo "$as_me: error: cannot run test program while cross compiling
See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <mysql.h>
int main()
{
MYSQL *mysql = mysql_init(0);
return 0;
}
_ACEOF
rm -f conftest$ac_exeext
if { (ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
$as_echo "$ac_try_echo") >&5
(eval "$ac_link") 2>&5
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && { ac_try='./conftest$ac_exeext'
{ (case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
$as_echo "$ac_try_echo") >&5
(eval "$ac_try") 2>&5
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ac_cv_mysql_valid=yes
else
$as_echo "$as_me: program exited with status $ac_status" >&5
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
ac_cv_mysql_valid=no
fi
rm -rf conftest.dSYM
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
echo $ac_cv_mysql_valid >&6
if test "$ac_cv_mysql_valid" = "yes"; then
DIS_MYSQL=" MySQL: Yes"
else
CFLAGS="$hold_cflags"
LDFLAGS="$hold_ldflags"
fi
fi
fi
{ $as_echo "$as_me:$LINENO: checking whether this is a bit or little endian system" >&5
$as_echo_n "checking whether this is a bit or little endian system... " >&6; }
if test "$cross_compiling" = yes; then
{ { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling
{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
{ { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling
See \`config.log' for more details." >&5
$as_echo "$as_me: error: cannot run test program while cross compiling
See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }
{ (exit 1); exit 1; }; }; }
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -3765,11 +3619,13 @@ rm -f conftest.err conftest.$ac_ext
if $ac_preproc_ok; then
:
else
{ { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
{ { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
See \`config.log' for more details." >&5
$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }
{ (exit 1); exit 1; }; }; }
fi
ac_ext=c
@@ -4152,8 +4008,9 @@ ac_res=`eval 'as_val=${'$as_ac_Header'}
$as_echo "$as_val"'`
{ $as_echo "$as_me:$LINENO: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if test `eval 'as_val=${'$as_ac_Header'}
$as_echo "$as_val"'` = yes; then
as_val=`eval 'as_val=${'$as_ac_Header'}
$as_echo "$as_val"'`
if test "x$as_val" = x""yes; then
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
_ACEOF
@@ -4290,7 +4147,7 @@ fi
$as_echo "$ac_cv_header_sys_types_h" >&6; }
fi
if test $ac_cv_header_sys_types_h = yes; then
if test "x$ac_cv_header_sys_types_h" = x""yes; then
cat >>confdefs.h <<\_ACEOF
#define HAS_SYS_TYPES_H 1
@@ -4387,7 +4244,7 @@ rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
fi
{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
$as_echo "$ac_cv_func_dlopen" >&6; }
if test $ac_cv_func_dlopen = yes; then
if test "x$ac_cv_func_dlopen" = x""yes; then
:
else
{ $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
@@ -4455,7 +4312,7 @@ LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
if test $ac_cv_lib_dl_dlopen = yes; then
if test "x$ac_cv_lib_dl_dlopen" = x""yes; then
ANOPELIBS="$ANOPELIBS -ldl"
@@ -4709,7 +4566,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_uint8_t" >&5
$as_echo "$ac_cv_type_uint8_t" >&6; }
if test $ac_cv_type_uint8_t = yes; then
if test "x$ac_cv_type_uint8_t" = x""yes; then
cat >>confdefs.h <<\_ACEOF
#define HAVE_UINT8_T 1
@@ -4811,7 +4668,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_u_int8_t" >&5
$as_echo "$ac_cv_type_u_int8_t" >&6; }
if test $ac_cv_type_u_int8_t = yes; then
if test "x$ac_cv_type_u_int8_t" = x""yes; then
cat >>confdefs.h <<\_ACEOF
#define HAVE_U_INT8_T 1
@@ -4913,7 +4770,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_int16_t" >&5
$as_echo "$ac_cv_type_int16_t" >&6; }
if test $ac_cv_type_int16_t = yes; then
if test "x$ac_cv_type_int16_t" = x""yes; then
cat >>confdefs.h <<\_ACEOF
#define HAVE_INT16_T 1
@@ -5015,7 +4872,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_uint16_t" >&5
$as_echo "$ac_cv_type_uint16_t" >&6; }
if test $ac_cv_type_uint16_t = yes; then
if test "x$ac_cv_type_uint16_t" = x""yes; then
cat >>confdefs.h <<\_ACEOF
#define HAVE_UINT16_T 1
@@ -5117,7 +4974,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_u_int16_t" >&5
$as_echo "$ac_cv_type_u_int16_t" >&6; }
if test $ac_cv_type_u_int16_t = yes; then
if test "x$ac_cv_type_u_int16_t" = x""yes; then
cat >>confdefs.h <<\_ACEOF
#define HAVE_U_INT16_T 1
@@ -5219,7 +5076,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_int32_t" >&5
$as_echo "$ac_cv_type_int32_t" >&6; }
if test $ac_cv_type_int32_t = yes; then
if test "x$ac_cv_type_int32_t" = x""yes; then
cat >>confdefs.h <<\_ACEOF
#define HAVE_INT32_T 1
@@ -5321,7 +5178,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_uint32_t" >&5
$as_echo "$ac_cv_type_uint32_t" >&6; }
if test $ac_cv_type_uint32_t = yes; then
if test "x$ac_cv_type_uint32_t" = x""yes; then
cat >>confdefs.h <<\_ACEOF
#define HAVE_UINT32_T 1
@@ -5423,7 +5280,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_u_int32_t" >&5
$as_echo "$ac_cv_type_u_int32_t" >&6; }
if test $ac_cv_type_u_int32_t = yes; then
if test "x$ac_cv_type_u_int32_t" = x""yes; then
cat >>confdefs.h <<\_ACEOF
#define HAVE_U_INT32_T 1
@@ -5560,7 +5417,7 @@ fi
$as_echo "$ac_cv_header_strings_h" >&6; }
fi
if test $ac_cv_header_strings_h = yes; then
if test "x$ac_cv_header_strings_h" = x""yes; then
cat >>confdefs.h <<\_ACEOF
#define HAVE_STRINGS_H 1
@@ -5696,7 +5553,7 @@ fi
$as_echo "$ac_cv_header_sys_select_h" >&6; }
fi
if test $ac_cv_header_sys_select_h = yes; then
if test "x$ac_cv_header_sys_select_h" = x""yes; then
cat >>confdefs.h <<\_ACEOF
#define HAVE_SYS_SELECT_H 1
@@ -5797,8 +5654,9 @@ ac_res=`eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'`
{ $as_echo "$as_me:$LINENO: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if test `eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'` = yes; then
as_val=`eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'`
if test "x$as_val" = x""yes; then
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
@@ -5900,8 +5758,9 @@ ac_res=`eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'`
{ $as_echo "$as_me:$LINENO: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if test `eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'` = yes; then
as_val=`eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'`
if test "x$as_val" = x""yes; then
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
@@ -6003,8 +5862,9 @@ ac_res=`eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'`
{ $as_echo "$as_me:$LINENO: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if test `eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'` = yes; then
as_val=`eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'`
if test "x$as_val" = x""yes; then
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
@@ -6106,8 +5966,9 @@ ac_res=`eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'`
{ $as_echo "$as_me:$LINENO: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if test `eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'` = yes; then
as_val=`eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'`
if test "x$as_val" = x""yes; then
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
@@ -6209,8 +6070,9 @@ ac_res=`eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'`
{ $as_echo "$as_me:$LINENO: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if test `eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'` = yes; then
as_val=`eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'`
if test "x$as_val" = x""yes; then
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
@@ -6312,8 +6174,9 @@ ac_res=`eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'`
{ $as_echo "$as_me:$LINENO: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if test `eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'` = yes; then
as_val=`eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'`
if test "x$as_val" = x""yes; then
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
@@ -6415,8 +6278,9 @@ ac_res=`eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'`
{ $as_echo "$as_me:$LINENO: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if test `eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'` = yes; then
as_val=`eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'`
if test "x$as_val" = x""yes; then
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
@@ -6518,8 +6382,9 @@ ac_res=`eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'`
{ $as_echo "$as_me:$LINENO: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if test `eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'` = yes; then
as_val=`eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'`
if test "x$as_val" = x""yes; then
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
@@ -6621,8 +6486,9 @@ ac_res=`eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'`
{ $as_echo "$as_me:$LINENO: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if test `eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'` = yes; then
as_val=`eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'`
if test "x$as_val" = x""yes; then
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
@@ -6724,8 +6590,9 @@ ac_res=`eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'`
{ $as_echo "$as_me:$LINENO: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if test `eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'` = yes; then
as_val=`eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'`
if test "x$as_val" = x""yes; then
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
@@ -6827,8 +6694,9 @@ ac_res=`eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'`
{ $as_echo "$as_me:$LINENO: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if test `eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'` = yes; then
as_val=`eval 'as_val=${'$as_ac_var'}
$as_echo "$as_val"'`
if test "x$as_val" = x""yes; then
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
@@ -6891,11 +6759,21 @@ if test "${with_makebin+set}" = set; then
withval=$with_makebin; MAKEBIN=$withval
fi
# If we're using run-cc.pl suppress the make process (run-cc.pl does it for us)
if test "$MAKEBIN"; then
MAKEBIN="@$MAKEBIN"
MAKEBIN="@$MAKEBIN"
fi
MYSQLDIR=/usr/local/
# Check whether --with-mysqlpp was given.
if test "${with_mysqlpp+set}" = set; then
withval=$with_mysqlpp; MYSQLDIR=$withval
fi
@@ -6948,8 +6826,8 @@ _ACEOF
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
*_cv_*) { $as_echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
$as_echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
*_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
@@ -7341,7 +7219,7 @@ exec 6>&1
# values after options handling.
ac_log="
This file was extended by $as_me, which was
generated by GNU Autoconf 2.62. Invocation command line was
generated by GNU Autoconf 2.63. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
@@ -7354,6 +7232,15 @@ on `(hostname || uname -n) 2>/dev/null | sed 1q`
_ACEOF
case $ac_config_files in *"
"*) set x $ac_config_files; shift; ac_config_files=$*;;
esac
case $ac_config_headers in *"
"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
esac
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
# Files that config.status was made for.
config_files="$ac_config_files"
@@ -7366,16 +7253,17 @@ ac_cs_usage="\
\`$as_me' instantiates files from templates according to the
current configuration.
Usage: $0 [OPTIONS] [FILE]...
Usage: $0 [OPTION]... [FILE]...
-h, --help print this help, then exit
-V, --version print version number and configuration settings, then exit
-q, --quiet do not print progress messages
-q, --quiet, --silent
do not print progress messages
-d, --debug don't remove temporary files
--recheck update $as_me by reconfiguring in the same conditions
--file=FILE[:TEMPLATE]
--file=FILE[:TEMPLATE]
instantiate the configuration file FILE
--header=FILE[:TEMPLATE]
--header=FILE[:TEMPLATE]
instantiate the configuration header FILE
Configuration files:
@@ -7390,7 +7278,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_version="\\
config.status
configured by $0, generated by GNU Autoconf 2.62,
configured by $0, generated by GNU Autoconf 2.63,
with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
Copyright (C) 2008 Free Software Foundation, Inc.
@@ -7587,7 +7475,8 @@ for ac_last_try in false false false false false :; do
{ { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
{ (exit 1); exit 1; }; }
ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
if test $ac_delim_n = $ac_delim_num; then
break
elif $ac_last_try; then
@@ -7792,9 +7681,9 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
mac1 = arg[2]
}
split(mac1, mac2, "(") #)
macro = mac2[1]
prefix = substr(line, 1, index(line, defundef) - 1)
if (D_is_set[macro]) {
# Preserve the white space surrounding the "#".
# Preserve the white space surrounding the "#".
print prefix "define", macro P[macro] D[macro]
next
@@ -7802,7 +7691,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
# Replace #undef with comments. This is necessary, for example,
# in the case of _POSIX_SOURCE, which is predefined and required
# on some systems where configure will not decide to define it.
if (defundef == "undef") {
if (defundef == "undef") {
print "/*", prefix defundef, macro, "*/"
next
}
@@ -7826,8 +7715,8 @@ do
:[FHLC]) ac_mode=$ac_tag; continue;;
esac
case $ac_mode$ac_tag in
:[FHL]*:*);;
:L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
:[FHL]*:*);;
:L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5
$as_echo "$as_me: error: invalid tag $ac_tag" >&2;}
{ (exit 1); exit 1; }; };;
:[FH]-) ac_tag=-:-;;
@@ -8145,16 +8034,14 @@ if test "$no_create" != yes; then
# would make configure fail if this is the last instruction.
$ac_cs_success || { (exit 1); exit 1; }
fi
if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
{ $as_echo "$as_me:$LINENO: WARNING: Unrecognized options: $ac_unrecognized_opts" >&5
if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
{ $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
fi
cat <<EOT
$DIS_MODULES
$DIS_MYSQL
$DIS_MODULES
+11 -56
View File
@@ -1,6 +1,6 @@
dnl autoconf.in for Services.
dnl
dnl Anope (c) 2003-2008 Anope team
dnl Anope (c) 2003-2010 Anope team
dnl Contact us at team@anope.org
dnl This program is free but copyrighted software; see the file COPYING for
@@ -76,53 +76,6 @@ else
AC_MSG_RESULT(no)
fi
DIS_MYSQL=" MySQL: No"
AC_ARG_WITH(mysql, [ --without-mysql Do not use MySQL or attempt to find it],,[
AC_ARG_WITH(mysqlconfig-path, [ --with-mysqlconfig-path=PATH Complete path to the mysql_config executable],
mysql_config_path="$withval", mysql_config_path="")
MYSQLCONF=""
if test "$mysql_config_path" != ""; then
if test -x "$mysql_config_path"; then
MYSQLCONF="$mysql_config_path"
echo "checking for mysql_config... $MYSQLCONF" >&6
fi
fi
if test "$MYSQLCONF" = ""; then
AC_PATH_PROG(MYSQLCONF,mysql_config, "")
fi
if test "$MYSQLCONF" != ""; then
hold_cflags="$CFLAGS"
hold_ldflags="$LDFLAGS"
if test "$MYSQL_CFLAGS" = ""; then
MYSQL_CFLAGS="`$MYSQLCONF --cflags`"
fi
if test "$MYSQL_LDFLAGS" = ""; then
MYSQL_LDFLAGS="`$MYSQLCONF --libs`"
fi
CFLAGS="$CFLAGS $MYSQL_CFLAGS"
LDFLAGS="$LDFLAGS $MYSQL_LDFLAGS"
echo $ECHO_N "checking if mysql_config produces valid values... $ECHO_C" >&6
AC_TRY_RUN([
#include <mysql.h>
int main()
{
MYSQL *mysql = mysql_init(0);
return 0;
}
], ac_cv_mysql_valid=yes, ac_cv_mysql_valid=no)
echo $ac_cv_mysql_valid >&6
if test "$ac_cv_mysql_valid" = "yes"; then
DIS_MYSQL=" MySQL: Yes"
else
CFLAGS="$hold_cflags"
LDFLAGS="$hold_ldflags"
fi
fi
])
AC_MSG_CHECKING(whether this is a bit or little endian system)
AC_TRY_RUN([
int main()
@@ -239,7 +192,7 @@ AC_CHECK_FUNCS(gethostbyname_r,AC_DEFINE(HAVE_GETHOSTBYNAME_R,1))
AC_CHECK_FUNCS(strlcpy,AC_DEFINE(HAVE_STRLCPY,1))
AC_CHECK_FUNCS(strlcat,AC_DEFINE(HAVE_STRLCAT,1))
AC_ARG_WITH(rungroup, [ --with-rungroup=group Specify the rungroup for anope], [
AC_ARG_WITH(rungroup, [ --with-rungroup=group Specify the rungroup for anope], [
AC_DEFINE_UNQUOTED(RUNGROUP,"$withval","Run group")
RUNGROUP=$withval
])
@@ -248,24 +201,28 @@ AC_SUBST(RUNGROUP)
dnl AC_DEFINE_UNQUOTED(MYOSNAME,"`uname -a`","uname")
AC_ARG_WITH(permissions, [ --with-permissions=permissions Specify the default permissions for anope], AC_DEFINE_UNQUOTED(DEFUMASK,$withval,"Default umask permissions"), AC_DEFINE(DEFUMASK, 007,"Default umask Permissions"))
AC_ARG_WITH(permissions, [ --with-permissions=permissions Specify the default permissions for anope], AC_DEFINE_UNQUOTED(DEFUMASK,$withval,"Default umask permissions"), AC_DEFINE(DEFUMASK, 007,"Default umask Permissions"))
AC_ARG_WITH(instdir, [ --with-instdir=instdir Specify the default install dir for anope], [
AC_ARG_WITH(instdir, [ --with-instdir=instdir Specify the default install dir for anope], [
INSTDIR=$withval
])
MAKEBIN=`pwd`/run-cc.pl
AC_ARG_WITH(makebin, [--with-makebin=run-cc.pl Specify the default make binary to use],[MAKEBIN=$withval])
AC_ARG_WITH(makebin, [ --with-makebin=run-cc.pl Specify the default make binary to use],[MAKEBIN=$withval])
MYSQLDIR=/usr/local/
AC_ARG_WITH(mysqlpp, [ --with-mysqlpp=/usr/local/ The base directory of the MySQL++ installation],[MYSQLDIR=$withval])
AC_SUBST(INSTDIR)
AC_SUBST(MAKEBIN)
AC_SUBST(MYSQLDIR)
AC_ARG_WITH(optimization, [ --with-optimization=1|2|3|4|5 Specify the optimization level], [
AC_ARG_WITH(optimization, [ --with-optimization=1|2|3|4|5 Specify the optimization level], [
CFLAGS="$CFLAGS -O$withval"
])
AC_ARG_WITH(debugsym, [ --with-debugsym Include debugging symbols], [
AC_ARG_WITH(debugsym, [ --with-debugsym Include debugging symbols], [
CFLAGS="$CFLAGS -g"
])
@@ -280,8 +237,6 @@ AC_OUTPUT
cat <<EOT
$DIS_MODULES
$DIS_MYSQL
All done! Now run "make" (or possibly "gmake") to compile Anope.
+1 -1
View File
@@ -1,6 +1,6 @@
# Only install example.chk and example.conf from this directory
# NOTE: I would've had this just find all files in the directory, but that would include files not needed (like this file)
set(DATA example.chk example.conf)
set(DATA example.chk example.conf tables.sql)
install(FILES ${DATA}
DESTINATION data
)
+8 -5
View File
@@ -1,7 +1,7 @@
#!/bin/sh
# Crontab script for Anope
#
#
# To know how to install the crontab, read the INSTALL file.
###############################################################
@@ -11,6 +11,9 @@
# Anope binary directory
ANOPATH=/home/ircd/services/bin
# Anope data directory
ANODATA=/home/ircd/services/data
# Name of the pid file
ANOPIDF=services.pid
@@ -31,14 +34,14 @@ ANOPID=
cd $ANOPATH
if [ -f $ANOPIDF ]
if [ -f "$ANODATA/$ANOPIDF" ]
then
ANOPID=`cat $ANOPIDF`
ANOPID=`cat "$ANODATA/$ANOPIDF"`
if [ `ps auwx | grep $ANOPROG | grep $ANOPID | grep -v -c grep` = 1 ]
then
exit
exit
fi
rm -f $ANOPIDF
rm -f "$ANODATA/$ANOPIDF"
fi
./$ANOPROG $ANOARGS
+103 -108
View File
@@ -90,6 +90,11 @@ uplink
*/
host = "localhost"
/*
* Enable if Services should connect using IPv6
*/
ipv6 = no
/*
* The port to connect to.
* The IRCd *MUST* be configured to listen on this port, and to accept
@@ -132,17 +137,13 @@ serverinfo
/*
* The local address that Services will bind to before connecting to the remote
* server. This may be useful for multihomed hosts. If neither of these are given,
* Services will let the Operating System choose the local address. If only a
* hostname is specified, Services will bind to that address but let the Operating
* System choose the local port. These directives are optional, and may be overridden
* with the -local command-line option when starting Services.
* server. This may be useful for multihomed hosts. If ommited, Services will let
* the Operating System choose the local address. This directive is optional.
*
* If you don't know what this means or don't need to use it, just leave these
* If you don't know what this means or don't need to use it, just leave this
* directives commented out.
*/
#localhost = "nowhere."
#localport = 0
/*
* This directive instructs Anope which IRCd Protocol to speak when connecting.
@@ -151,11 +152,12 @@ serverinfo
* Supported:
* - inspircd11
* - inspircd12
* - inspircd20
* - ratbox
* - bahamut
* - unreal32
*/
type = "inspircd11"
type = "inspircd12"
/*
* What Server ID to use for this connection?
@@ -222,12 +224,26 @@ networkinfo
networkname = "LocalNet"
/*
* Set this to the maximum allowed nick length on your network. Anope does not
* support values larger than 31. Be sure to set this correctly, as setting
* this wrong can result in Services being disconnected from the network.
* This directive is optional, but recommended.
* Set this to the maximum allowed nick length on your network.
* Be sure to set this correctly, as setting this wrong can result in
* Services being disconnected from the network. This directive is optional,
* but recommended.
*/
nicklen = 31
/* Set this to the maximum allowed ident length on your network.
* Be sure to set this correctly, as setting this wrong can result in
* Services being disconnected from the network. This directive is optional,
* but recommended.
*/
userlen = 10
/* Set this to the maximum allowed hostname length on your network.
* Be sure to set this correctly, as setting this wrong can result in
* Services being disconnected from the network. This directive is optional,
* but recommended.
*/
hostlen = 64
}
/*
@@ -238,7 +254,7 @@ networkinfo
options
{
/*
* The encryption module to use when dealing with passwords. This determines how
* The encryption modules are used when dealing with passwords. This determines how
* the passwords are stored in the databases, and does not add any security as
* far as transmitting passwords over the network goes.
*
@@ -255,8 +271,30 @@ options
* - enc_old (old, broken MD5 encryption)
* - enc_md5 (working MD5 encryption)
* - enc_sha1 (SHA1 encryption)
* - enc_sha256 (SHA256 encryption with random salts)
*
* The first module in this list is the active encryption module. All new passwords are
* encrypted by this module. Old passwords stored in another encryption method are
* automatically re-encrypted by the active encryption module on next identify.
* Changing the order of the modules requires the services to restart.
*/
encryption = "enc_none"
encryption = "enc_none enc_sha1 enc_sha256 enc_md5 enc_old"
/*
* The maximum length of passwords
*/
passlen = 32
/*
* The database modules are used for saving and loading databases for Anope.
*
* Supported:
* - db_plain
* - db_mysql_write
* - db_mysql_read
* - db_mysql_execute
*/
database = "db_plain"
/*
* These keys are used to initiate the random number generator. These numbers
@@ -489,6 +527,33 @@ options
* WARNING: Do NOT put your user servers in this directive.
*/
ulineservers = "stats.your.network"
/*
* If set, Services will start logging to the log channel immediatly on startup.
* This directive is optional, and has no effect if logchannel is not defined.
*/
#enablelogchannel = yes
/*
* Default modes for mode lock, these are set on newly registered channels.
*/
mlock = "+nrt"
/*
* Modes to set on service bots when they join channels, comment this out for no modes
*/
botmodes = "ao"
/*
* How many times services should attempt to reconnect to the uplink before giving up
* Comment this out to never give up.
*/
maxretries = 10
/*
* How long to wait between connection retries, in seconds.
*/
retrywait = 60
}
@@ -509,23 +574,25 @@ options
* chanserv/auspex - Can see any information with /chanserv info
* chanserv/no-register-limit - May register an unlimited number of channels and nicknames
* chanserv/set - Can modify the settings of any channel (incl. changing of the owner and password!)
* hostserv/set - Can add/modify/delete any vhost
* memoserv/info - Can see any information with /memoserv info
* memoserv/set-limit - Can set the limit of max stored memos on any user and channel
* nickserv/confirm - Can confirm other users nicknames
* nickserv/drop - Can drop other users nicks
*
* Available commands:
* botserv/bot/del botserv/bot/add botserv/bot/change botserv/assign/private
* botserv/botlist botserv/set/private botserv/set/nobot
*
* chanserv/access/list chanserv/drop chanserv/forbid chanserv/getkey
* chanserv/getpass chanserv/list chanserv/logout chanserv/sendpass
* chanserv/status chanserv/topic chanserv/suspend chanserv/set/noexpire
* chanserv/aop/list
* chanserv/list chanserv/suspend chanserv/topic chanserv/set/noexpire
* chanserv/status
*
* memoserv/sendall memoserv/staff
*
* nickserv/getpass nickserv/sendpass nickserv/getemail nickserv/suspend
* nickserv/confirm
* nickserv/resetpass
*
* hostserv/set - Can add/modify/delete any vhost
*
* operserv/global operserv/news operserv/stats operserv/kick
* operserv/mode operserv/session operserv/modlist operserv/ignore
@@ -635,8 +702,8 @@ mail
sendfrom = "services@localhost.net"
/*
* If set, SENDPASS will be restricted to IRC operators. This directive is
* optional.
* If set, SENDPASS and RESETPASS will be restricted to IRC operators.
* This directive is optional.
*
* WARNING: If you choose to not enable this option, you should limit the
* number of processes that the services user can have at a time (you can
@@ -683,24 +750,11 @@ nickserv
*/
description = "Nickname Registration Service"
/*
* The filename of the NickServ database. The path is relative to the services
* executable. If not given, defaults to "nick.db".
*/
database = "nick.db"
/*
* The filename of the NickServ Pre-Nick database. The path is relative to the
* services executable. This directive is only required if the e-mail registration
* option is enabled.
*/
#prenickdatabase = "prenick.db"
/*
* The core modules to load for NickServ. This is a space separated list that corresponds
* to the base names of the modules for NickServ. This directive is optional, but highly recommended.
*/
modules = "ns_help ns_register ns_group ns_identify ns_access ns_set ns_saset ns_drop ns_recover ns_release ns_sendpass ns_ghost ns_alist ns_info ns_list ns_logout ns_status ns_update ns_getpass ns_getemail ns_forbid ns_suspend"
modules = "ns_help ns_register ns_group ns_identify ns_access ns_set ns_saset ns_drop ns_recover ns_release ns_sendpass ns_ghost ns_alist ns_info ns_list ns_logout ns_status ns_update ns_getpass ns_getemail ns_forbid ns_suspend ns_resetpass"
/*
* Force users to give an e-mail address when they register a nick. This directive
@@ -772,7 +826,7 @@ nickserv
#preregexpire = 1d
/*
* The maximum number of nicks allowed in a group. This directve is optional, but
* The maximum number of nicks allowed in a group. This directive is optional, but
* recommended. If not set or set to 0, no limits will be applied.
*/
maxaliases = 16
@@ -871,17 +925,11 @@ chanserv
*/
description = "Channel Registration Service"
/*
* The filename of the ChanServ database. The path is relative to the services
* executable. If not given, defaults to "chan.db".
*/
database = "chan.db"
/*
* The core modules to load for ChanServ. This is a space separated list that corresponds
* to the base names of the modules for ChanServ. This directive is optional, but highly recommended.
*/
modules = "cs_help cs_register cs_identify cs_set cs_xop cs_access cs_akick cs_drop cs_sendpass cs_ban cs_clear cs_modes cs_getkey cs_invite cs_kick cs_list cs_logout cs_topic cs_info cs_getpass cs_forbid cs_suspend cs_status"
modules = "cs_help cs_register cs_set cs_xop cs_access cs_akick cs_drop cs_ban cs_clear cs_modes cs_getkey cs_invite cs_kick cs_list cs_topic cs_info forbid cs_suspend cs_status cs_unban"
/*
* The default options for newly registered channels. Note that changing these options
@@ -899,12 +947,13 @@ chanserv
* order to be considered for being on the access list of the channel
* - secureops: Only allow operator status to be given if the user is on the access list
* - securefounder: Only allow the real founder of the channel to drop the channel, change it's
* password, or change the founder or succesor
* password, or change the founder or successor
* - signkick: Use of ChanServ's KICK command will cause the user's nick to be signed to the kick.
* - signkicklevel: Same as above, but the kick will not be signed if the user is at the same access
* level or superior to the target
* - topiclock: Disallow the topic to be changed except with ChanServ's TOPIC command
* - xop: Enable use of the xOP system
* - persist: Keep the channel open at all times
*
* This directive is optional, if left blank, the options will default to keetopic, secure, securefounder,
* and signkick. If you really want no defaults, use "none" by itself as the option.
@@ -953,7 +1002,7 @@ chanserv
/*
* The length of time ChanServ stays in a channel after kicking a user from a channel they are not
* premitted to be in. This only occurs when the user is the only one in the channel.
* permitted to be in. This only occurs when the user is the only one in the channel.
*/
inhabit = 15s
@@ -1017,7 +1066,7 @@ memoserv
/*
* Should we notify all appropriate users of a new memo? This applies in cases where a memo is
* sent to a nick which is in the group of another nick. Not that, unlike before, it is currently
* sent to a nick which is in the group of another nick. Note that, unlike before, it is currently
* more efficient to enable this. This directive is optional.
*/
notifyall = yes
@@ -1053,12 +1102,6 @@ botserv
*/
description = "Bot Service"
/*
* The filename of the BotServ database. The path is relative to the services
* executable. If not given, defaults to "bot.db".
*/
database = "bot.db"
/*
* The core modules to load for BotServ. This is a space separated list that corresponds
* to the base names of the modules for BotServ. This directive is optional, but highly recommended.
@@ -1152,12 +1195,6 @@ hostserv
*/
description = "vHost Service"
/*
* The filename of the HostServ database. The path is relative to the services
* executable. If not given, defaults to "hosts.db".
*/
database = "hosts.db"
/*
* The core modules to load for HostServ. This is a space separated list that corresponds
* to the base names of the modules for HostServ. This directive is optional, but highly recommended.
@@ -1195,24 +1232,6 @@ operserv
*/
globaldescription = "Global Noticer"
/*
* The filename of the OperServ database. The path is relative to the services
* executable. If not given, defaults to "oper.db".
*/
database = "oper.db"
/*
* The filename of OperServ's News database. The path is relative to the services
* executable. If not given, defaults to "news.db".
*/
newsdatabase = "news.db"
/*
* The filename of OperServ's Session Exception database. The path is relative to the services
* executable. If not given, defaults to "exception.db".
*/
exceptiondatabase = "exception.db"
/*
* The core modules to load for OperServ. This is a space separated list that corresponds
* to the base names of the modules for OperServ. This directive is optional, but highly recommended.
@@ -1493,6 +1512,14 @@ module { name = "hs_request" }
* The following blocks are used for options pertaining to modules and are not part of the core.
* Unless otherwise stated, most of the options are optional.
*/
db_plain
{
/*
* The database db_plain should use
*/
database = "anope.db"
}
hs_request
{
/*
@@ -1510,12 +1537,6 @@ hs_request
* If set, Services will send a memo to all Host Setters when a new vHost is requested.
*/
#memosetters = yes
/*
* The filename of the vHost request database. The path is relative to the services
* executable. If not given, defaults to "hs_request.db".
*/
#database = "hs_request.db"
}
ns_maxemail
@@ -1528,29 +1549,3 @@ ns_maxemail
#maxemails = 1
}
ns_noop_convert
{
/*
* The filename of the NickServ AUTOOP convert database. The path is relative to the services
* executable. If not given, defaults to "autoop.db".
*/
#database = "autoop.db"
}
os_ignore
{
/*
* The filename of the Services' ignore database. The path is relative to the services
* executable. If not given, defaults to "os_ignore.db".
*/
#database = "os_ignore.db"
}
os_info
{
/*
* The filename of the oper information database. The path is relative to the services
* executable. If not given, defaults to "os_info.db".
*/
#database = "os_info.db"
}
+174
View File
@@ -0,0 +1,174 @@
<?php
/*
* (C) 2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
*
*
*/
/** Object representing a MySQL query
*/
class MySQLQuery
{
/* Our query */
private $Query;
/* The result */
private $Result;
/* Socket used to connect to MySQL */
private $MysqlSock;
/** Constructor
* @param MysqlSock The MySQL socket
*/
function __construct($MysqlSock)
{
$this->MysqlSock = $MysqlSock;
}
/** Destructor
*/
function __destruct()
{
}
/** Execute a query
* @return true or false
*/
private function Execute()
{
$Res = mysql_query($this->Query, $this->MysqlSock);
$this->Result = array();
if (!empty($Res))
{
while (($Result = @mysql_fetch_assoc($Res)))
{
$this->Result[] = $Result;
}
return true;
}
return false;
}
/** Get the result for the query
* @return The result
*/
public function Result()
{
return $this->Result;
}
/** Execute a query
* @param A formatted string
* @param ... Args
* @return true or false
*/
public function Query($String, $P1 = NULL, $P2 = NULL, $P3 = NULL, $P4 = NULL, $P5 = NULL, $P6 = NULL, $P7 = NULL,
$P8 = NULL, $P9 = NULL, $P10 = NULL, $P11 = NULL, $P12 = NULL, $P13 = NULL, $P14 = NULL)
{
$this->Query = sprintf($String, $P1, $P2, $P3, $P4, $P5, $P6, $P7, $P8, $P9, $P10, $P11, $P12, $P13, $P14);
return $this->Execute();
}
/** Escape a string to by MySQL safe
* @return A new, MySQL safe string
*/
public function Escape($String)
{
return mysql_real_escape_string($String, $this->MysqlSock);
}
}
/** Main Anope class
*/
class Anope
{
/* Socket used to connect to MySQL */
private $MysqlSock;
/* True if we were able to connect successfully */
private $Connected;
/** Constructor
* @param MysqlHost The host of the MySQLd server, port can be included on this too
* @param MysqlUser The username to authenticate to MySQL with
* @param MysqlPassword The password to authenticate with
* @param MysqlDatabase The name of the Anope database
*/
function __construct($MysqlHost, $MysqlUser, $MysqlPassword, $MysqlDatabase)
{
$this->Connected = false;
$this->MysqlSock = @mysql_connect($MysqlHost, $MysqlUser, $MysqlPassword);
if ($this->MysqlSock)
$this->Connected = @mysql_select_db($MysqlDatabase, $this->MysqlSock);
}
/** Destructor
* Closes the connection to the MySQL server
*/
function __destruct()
{
if ($this->MysqlSock)
@mysql_close($this->MysqlSock);
}
/** Check if we are connected successfully
* @return true or false
*/
public function Connected()
{
return $this->Connected;
}
/** Retrieve a new query object
* @return A new Query object
*/
public function Query()
{
return new MySQLQuery($this->MysqlSock);
}
/** Anope Functions **/
/** Execute a command in Anope
* For more information read docs/MYSQL
* @param Nick The nickname to execute the command from
* @param Service The service to execute the command on
* @param Command The command to execute
*/
public function Command($Nick, $Service, $Command)
{
$Query = $this->Query();
return $Query->Query("INSERT DELAYED INTO `anope_commands` (nick, service, command) VALUES('%s', '%s', '%s')", $Query->Escape($Nick), $Query->Escape($Service), $Query->Escape($Command));
}
/** Register a nick
* @param Nick The nick to be registered
* @param Password The password
* @param Email The email address to use, defaults to NULL
* @param Returns a message confirming or denying the registration process
*/
public function Register($Nick, $Password, $Email = NULL)
{
$Query = $this->Query();
$Query->Query("SELECT nick FROM `anope_ns_alias` WHERE `nick` = '%s'", $Query->Escape($Nick));
$Result = $Query->Result();
if (isset($Result[0]['nick']))
{
return "Nickname already registered";
}
if ($this->Command($Nick, "NickServ", "REGISTER ".$Password." ".$Email))
{
return "Nick registration successful. If your network has email registration enabled check your inbox for the next step of the registration process.";
}
return "Error registering nick";
}
}
?>
+59
View File
@@ -0,0 +1,59 @@
<?php
/*
* (C) 2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
*
*
*
*/
/* This is an example functional webpage showing how to use Anopes MySQL
* Execute feature to register a nickname online
*/
/* Include Anope's PHP API */
include('Anope.php');
function IsValidEmail($Email)
{
return eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $Email);
}
if (!empty($_POST['nick']) && !empty($_POST['password1']) && !empty($_POST['password2']) && !empty($_POST['email']))
{
if ($_POST['password1'] != $_POST['password2'])
{
echo 'Passwords do not match';
}
else if (!IsValidEmail($_POST['email']))
{
echo 'Invalid email address';
}
else
{
/* Create a new connection, arguments are hostname, username, password, and database name */
$Anope = new Anope("localhost", "anope", "anoperules", "anope");
/* Check if we connected */
if (!$Anope->Connected())
{
echo "Error connecting to MySQL database";
}
else
{
echo $Anope->Register($_POST['nick'], $_POST['password1'], $_POST['email']);
}
die;
}
}
?>
</br>
<form method="post" action="Register.php">
Nick: <input type="text" name="nick"></br>
Password: <input type="password" name="password1"></br>
Confirm Password: <input type="password" name="password2"></br>
Email: <input type="text" name="email"></br>
<input type="submit" value="Submit">
</form>
+386
View File
@@ -0,0 +1,386 @@
-- If you need to create your db, uncomment the following lines.
--
-- CREATE DATABASE anope;
-- USE anope;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_extra'
--
DROP TABLE IF EXISTS anope_extra;
CREATE TABLE anope_extra (
data text NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_commands'
--
DROP TABLE IF EXISTS anope_commands;
CREATE TABLE anope_commands (
nick varchar(255) NOT NULL default '',
service varchar(255) NOT NULL default '',
command text NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_ns_core'
--
DROP TABLE IF EXISTS anope_ns_core;
CREATE TABLE anope_ns_core (
display varchar(255) NOT NULL default '',
pass text NOT NULL,
email text NOT NULL default '',
greet text NOT NULL default '',
icq int(10) unsigned NOT NULL default '0',
url text NOT NULL default '',
flags text NOT NULL default '',
language smallint(5) unsigned NOT NULL default '0',
channelcount smallint(5) unsigned NOT NULL default '0',
memomax smallint(5) unsigned NOT NULL default '0',
PRIMARY KEY (display)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Table structure for table 'anope_ns_core_metadata'
--
DROP TABLE IF EXISTS anope_ns_core_metadata;
CREATE TABLE anope_ns_core_metadata (
nick varchar(255) NOT NULL default '',
name varchar(255) NOT NULL default '',
value text NOT NULL default '',
PRIMARY KEY (name)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- ---------------------------------------------------------
--
-- Table structure for table 'anope_ns_alias'
--
DROP TABLE IF EXISTS anope_ns_alias;
CREATE TABLE anope_ns_alias (
nick varchar(255) NOT NULL default '',
last_quit text NOT NULL,
last_realname text NOT NULL,
last_usermask text NOT NULL,
time_registered int(10) unsigned NOT NULL default '0',
last_seen int(10) unsigned NOT NULL default '0',
flags text NOT NULL default '',
display varchar(255) NOT NULL default '',
PRIMARY KEY (nick)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Table structure for table 'anope_ns_alias_metadata'
--
DROP TABLE IF EXISTS anope_ns_alias_metadata;
CREATE TABLE anope_ns_alias_metadata (
nick varchar(255) NOT NULL default '',
name varchar(255) NOT NULL default '',
value text NOT NULL default '',
PRIMARY KEY (name)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_ns_access'
--
DROP TABLE IF EXISTS anope_ns_access;
CREATE TABLE anope_ns_access (
display varchar(255) NOT NULL default '',
access varchar(160) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- ---------------------------------------------------------
--
-- Table structure for table 'anope_ns_request'
--
DROP TABLE IF EXISTS anope_ns_request;
CREATE TABLE anope_ns_request (
nick varchar(255) NOT NULL default '',
passcode text NOT NULL,
password text NOT NULL,
email text NOT NULL,
requested int(10) unsigned NOT NULL default '0',
PRIMARY KEY (nick)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_cs_access'
--
DROP TABLE IF EXISTS anope_cs_access;
CREATE TABLE anope_cs_access (
level int(11) NOT NULL default '0',
display varchar(255) NOT NULL default '',
channel varchar(255) NOT NULL default '',
last_seen int(10) unsigned NOT NULL default '0',
creator varchar(255) NOT NULL default '',
UNIQUE KEY (channel,display)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_cs_akick'
--
DROP TABLE IF EXISTS anope_cs_akick;
CREATE TABLE anope_cs_akick (
channel varchar(255) NOT NULL default '',
flags varchar(255) NOT NULL default '',
mask varchar(255) NOT NULL default '',
reason text NOT NULL default '',
creator varchar(255) NOT NULL default '',
created int(10) unsigned NOT NULL default '0',
last_used int(10) unsigned NOT NULL default '0',
UNIQUE KEY channel (channel, mask)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_bs_badwords'
--
DROP TABLE IF EXISTS anope_bs_badwords;
CREATE TABLE anope_bs_badwords (
channel varchar(255) NOT NULL default '',
word varchar(255) NOT NULL,
type varchar(50) NOT NULL,
UNIQUE KEY channel (channel,word)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_cs_info'
--
DROP TABLE IF EXISTS anope_cs_info;
CREATE TABLE anope_cs_info (
name varchar(255) NOT NULL default '',
founder text NOT NULL,
successor text NOT NULL,
descr text NOT NULL,
url text NOT NULL,
email text NOT NULL,
time_registered int(10) unsigned NOT NULL default '0',
last_used int(10) unsigned NOT NULL default '0',
last_topic text NOT NULL,
last_topic_setter text NOT NULL,
last_topic_time int(10) unsigned NOT NULL default '0',
flags text NOT NULL default '',
forbidby text NOT NULL,
forbidreason text NOT NULL,
bantype smallint(6) NOT NULL default '0',
mlock_on text NOT NULL default '',
mlock_off text NOT NULL default '',
mlock_params text NOT NULL default '',
entry_message text NOT NULL,
memomax smallint(5) unsigned NOT NULL default '0',
botnick varchar(255) NOT NULL default '',
botflags text NOT NULL default '',
capsmin smallint(6) NOT NULL default '0',
capspercent smallint(6) NOT NULL default '0',
floodlines smallint(6) NOT NULL default '0',
floodsecs smallint(6) NOT NULL default '0',
repeattimes smallint(6) NOT NULL default '0',
PRIMARY KEY (name)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_cs_info_metadata'
--
DROP TABLE IF EXISTS anope_cs_info_metadata;
CREATE TABLE anope_cs_info_metadata (
channel varchar(255) NOT NULL default '',
name varchar(255) NOT NULL default '',
value text NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_cs_levels'
--
DROP TABLE IF EXISTS anope_cs_levels;
CREATE TABLE anope_cs_levels (
channel varchar(255) NOT NULL default '',
position int(11) NOT NULL default '0',
level int(11) NOT NULL default '0',
UNIQUE KEY channel (channel,position)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_cs_ttb'
--
DROP TABLE IF EXISTS anope_cs_ttb;
CREATE TABLE anope_cs_ttb (
channel varchar(255) NOT NULL default '',
ttb_id int(11) NOT NULL default '0',
value int(11) NOT NULL default '0',
UNIQUE KEY channel (channel,ttb_id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_bs_core'
--
DROP TABLE IF EXISTS anope_bs_core;
CREATE TABLE anope_bs_core (
nick varchar(255) NOT NULL default '',
user varchar(255) NOT NULL default '',
host text NOT NULL default '',
rname text NOT NULL default '',
flags text NOT NULL default '',
created int(10) unsigned NOT NULL default '0',
chancount int(11) NOT NULL default '0',
PRIMARY KEY (nick)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_bs_info_metadata'
--
DROP TABLE IF EXISTS anope_bs_info_metadata;
CREATE TABLE anope_bs_info_metadata (
botname varchar(255) NOT NULL default '',
name varchar(255) NOT NULL default '',
value text NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_ms_info'
--
DROP TABLE IF EXISTS anope_ms_info;
CREATE TABLE anope_ms_info (
receiver varchar(255) NOT NULL,
number int(11) NOT NULL default '0',
flags int(11) NOT NULL default '0',
time int(10) unsigned NOT NULL default '0',
sender text NOT NULL,
text blob NOT NULL,
serv enum('NICK','CHAN') NOT NULL default 'NICK'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_os_akills'
--
DROP TABLE IF EXISTS anope_os_akills;
CREATE TABLE anope_os_akills (
user varchar(255) NOT NULL,
host varchar(255) NOT NULL,
xby text NOT NULL,
reason text NOT NULL,
seton int(10) unsigned NOT NULL default '0',
expire int(10) unsigned NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_os_core'
--
DROP TABLE IF EXISTS anope_os_core;
CREATE TABLE anope_os_core (
maxusercnt int(11) NOT NULL default '0',
maxusertime int(10) unsigned NOT NULL default '0',
akills_count int(11) NOT NULL default '0',
sglines_count int(11) NOT NULL default '0',
sqlines_count int(11) NOT NULL default '0',
szlines_count int(11) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_os_exceptions'
--
DROP TABLE IF EXISTS anope_os_exceptions;
CREATE TABLE anope_os_exceptions (
mask varchar(255) NOT NULL,
slimit int(11) NOT NULL default '0',
who text NOT NULL,
reason text NOT NULL,
time int(10) unsigned NOT NULL default '0',
expires int(10) unsigned NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_os_sxlines'
--
DROP TABLE IF EXISTS anope_os_sxlines;
CREATE TABLE anope_os_sxlines (
type varchar(20) NOT NULL,
mask varchar(255) NOT NULL,
xby text NOT NULL,
reason text NOT NULL,
seton int(10) unsigned NOT NULL default '0',
expire int(10) unsigned NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_metadata'
--
DROP TABLE IF EXISTS anope_metadata;
CREATE TABLE anope_metadata (
name varchar(255) NOT NULL default '',
value text NOT NULL default '',
PRIMARY KEY (name)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_info'
--
DROP TABLE IF EXISTS anope_info;
CREATE TABLE anope_info (
version int(11) default NULL,
date datetime default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
View File
+42 -1
View File
@@ -1,7 +1,46 @@
Anope Version 1.9.2
--------------------
A K alias to chanserv kick command
A KB alias to chanserv ban command
A The ability to register empty nonregistered channels
A Flatfile plaintext databases and removed old binary ones
A Added in live updating SQL and the ability to execute commands through SQL (see docs/MYSQL)
A Added support for many more modes into Anope and the ability to have generic support for modes unknown to Anope
A Added a mode stacker to combine many mode changes into fewer
A Added in the CS SET PERSIST command which can be used to keep service bots in channels even when the channel is empty
A Added AUTOOWNER OWNER and OWNERME into CS LEVELS
A Added ns_resetpass module to the core
A CS ACCESS VIEW which shows who added the access and last time used
A Last used time to CS AKICK VIEW
A Added a sha_256 encryption module
A Added the ability to load multiple encryption modules, and the ability to seamlessly convert your database between diferent encryptions
A Added configuration options to allow Anope to reconnect if it disconnects from the uplink instead of dieing
A Added support for linking with IPv6
F Unban command to accept an optional nick arg
F Some typos in services.conf
F Crash when users change their host that are identified to a group, but not a nick
F Host length checking in HS SET(ALL) and HS REQUEST
F Only show if a user is online in NS INFO if they are really identiifed for the group of the nick they are on
F Crash when using BSSmartJoin
F Converting access entries to access from xop when a users access is below voice
F A bad pointer passed to the OnDelEvent which could cause some 3rd party modules to crash
F CS FORBID allows to you forbid unregistered channels
F The -nothird command line option to work
F ms_rsend to really work
F SQUITing juped servers on InspIRCd1.2+
Anope Version 1.9.1
--------------------
F Don't enforce akick/forbidden/etc.-restrictions on clients on ulined servers.
F Remove modules_unload_all fini + hack that goes with it.
F Signal handling cleanup.
A Seamless fantasy support on all ChanServ commands, instead of requiring bs_fantasy_*.
F Allow fantasy to be disabled on some commands (e.g. FORBID).
F Some commands (e.g. !help) need to strip the pre-provided channelname from them.
D HelpServ removed
F Command parser cleanup: mod_current_buffer removed and replaced with proper parser. Commands now indicate how they want the buffer split.
F Make NS ENFORCE/RELEASE stuff more sane, redo timers.
A Opertypes (similar to InspIRCd's opertypes)
Provided by Ankit <ankit@nevitus.com> - 2009
F Segfault on shutdown
@@ -28,6 +67,8 @@ F Fix two segfaults, noted by DukePyrolator. Thanks!
F Fix part one of #1010, reported by DukePyrolator. (Language settings are not respected in message sending.) Thanks!
F Memory leak on +beI modes.
Provided by Liber <Liber@jasonirc.net> - 2009
F Support operoverride and such things (stop reversing changes from nonopped people where unnecessary)
Anope Version 1.9.0
--------------------
+52
View File
@@ -0,0 +1,52 @@
Anope Version 1.9.2
--------------------
** ADDED CONFIGURATION DIRECTIVES **
options:enablelogchannel added to auto turn on the logchannel on startup
options:mlock added to configure the default mlock modes on new channels
options:database added for the database modules
options:botmodes added to configure modes BotServ bots should use
options:userlen added to configure maxiumum ident length
options:hostlen added to configure maximum hostname length
options:database added to configure what database modules to use
options:passlen added to specify the maximum length of passwords
uplink:ipv6 added to enable IPv6 connectivity
options:maxretries added to specify the number of reconnect attempts allowed
options:retrywait added to specify how long to wait between reconnect attempts
opertype command chanserv/aop/list removed as it was unnecessary, use chanserv/access/list instead
** MODIFIED CONFIGURATION DIRECTIVES **
options:encryption added enc_sha256
chanserv:modules added cs_unban
nickserv:modules added ns_resetpass
** DELETED CONFIGURATION DIRECTIVES **
nickserv:database deleted because of new database system
nickserv:prenickdatabase deleted because of new database system
chanserv:database deleted because of the new database system
botserv:database deleted because of the new database system
hostserv:database deleted because of the new database system
operserv:database deleted because of the new database system
operserv:newsdatabase deleted because of the new database system
operserv:exceptiondatabase deleted because of the new database system
hs_request:database deleted because of the new database system
os_ignore:database deleted because of the new database system
serverinfo:localport deleted
Anope Version 1.9.1
-------------------
** ADDED CONFIGURATION DIRECTIVES **
Opertypes have been added, through the opertype blocks.
Services Operators are now specified in the oper blocks.
** MODIFIED CONFIGURATION DIRECTIVES **
botserv:modules no longer contains bs_fantasy* modules, fantasy is now seamless.
operserv:modules has replaced os_logonnews, os_opernews, and os_randomnews with os_news.
operserv:modules no longer contains os_admin and os_oper modules, removed in favor of oper blocks.
operserv:notifications no longer contains osraw due to removal of OS RAW.
** DELETED CONFIGURATION DIRECTIVES **
Nick tracking has been removed as an option.
Restricting of NS GETPASS and CS GETPASS removed in favor of opertypes.
Host Setters were removed in favor of opertypes.
HelpServ has been removed entirely.
operserv:disableraw removed due to removal of OS RAW.
+255
View File
@@ -0,0 +1,255 @@
Anope Version 1.9.2
--------------------
*** New Strings:
CHAN_INVITE_OTHER_SUCCESS
NICK_HELP_CONFIRM_OPER
CHAN_QOP_DISABLED
CHAN_QOP_NICKS_ONLY
CHAN_QOP_ADDED
CHAN_QOP_MOVED
CHAN_QOP_NO_SUCH_ENTRY
CHAN_QOP_NOT_FOUND
CHAN_QOP_DELETED
CHAN_QOP_DELETED_ONE
CHAN_QOP_DELETED_SEVERAL
CHAN_QOP_LIST_EMPTY
CHAN_QOP_LIST_HEADER
CHAN_QOP_CLEAR
CHAN_HELP_QOP
CHAN_QOP_SYNTAX
CHAN_HELP_CMD_QOP
CHAN_HELP_SET_PASSWORD
CHAN_LEVEL_AUTOOWNER
CHAN_LEVEL_OWNER
CHAN_LEVEL_OWNERME
CHAN_ACCESS_VIEW_XOP_FORMAT
CHAN_ACCESS_VIEW_AXS_FORMAT
CHAN_SET_PERSIST_SYNTAX
CHAN_SET_PERSIST_ON
CHAN_SET_PERSIST_OFF
CHAN_INFO_OPT_PERSIST
BOT_UNASSIGN_PERSISTANT_CHAN
CHAN_HELP_SET_PERSIST
NICK_RESETPASS_SYNTAX
NICK_RESETPASS_SUBJECT
NICK_RESETPASS_MESSAGE
NICK_RESETPASS_COMPLETE
NICK_CONFIRM_EXPIRED
NICK_CONFIRM_SUCCESS
NICK_HELP_CMD_RESETPASS
NICK_HELP_RESETPASS
CHAN_UNBANNED_OTHER
OPER_HELP_SYNC
OPER_HELP_CMD_SQLSYNC
OPER_SYNC_UPDATING
OPER_SYNC_UPDATED
CHAN_LEVELS_CHANGED_FOUNDER
*** Mod Strings:
CHAN_HELP_SET
CHAN_REGISTER_SYNTAX
CHAN_ACCESS_SYNTAX
CHAN_HELP_ACCESS
CHAN_HELP_SET
NICK_HELP_CONFIRM
CHAN_UNBAN_SYNTAX
CHAN_HELP_CMD_UNBAN
CHAN_HELP_UNBAN
CHAN_HELP_REGISTER
CHAN_HELP_DROP
CHAN_HELP_LEVELS
*** Del Strings:
CHAN_PASSWORD_IS
CHAN_SET_PASSWORD_FAILED
CHAN_PASSWORD_CHANGED
CHAN_IDENTIFY_SUCCEEDED
CHAN_IDENTIFY_FAILED
CHAN_HELP_IDENTIFY
CHAN_IDENTIFY_SYNTAX
CHAN_HELP_CMD_IDENTIFY
CHAN_LOGOUT_FOUNDER_FAILED
CHAN_LOGOUT_SUCCEDED
CHAN_LOGOUT_NOT_LOGGEDIN
CHAN_LOGOUT_ALL_SUCCEEDED
CHAN_SERVADMIN_HELP_LOGOUT
CHAN_HELP_LOGOUT
CHAN_LOGOUT_SERVADMIN_SYNTAX
CHAN_LOGOUT_SYNTAX
CHAN_HELP_CMD_LOGOUT
CHAN_GETPASS_UNAVAILABLE
CHAN_GETPASSWORD_IS
CHAN_SERVADMIN_HELP_GETPASS
CHAN_GETPASS_SYNTAX
CHAN_HELP_CMD_GETPASS
CHAN_SENDPASS_SUBJECT
CHAN_SENDPASS_HEAD
CHAN_SENDPASS_LINE_1
CHAN_SENDPASS_LINE_2
CHAN_SENDPASS_LINE_3
CHAN_SENDPASS_LINE_4
CHAN_SENDPASS_LINE_5
CHAN_SENDPASS_OK
CHAN_SENDPASS_UNAVAILABLE
CHAN_HELP_SENDPASS
CHAN_SENDPASS_SYNTAX
CHAN_HELP_CMD_SENDPASS
OPER_DEFCON_NO_CONF
Anope Version 1.9.1
--------------------
*** New Strings:
COMMAND_REQUIRES_PERM
COMMAND_IDENTIFY_REQUIRED
COMMAND_CANNOT_USE
COMMAND_CAN_USE
NICK_STATUS_REPLY
NICK_INFO_SERVICES_OPERTYPE
CHAN_LOGOUT_NOT_LOGGEDIN
CHAN_INVITE_ALREADY_IN
CHAN_INVITE_SUCCESS
CHAN_OP_SYNTAX
CHAN_HALFOP_SYNTAX
CHAN_VOICE_SYNTAX
CHAN_PROTECT_SYNTAX
CHAN_OWNER_SYNTAX
CHAN_DEOP_SYNTAX
CHAN_DEHALFOP_SYNTAX
CHAN_DEVOICE_SYNTAX
CHAN_DEPROTECT_SYNTAX
CHAN_DEOWNER_SYNTAX
CHAN_KICK_SYNTAX
CHAN_BAN_SYNTAX
MEMO_STAFF_SYNTAX
OPER_JUPE_INVALID_SERVER
*** Mod Strings:
NICK_LOGOUT_SERVICESADMIN
CHAN_STATUS_SYNTAX
CHAN_GETKEY_KEY
MEMO_SET_NOTIFY_SYNTAX
BOT_REASON_BADWORD
BOT_BOTLIST_EMPTY
OPER_IGNORE_SYNTAX
OPER_DEFCON_SYNTAX
OPER_HELP_EXCEPTION
OPER_HELP_SESSION
NEWS_LOGON_SYNTAX
NEWS_OPER_SYNTAX
NEWS_RANDOM_SYNTAX
NEWS_HELP_LOGON
NEWS_HELP_OPER
NEWS_HELP_RANDOM
NICK_HELP_STATUS
NICK_HELP_SENDPASS
NICK_SERVADMIN_HELP
NICK_SERVADMIN_HELP_LOGOUT
NICK_SERVADMIN_HELP_DROP
NICK_SERVADMIN_HELP_INFO
NICK_SERVADMIN_HELP_LIST
NICK_SERVADMIN_HELP_ALIST
NICK_SERVADMIN_HELP_GLIST
CHAN_HELP_SET_RESTRICTED
CHAN_HELP_OP
CHAN_HELP_DEOP
CHAN_HELP_VOICE
CHAN_HELP_DEVOICE
CHAN_HELP_HALFOP
CHAN_HELP_DEHALFOP
CHAN_HELP_PROTECT
CHAN_HELP_DEPROTECT
CHAN_HELP_OWNER
CHAN_HELP_DEOWNER
CHAN_HELP_KICK
CHAN_HELP_CLEAR
CHAN_HELP_GETKEY
CHAN_HELP_SENDPASS
CHAN_SERVADMIN_HELP
CHAN_SERVADMIN_HELP_LOGOUT
CHAN_SERVADMIN_HELP_DROP
CHAN_SERVADMIN_HELP_SET
CHAN_SERVADMIN_HELP_INFO
CHAN_SERVADMIN_HELP_LIST
MEMO_HELP_SET_NOTIFY
MEMO_HELP_STAFF
OPER_HELP_CMD_CHANKILL
OPER_HELP_STATS
OPER_HELP_IGNORE
OPER_HELP_UMODE
OPER_HELP_ULINE
OPER_HELP_SVSNICK
OPER_HELP_SET
BOT_HELP
BOT_SERVADMIN_HELP_BOT
BOT_SERVADMIN_HELP_SET
HOST_DELALL_SYNTAX
HOST_SET_SYNTAX
HOST_SETALL_SYNTAX
HOST_DEL_SYNTAX
*** Del Strings:
PERMISSION_DENIED
RAW_DISABLED
HELP_LIMIT_SERV_OPER
HELP_LIMIT_SERV_ADMIN
HELP_LIMIT_SERV_ROOT
HELP_LIMIT_IRC_OPER
HELP_LIMIT_HOST_SETTER
HELP_LIMIT_HOST_REMOVER
NICK_STATUS_0
NICK_STATUS_1
NICK_STATUS_2
NICK_STATUS_3
NICK_INFO_SERVICES_OPER
NICK_INFO_SERVICES_ADMIN
NICK_INFO_SERVICES_ROOT
CHAN_MUST_REGISTER_NICK
CHAN_MUST_IDENTIFY_NICK
OPER_ADMIN_SYNTAX
OPER_ADMIN_SKELETON
OPER_ADMIN_EXISTS
OPER_ADMIN_REACHED_LIMIT
OPER_ADMIN_ADDED
OPER_ADMIN_NOT_FOUND
OPER_ADMIN_NO_MATCH
OPER_ADMIN_DELETED
OPER_ADMIN_DELETED_ONE
OPER_ADMIN_DELETED_SEVERAL
OPER_ADMIN_LIST_EMPTY
OPER_ADMIN_LIST_HEADER
OPER_ADMIN_LIST_FORMAT
OPER_ADMIN_CLEAR
OPER_ADMIN_MOVED
OPER_OPER_SYNTAX
OPER_OPER_SKELETON
OPER_OPER_EXISTS
OPER_OPER_REACHED_LIMIT
OPER_OPER_ADDED
OPER_OPER_NOT_FOUND
OPER_OPER_NO_MATCH
OPER_OPER_DELETED
OPER_OPER_DELETED_ONE
OPER_OPER_DELETED_SEVERAL
OPER_OPER_LIST_EMPTY
OPER_OPER_LIST_HEADER
OPER_OPER_LIST_FORMAT
OPER_OPER_CLEAR
OPER_OPER_MOVED
OPER_SET_SQL_ON
OPER_SET_SQL_OFF
OPER_SET_SQL_ERROR
OPER_SET_SQL_ERROR_INIT
OPER_SET_SQL_ERROR_DISABLED
OPER_RAW_SYNTAX
HELP_HELP
HELP_HELP_BOT
HELP_HELP_HOST
OPER_HELP_CMD_OPER
OPER_HELP_CMD_ADMIN
OPER_HELP_OPER
OPER_HELP_ADMIN
OPER_HELP_SET_SQL
OPER_HELP_RAW
HOST_ID
HOST_NOT_REGGED
HOST_OFF_UNREAL
+14 -35
View File
@@ -32,8 +32,8 @@ Anope DefCon
The DefCon system is part of Anope's core,
The DefCon system has to be configured on your services.conf file to
be enabled. All directives are optional unless they depend on what
options you enable for each level. Look for the "DefCon configuration"
be enabled. The defcon module will not unload unless all non-optional
directives are set. Look for the defcon block
section on your services.conf file for more information.
Make sure you restart Anope after changing the DefCon configuration
@@ -43,40 +43,19 @@ Anope DefCon
Pre-defined DefCon actions:
No new channel registrations 1
No New Nick Registrations 2
No MLOCK changes 4
Force Chan Mode 8
Use Reduced Session Limit 16
KILL any new clients trying to connect 32
Services will ignore everyone but opers 64
Services will silently ignore everyone but opers 128
AKILL all new clients trying to connect 256
No new memos sent to block MemoServ attacks 512
These are the values used to determine each defcon setting, are set via:
DefCon1 XX
DefCon2 XX
DefCon3 XX
DefCon4 XX
To set the desired value, you simply add the value of the numbers together
and place that as your DefCon# setting. For instance:
Say you wish to set:
No Channel Registrations, No Nickname Registrations and Services Ignoring
everyone except for Operators. You would do this by:
1 + 2 + 128 (Each value listed above is added together)
Giving: 131
You would then place this as which ever Defcon setting you want:
No new channel registrations
No New Nick Registrations
No MLOCK changes
Force Chan Mode
Use Reduced Session Limit
KILL any new clients trying to connect
Services will ignore everyone but opers
Services will silently ignore everyone but opers
AKILL all new clients trying to connect
No new memos sent to block MemoServ attacks
DefCon1 131
The recommended default values are safe to use on any network.
Information regarding how to enable this for specific defcon levels can
be found in services.conf
4) Usage
+21 -395
View File
@@ -2,415 +2,41 @@ Anope Internal Events
---------------------
1) Intro
2) Complex Events
3) Triggered Events
4) Triggered Events List
2) Using Events
1) Introduction to Internal Events
Internal Events are setup to give module developers more information
about what the core is doing at different times. This information can
be as complex as data we are feeding to the uplink, to simple triggered
events such as the databases being saved. A list of triggered events
can be found below. Additional there is a module included with the core
events such as the databases being saved.
Additionally there is a module included with the core
which can provide some clue as to how to use the code in your modules.
The rest of this document assumes that you are used to writing modules.
2) Complex Events
2) Using Events
This type of events are based around what happens when we talk to the
IRCd, much like MESSAGE events that the IRCD sends to us. The events
are triggered when Anope writes to the ircd. To watch for these events
you must have some knowledge of how the IRCd command system works. In
our example we will trap for NICK events.
Anope is told about modules wanting to hook to events by the function
ModuleManager::Attach(EventName, Module*);, eg:
A) All functions most be formatted as:
ModuleManager::Attach(I_OnJoinChannel, this);
int functioname(char *source, int ac, char **av);
You can also specifcy an array of events:
B) In AnopeInit you must declare EvtMessage in some fashion, it is into
this variable that we will create the event handler. Here is what the
base AnopeInit should look like at this point:
int AnopeInit(int argc, char **argv)
{
EvtMessage *msg = NULL;
int status;
Implementation i[] = { I_OnJoinChannel, I_OnPartChannel };
ModuleManager::Attach(i, this, 2);
Where 2 is the number of events in the list
moduleAddAuthor(AUTHOR);
moduleAddVersion(VERSION);
return MOD_CONT;
}
You must then overload these functions in your main modules class.
The full list of functions and parameters are in modules.h. In this
case, you would be overloading OnJoinChannel() and OnPartChannel() like so:
Note that AUTHOR and VERSION should be defined above the AnopeInit
function, just like you should do with any module.
void OnJoinChannel(User *u, Channel *c) { }
void OnPartChannel(User *u, Channel *c) { }
C) Pass "createEventHandler" the name of the message in this case NICK,
and the function that was created in Step A. At this point you should
assign the return of "createEventHandler" to the EvtMessage variable.
Some of these events can be used to prevent or allow things to happen that
would normally not be allowed or denied. You can also use ModuleManager
(not explained here) to set control which order the modules are queried
(when multiple modules hook to the same event).
msg = createEventHandler("NICK", my_nick);
D) The Handler is not ready for use yet; now you must add it to the hash
with "moduleAddEventHandler". You will want to pass to this function
the return of "createEventHandler".
status = moduleAddEventHandler(msg);
It will return the same module error codes as adding a regular message,
which you can use to confirm it was added correctly.
E) With that setup in your function you will be passed 3 items. The source
most of the time this will be set to ServerName or NULL; consult our
IRCd documentation about how messages are formatted. AC is the count of
variables you will find in AV.
int my_nick(char *source, int ac, char **av)
{
alog("Internal Event - nick is %s",av[0]);
return MOD_CONT;
}
3) Triggered Events
These events also known as "event hooks" are internal events such as
expiring of nicks to the saving of databases.
A) All functions most be formatted as:
int functioname(int argc, char **argv);
B) In AnopeInit you must declare EvtHook in some fashion; it is into
this variable that we will create the event handler. Here is what
the base AnopeInit should look like at this point:
int AnopeInit(int argc, char **argv)
{
EvtHook *hook = NULL;
int status;
moduleAddAuthor(AUTHOR);
moduleAddVersion(VERSION);
return MOD_CONT;
}
C) Pass "createEventHook" the name of the event. In this case we are
going to hook to the saving of databases, "EVENT_DB_SAVING".
hook = createEventHook(EVENT_DB_SAVING, my_save);
D) The Handler is not ready for use yet; now you must add it to the hash
with "moduleAddEventHook". You will want to pass to this function the
return of "createEventHook"
status = moduleAddEventHook(hook);
It will return the same module error codes as adding a regular message,
which you can use to confirm it was added correctly.
E) With that setup in your function you will be passed 1 item. The message
is very simple; it could be as simple as a start, stop or message. In
the case of saving it has a start and stop.
int my_save(int argc, char **argv)
{
if (argc < 1) {
return MOD_CONT;
}
if (!stricmp(argv[0], EVENT_START)) {
alog("Saving the databases! has started");
} else {
alog("Saving the databases is complete");
}
return MOD_CONT;
}
4) Triggered Events List
Here's a list of all event hooks we currently offer, with a description
of what argument is being passed to the event functions for this type of
event. All arguments are plain-text strings (char *). The list is sorted
in alphabetical order.
Note that all events are emitted AFTER the action has taken place, so
any deleted nick/channel/etc won't exist anymore and any created one will
exist when your function is being run, unless noted otherwise.
Also note that EVENT_START and EVENT_STOP should not be matched with an
equal sign, but with string comparision. See the bundled events module for
an example on how to do this.
The arguments are given as av[0] for the first argument, av[1] for the
second argument, and so on. If av[0] and av[1] are given, the event has
two arguments, and argc should be 2.
EVENT_ACCESS_ADD
An user has been added to a channel access list.
av[0] Name of the channel the user has been added to.
av[1] The nickname of the user that has just added an entry to the
access list.
av[2] The nickname of the user that has been added to the access
list.
av[3] The level number the user has been added with.
EVENT_ACCESS_CHANGE
An user level has been changed on a channel access list.
av[0] Name of the channel the access list has been modified which.
av[1] The nickname of the user that has just modified the access
list of the channel.
av[2] The nickname of the user wich his access level has just been
modified.
av[3] The new access level for the user.
EVENT_ACCESS_CLEAR
A channel access list has been cleared.
av[0] Name of the channel the access list has been cleared of
av[1] The nickname of the user that has cleared the access list
EVENT_ACCESS_DEL
An user has been deleted of a channel access list.
av[0] Name of the channel the access entry has been deleted which.
av[1] The nickname of the user that has just deleted the access entry.
av[2] [OPTIONAL] The nickname of the user wich his access level has just
been removed. Not present if numbers were used (e.g. /cs access
del 7).
EVENT_BOT_ASSIGN
A BotServ bot has been assigned to a channel.
av[0] Name of the channel the bot has been assigned to.
av[1] The nickname of the bot that has been assigned to the channel.
EVENT_BOT_BAN
A BotServ bot has banned a user, e.g. kickers.
av[0] The nick of the user banned.
av[1] The Channel the user was banned from.
av[2] The mask that was banned.
EVENT_BOT_CHANGE
The properties of a BotServ bot have been changed.
av[0] The nickname of the bot involved.
EVENT_BOT_CREATE
A new BotServ bot has been created, and is ready to use.
av[0] The nickname of the newly created bot.
EVENT_BOT_DEL
A BotServ bot is being deleted from BotServ. This event is being sent
just before the actual deletion is performed.
av[0] The nickname of the bot being deleted.
EVENT_BOT_FANTASY
A fantasy command of the bot has been triggered. This event should be
used to create your own fantasy commands.
av[0] The fantasy command that has been triggered without leading '!'.
av[1] The nickname of the user that has triggered the fantasy
command.
av[2] The name of the channel the fantasy command has been triggered
on.
av[3] Contains any optional paramenters passed after the fantasy
command. If none are present, this will not exist, and argc will
will be 3.
EVENT_BOT_FANTASY_NO_ACCESS
A fantasy command of the bot has been triggered by someone without
access to BotServ FANTASY commands on the channel. This will NOT
trigger if someone with access has triggered a fantasy command; use
EVENT_BOT_FANTASY for those. Hook to both events to catch both event
triggers.
av[0] The fantasy command that has been triggered without leading '!'.
av[1] The nickname of the user that has triggered the fantasy
command.
av[2] The name of the channel the fantasy command has been triggered
on.
av[3] Contains any optional paramenters passed after the fantasy
command. If none are present, this will not exist, and argc will
will be 3.
EVENT_BOT_JOIN
A BotServ bot has joined a channel and opped itself.
av[0] The channel name the bot has just joined.
av[1] The nickname of the bot that has joined the channel.
EVENT_BOT_KICK
A BotServ bot has kicked a user from a channel.
av[0] The name of the user that has been kicked.
av[1] The name of the channel the user was kicked from.
av[2] The reason for the kick.
EVENT_BOT_UNASSIGN
A BotServ bot is being unassigned from a channel. This event is being
sent before the actual removing of the bot is done.
av[0] The channel name the bot has been unassigned from.
av[1] The nickname of the bot that has been unassigned.
EVENT_CHAN_DROP
A channel has been dropped and deleted.
av[0] The name of the channel that has been dropped.
EVENT_CHAN_EXPIRE
A channel has been expired and will be deleted. The event will be
emitted just before the actual channel deletion happens.
av[0] The name of the channel that has been expired.
EVENT_CHAN_FORBIDDEN
A channel has been forbidden (ChanServ FORBID).
av[0] The name of the channel that has been forbidden.
EVENT_CHAN_KICK
Someone has just been kicked from a channel.
av[0] The nick of the user that has been kicked.
av[1] The channel the user has been kicked from.
EVENT_CHAN_REGISTERED
A new channel has been registered.
av[0] The name of the channel that has been registered.
EVENT_CHAN_SUSPENDED
A channel has been suspended (ChanServ SUSPEND).
av[0] The name of the channel that has been suspended.
EVENT_CHAN_UNSUSPEND
A channel has been unsuspended (ChanServ UNSUSPEND).
av[0] The name of the channel that has been unsuspended.
EVENT_CHANGE_NICK
A user has just changed it's nick.
av[0] The new nickname of the user.
EVENT_CONNECT
This event is emitted when the connection to our uplink hub is being
made.
av[0] EVENT_START or EVENT_STOP, to indicate if it's emitted before
or after the connection has been made. EVENT_STOP is emitted
before our burst is being sent over the link.
EVENT_DB_EXPIRE
This event is emitted when the expiry routines for all things that can
expire in Anope are being run.
av[0] EVENT_START or EVENT_STOP, to indicate if it's being emitted
before or after the expiry routines have been run.
EVENT_DB_SAVING
This event is emitted when the databases are being saved.
av[0] EVENT_START or EVENT_STOP, to indicate if it's emitted before
or after the saving routines have been run.
EVENT_DB_BACKUP
This event is emitted when the databases are backed up.
av[0] EVENT_START when the backup commences, and EVENT_STOP when it
finishes.
EVENT_DEFCON_LEVEL
The DefCon level has just been changed. This event is emitted before
any DefCon-related action is taken. The internal DefConLevel has
already been raised at this point.
av[0] The new level of DefCon being invoked.
EVENT_GROUP
A user has grouped it's nickname to another user group.
av[0] The nickname of the user that joined the group.
EVENT_JOIN_CHANNEL
A user joins a channel.
av[0] EVENT_START or EVENT_STOP. EVENT_START when the user has passed
all access checks and is allowed to join, but has not yet
joined the channel. EVENT_STOP when the user has joined and all
needed modes are set etc.
av[1] The nickname of the user joining the channel.
av[2] The name of the channel the user has joined.
EVENT_NEWNICK
A new user has been introduced on the network.
av[0] The nickname of the newly introduced user.
EVENT_NICK_DROPPED
A user's nick has just been dropped. Note that the nickname information
has already been deleted!
av[0] The nickname of the user that has just been dropped.
EVENT_NICK_EXPIRE
A user's nick has just expired. Note that, as with EVENT_NICK_DROPPED,
the nickname information has already been deleted!
av[0] The nickname of the user that has just expired.
EVENT_NICK_FORBIDDEN
A user's nick has just been forbidden.
av[0] The nickname that has just been forbidden.
EVENT_NICK_IDENTIFY
A user has just identified for it's nickname with NickServ.
av[0] The nickname of the user that just identified.
EVENT_NICK_LOGOUT
A user has just (been) logged out.
av[0] The nickname of the user that has (been) logged out.
EVENT_NICK_REGISTERED
A new user has just registered it's nickname. This event is being
emitted when the registration is completed, but the user modes have not
yet been set.
av[0] The nickname of the newly registered user.
EVENT_NICK_SUSPENDED
A user's nick has just been suspended.
av[0] The nickname that has just been suspended.
EVENT_NICK_UNSUSPEND
A user's nick has just been unsuspended.
av[0] The nickname that has just been unsuspended.
EVENT_PART_CHANNEL
A user parts a channel.
av[0] EVENT_START or EVENT_STOP. EVENT_START when the user is about
to be removed from the channel internally, EVENT_STOP when
this has been done.
av[1] The nickname of the user parting the channel.
av[2] The name of the channel the user has parted.
av[3] The reason the user parted the channel, this is not always sent
so check the count to make sure it was passed. (ac == 4)
EVENT_RELOAD
This event is emitted after the configuration file has been reloaded.
av[0] Always EVENT_START.
EVENT_RESTART
This event is emitted before the services are being restarted.
av[0] Always EVENT_START.
EVENT_SERVER_CONNECT
A new server has just connected to the network.
av[0] The name of the new server.
EVENT_SERVER_SQUIT
A server has sent an SQUIT and is about to be removed from the
network. This event is being sent before the server is actually
removed from the network.
av[0] The name of the server that is being removed.
EVENT_SHUTDOWN
This event is emitted when Anope is being shut down.
av[0] EVENT_START or EVENT_STOP, to indicate where in the process of
restarting the core is. With EVENT_START, services are still
fully online and operating. With EVENT_STOP, every internal
clean up has been done already, and the SQUIT has been sent;
the only thing done after emitting the event is closing the
socket to the uplink hub.
EVENT_SIGNAL
This event is emitted when Anope is quitting because of a signal it
received.
av[0] The quit message that will be sent with the SQUIT for this
shutdown.
EVENT_TOPIC_UPDATED
A channel topic has been succesfully updated. Note that this event is
only emitted if the new topic has been fully accepted and set by the
Anope core.
av[0] The name of the channel involved.
av[1] The new topic set on the channel.
EVENT_USER_LOGOFF
A user has left the network. This event is emitted before the internal
removal is performed, so the user still exists internally.
av[0] The nickname of the user leaving the network.
+378 -601
View File
@@ -1,601 +1,378 @@
How To Add IRCd Support
-----------------------
1) Files to Edit
2) Modifing the Header File
3) The Code
4) Modes
5) Functions / Events
6) CAPAB/PROTOCTL
1) Files to Edit
When preparing to add support to Anope for your ircd, you need to edit
the following files.
A) Make a copy of the .c and .h file of the IRCd that matches the ircd
that you are attempting to add support for best.
B) Make a backup copy of include/services.h, include/sysconf.h.in
C) Make a backup copy of Config and configure.in
First step in this process is to rename the .c and .h file after the IRCd
that you are going to be adding support for. Its recommended that you come
up with a name that is clear and easy to understand.
Now that you have the files that you will need to create your own ircd
support, starting with Config. This file is a shell script file; scroll
down until you find the list of ircs for the user to select. Indicate
the based ircd version which is supported such as a series 1.x or 2.2.x,
placing in the comment side an exact version that the support is for or
"experimental" if you are not the ircd developer. The next step is to
decide how the IRCd will be defined, following the existing examples edit
'IRCTYPE_DEF="IRC_RATBOX"' to be the descriptive define for your ircd.
With the Config file ready to go, edit configure.in and find in there the
reference to --with-ircd. You should see the various other ircds, and
you will want to add yours in there using the same IRC_ name you came up
with above. Important in this step is to make sure that you set the
IRCDFILE to the name of the .c file you set in step 1. Once you have the
configure.in created you can remove the old configure and at the command
prompt type "autconf"; this will generate the new configure file.
Getting close to actually modify code. Open sysconf.h.in and add two
lines for your given ircd, which is similar to this:
/* "First IRCD type" */
#undef IRC_RATBOX
Open services.h and add a line with the rest of the ircd include files to
match the name of the .h file you set in step 1.
#include "ratbox.h"
Taking the .c and .h file open them and replace the #ifdef IRC_* with the
IRC_ name you set in step two. Ensure that the code comments at the top
of the file match the ircd that the code will be for.
You are now ready to start getting into the code.
2) Modifying the Header File
Now that you have gotten past the first part of the creation process, you
are into the code. This part is the harder and more complex part. You
will need a general understanding of C code to continue. Here are the
step by step instructions required to make this work.
Open the .h file and find the section of code with
#define PROTECT_SET_MODE "+"
#define PROTECT_UNSET_MODE "-"
#define CS_CMD_PROTECT "PROTECT"
#define CS_CMD_DEPROTECT "DEPROTECT"
#define FANT_PROTECT_ADD "!protect"
#define FANT_PROTECT_DEL "!deprotect"
#define LEVEL_PROTECT_WORD "AUTOPROTECT"
#define LEVELINFO_PROTECT_WORD "PROTECT"
#define LEVELINFO_PROTECTME_WORD "PROTECTME"
If the ircd supports a protective/admin (not owner) mode, set the
PROTECT_SET_MODE and PROTECT_UNSET_MODE to be that mode. On most ircds
it's usermode "a" so you will be setting it to "+a" and "-a". The next
two are based more on what this mode is called. When you message ChanServ
to get this mode, this is the command you will be using. After this are
the fantasy commands which can be used in channel to get these modes. The
next three relate to the ACCESS LEVEL list system. Again these are the
words to gain these levels in the ACCESS LEVEL system. If your ircd does
not have these functions, leave them at what ever value is currently set;
the core code will ignore the request of the user.
Now that this is set, you can define the MODES. All user modes are stored
with UMODE_ followed by a letter matching the modes case; be careful to
use the correct case as this will make it clear when you setup MODES in
the .c in a few. Use hex values for the modes so starting at 0x00000001
to 0x8000000. In most cases you want to list all modes. If you run out of
values look at removing any modes that do not impact services.
Channel modes are done much like user modes, with the exception that
bans, exceptions, invites, and modes that are applied to a user such as
op and voice are not defined here. All other modes are defined in here.
Again be clear and use the correct case and use hex values as done with
user modes.
Finally we come to DEFAULT_MLOCK; this is the mode that services will set
by default on channels when they are registered. In general you want this
to be what is acceptable by the ircd; in most cases this is "+nt"
3) The Code
Here is where the code of the .c file comes in. Be prepared to spend at
least an hour, if not longer, going over the code and getting it right;
Especially if you are setting up an ircd that is completely different
than the one you used as a base. This section covers the majority of the
code that is in use.
The first bit of code you will face is:
const char version_protocol[] = "Ratbox IRCD";
This the protocol name which will appear in various places; especially
when you do -version at the command prompt, this is where you state the
server name. The version is not always needed unless you are showing that
the support is for one branch of a ircd family, such as Unreal 3.1 and
Unreal 3.2.
Once you have decided on this little piece of code, you will come to
flood mode characters being used for setting and removing. If your IRCd
does not support flood modes, you can just use ""; we will be setting if
your IRCD supports flooding or not in a little bit.
const char flood_mode_char_set[] = "+f";
const char flood_mode_char_remove[] = "-f";
The next task that you will face is setting whether the IRCD sends time
stamps on modes but does not tell us that it will do so. If it does, set
UseTSMODE to 1; if it does not set it to be 0. If you're not sure refer
to your IRCd's documentation on how MODE is sent.
int UseTSMODE = 0;
Now you've come to the part where you setup your ircd. There are two
structs which hold this information; This allows you to quickly setup
your specific ircd.
IRCDVar ircd[] = { }
This struct contains your basic IRCd functions. Your base source file has
the list of all available variables; note that you should not swap any
around, or you will break stuff. Here is a brief description of the usage
of each.
1) Name: This member tells Anope about the IRCD's name. It may contain
text about it's name and version. This is used to identify the
build on startup.
2) NickServ Mode: This is the user mode set by Anope on NickServ.
Normally you want this to be some form of oper flag,
or a services flag.
3) ChanServ Mode: This is the user mode set by Anope on ChanServ.
Normally you want this to be some form of oper flag,
or a services flag.
4) MemoServ Mode: This is the user mode set by Anope on MemoServ.
Normally you want this to be some form of oper flag,
or a services flag.
5) HostServ Mode: This is the user mode set by Anope on HostServ.
Normally you want this to be some form of oper flag,
or a services flag. Note that if your ircd does not
support HostServ, you can safely make this NULL or +,
as there is a check before bringing HostServ online.
6) OperServ Mode: This is the user mode set by Anope on OperServ.
Normally you want this to be some form of oper flag,
or a services flag.
7) BotServ Mode: This is the user mode set by Anope on BotServ.
Normally you want this to be some form of oper flag,
or a services flag.
8) HelpServ Mode: This is the user mode set by Anope on HelpServ.
Normally you want this to be some form of oper flag,
or a services flag.
9) DevNull Mode: This is the user mode set by Anope on DevNull.
Normally you want this to be some form of oper flag,
or a services flag.
10) Global Mode: This is the user mode set by Anope on Global.
Normally you want this to be some form of oper flag,
or a services flag.
11) NickServ Alias Mode: This is the user mode set by Anope on the alias
of NickServ. Normally you want this to be some
form of oper flag, or a services flag.
12) ChanServ Alias Mode: This is the user mode set by Anope on the alias
of ChanServ. Normally you want this to be some
form of oper flag, or a services flag.
13) MemoServ Alias Mode: This is the user mode set by Anope on the alias
of MemoServ. Normally you want this to be some
form of oper flag, or a services flag.
14) HostServ Alias Mode: This is the user mode set by Anope on the alias
of MemoServ. Normally you want this to be some
form of oper flag, or a services flag. Note that
if your ircd does not support HostServ, you can
safely make this NULL or +, as there is a check
before bringing HostServ online.
15) OperServ Alias Mode: This is the user mode set by Anope on the alias
of OperServ. Normally you want this to be some
form of oper flag, or a services flag.
16) BotServ Alias Mode: This is the user mode set by Anope on the alias
of BotServ. Normally you want this to be some
form of oper flag, or a services flag.
17) HelpServ Alias Mode: This is the user mode set by Anope on the alias
of HelpServ. Normally you want this to be some
form of oper flag, or a services flag.
18) DevNull Alias Mode: This is the user mode set by Anope on the alias
of DevNull. Normally you want this to be some
form of oper flag, or a services flag.
19) Global Alias Mode: This is the user mode set by Anope on the alias
of Global. Normally you want this to be some form
of oper flag, or a services flag.
20) BotServ Bots Mode: This is the user mode set by Anope on all BotServ
bots. Normally you want this to be a some form of
service or bot flag; you can use + for no mode at
all.
21) Max Channelmode Symbols: This is the total number of possible channel
modes that can appear before a nick. Do
remember to count each possible mode, so +ov
is 2.
22) Modes to Remove: This is every mode that Anope should remove when
stripping channel modes.
23) Channelmode for bots: When a BotServ bot joins a channel, this is the
mode set on them. Normally you will want them
opped (+o), and protected (+a) on IRCd's that
support it.
24) SVSNICK: Can the ircd use SVSNICK to change some ones nick? Otherwise,
KILL is used. Use 1 for yes, 0 for no.
25) VHOST: Can a user's host be changed on the fly? Enabling this allow
HostServ online. Use 1 for yes, 0 for no.
26) OWNER: Has a channel umode for being the channel owner. For example,
UnrealIRCd has mode +q. Use 1 for yes, 0 for no.
27) OWNER MODE SET: What mode to set to make someone the owner. If the
IRCd doesn't support owners, set this to NULL.
28) OWNER MODE UNSET: What mode to unset to take away someone's channel
owner status. If the IRCd doesn't support owners,
set this to NULL.
29) ADMIN MODE SET: What mode to set to make someone a channel admin.
If the IRCd dosn't support admins, set to NULL.
30) ADMIN MODE UNSET: What mode to unset to take away channel admin.
If the IRCd dosn't support admins, set to NULL.
31) Mode on Nick Register: What mode to give users when they register
with NickServ. If your ircd doesn't set expect
a mode to be set on registration, you should
set this to NULL.
32) Mode on Nick Unregister: What mode to set give users when they cancel
their registration with NickServ. If your
IRCd doesn't set a mode for registered users
you should set this to NULL.
33) Mode on Nick Change: What mode to give users when they change their
nick. If your ircd doesn't set a mode, you
should set this to NULL.
34) SGLINE: Does the IRCd support realname (geocs) bans? Use 1 for yes,
0 for no.
35) SQLINE: Does the IRCd support nick bans? Use 1 for yes, 0 for no.
36) SZLINE: Does the IRCd support SZLINES? Use 1 for yes, 0 for no.
37) HALFOP: Is channel mode +h for halfop supported by the IRCd? Use 1 for
yes, 0 for no.
38) Number of Server Args: When an IRCd connects, this is the number of
parameters that are passed.
39) Join to Set: Services must join a channel to set any modes on that
channel. Use 1 for yes, 0 for no.
40) Join to Message: Services must join a channel to send any message to
that channel (cannot override +n). Use 1 for yes,
0 for no.
41) Exceptions: Support for channel exceptions (mode +e). Use 1 for yes,
0 for no.
42) TS Topic Forward: Some IRCd's (like UnrealIRCd) like their topic TS
set forward by +1. Use 1 for yes, 0 for no.
43) TS Topic Backward: Some IRCd's (mainly older DreamForge-like ones)
like their topic TS set back by -1. Use 1 for yes,
0 for no.
44) Protected Umode: UMODE_ define that defines the protected usermod.
Use 0 for no support, or enter the UMODE_ define.
45) Admin: Support for channel admins (Mainly used by UltimateIRCd). Use
1 for yes, 0 for no.
46) SQline Channels: The IRCd's supports banning channel names via
SQLINES. Use 1 for yes, 0 for no.
47) Quit On Kill: When we (SVS)KILL a user, does the IRCd send back a
QUIT message for that user? Use 1 for yes, 0 for no.
48) SVSMODE -b: We can use SVSMODE to unban hosts from a channel. Use
1 for yes, 0 for no.
49) Protect: Support for channel protect (mode +a, mainly being used by
UnrealIRCd and ViagraIRCd). Use 1 for yes, 0 for no.
50) Reverse: We can do a reverse check when unbanning. For use with
DreamForge based IRCd's. Use 1 for yes, 0 for no.
51) Register Channels: Supports sending a channelmode for registered
channels. Use 1 for yes, 0 for no.
52) Registered Mode: Channelmode to set on registered channels, see the
option above. Use 1 for yes, 0 for no.
53) vIdent: Support for including a user's ident in their vHost. Use
1 for yes, 0 for no.
54) SVSHOLD: Support for temporarily 'holding' a nick, instead of using
a nick enforcer client. Use 1 for yes, 0 for no.
55) TS on MODE: We need to send a timestamp when modes are being changed.
Use 1 for yes, 0 for no.
56) NICKIP: The IP address of new users is being sent along with their
hostname when new users are being introduced on the network.
Use 1 for yes, 0 for no.
57) Umode: We can use OperServ to change a user's mode. Use 1 for yes,
0 for no.
58) O:LINE: We can use OperServ to give some user a temporary O:LINE.
Use 1 for yes, 0 for no.
59) Vhost On Nick: On NICK the IRCd sends the VHOST. Use 1 for yes,
0 for no.
60) Change Realname: Change real name. Use 1 for yes, 0 for no.
61) Extra Help: If the IRCd has more help for functions in ChanServ than
the default help, you should put the language string
identifier here. Use 0 for no extra help.
62) No Knock: CMODE_ that defines NO KNOCK. Use 0 for no support.
63) Admin Only: CMODE_ that defines Admin Only. Use 0 for no support.
64) Default MLock: Default channelmodes for MLOCK. Use 0 for no modes.
65) Vhost Umode: UMODE_ that indicates if the user currently has a vHost.
Use 0 for no support.
66) Flood Mode: The IRCd has a channelmode for blocking floods. Use 1 for
yes, 0 for no.
67) Link Mode: The IRCd has a channelmode for linking a channel to some
other channel. Use 1 for yes, 0 for no.
68) CMode F: CMODE_ that defines flood mode. Use 0 for no support.
69) CMode L: CMODE_ that defines link mode. Use 0 for no support.
70) Check Nick ID: Should we check if a user should remain identified when
changing their nick? This is for IRCd's that remove
their registered-user mode when someone changes their
nick (like Bahamut does).
Use 1 for yes, 0 for no.
71) No Knock Requires +i: Does the No Knock channel mode require invite
only channels? Use 1 for yes, 0 for no.
72) Chan Modes: If sent in CAPAB/PROTOCOL, we store it in here. This is
NULL by default.
73) Tokens: Can we use tokens to talk to the IRCd? Use 1 for yes,
0 for no.
74) Token Case Senstive: Are the IRCd's TOKENS/COMMANDS case sensitive?
Use 1 for yes, 0 for no.
75) base64 SJOIN TS: Are the timestamps sent with a SJOIN in base64? Use
1 for yes, 0 for no.
76) Supports +I: Does the IRCd support channelmode +I? Use 1 for yes,
0 for no.
77) SJOIN Ban Char: Character used to identify bans. Use ''.
78) SJOIN Except Char: Character used to identify exceptions. use ''.
79) SVSMODE UCMODE: Can we clear user channel modes with SVSMODE? Use
1 for yes, 0 for no.
80) SGline Enforce: Does the IRCd enforce SGLINES for us or do we need to
do so? Use 1 for yes, 0 for no.
81) Vhost Character: The character used to represent the vHost mode, if
this is supported by the IRCd.
82) TS6: Does the IRCd support TS6? Use 1 for yes, 0 for no.
83) UMode +h: Does the IRCd support usermode +h for helpers?
Use 1 for yes, 0 for no.
84) P10: Is this IRCd a P10-style IRCd? Use 1 for yes, 0 for no.
85) Character Set: Unreal passes the character set during PROTOCTL,
the value is stored here. Set this NULL to start.
86) Reports sync: Does the IRCd report when it's in sync (or done bursting,
depending on how you want to say it)? Remember to set
the sync state for servers correctly if it does.
Use 1 for yes, 0 for no.
87) Channel CIDR: Set to 1 if channel bans, excepts and invites
support CIDR masks. Expected syntax: *!*@ip/mask.
When set to 1, anope will only parse strict CIDR masks.
IRCd's that try to correct invalid CIDR's (like nefarious)
will need a custom implementation in the core.
Contact the anope Dev Team if this is the case.
Set to 0 if CIDR's are not supported by your IRCd.
So we've had this long list. Now there's a second struct to fill. This
struct isn't as long as the previous one though, so we'll handle it quite
quick compared to the previous one.
IRCDCAPAB ircdcap[] = { }
This struct is based on the CAPAB defines. You should review the CAPAB
table below to see how this should be done.
Define Table
--------------------------------------------------------------------------
Define | Value | Token | Description
----------------|------------|-----------|--------------------------------
CAPAB_NOQUIT | 0x00000001 | NOQUIT | NOQUIT protocol support
CAPAB_TSMODE | 0x00000002 | TS | Chanmodes are timestamped
CAPAB_UNCONNECT | 0x00000004 | UNCONNECT | UNCONNECT protocol support
CAPAB_NICKIP | 0x00000008 | NICKIP | IP sent in the NICK line
CAPAB_NSJOIN | 0x00000010 | SSJOIN | Smart SJOIN support
CAPAB_ZIP | 0x00000020 | ZIP | Support for gzipped links
CAPAB_BURST | 0x00000040 | BURST | Supports BURST command
CAPAB_TS3 | 0x00000080 | TS3 | Support for TS3 protocol
CAPAB_TS5 | 0x00000100 | TS5 | Support for TS5 protocol
CAPAB_DKEY | 0x00000200 | DKEY | DH-Key exchange using DKEY
CAPAB_DOZIP | 0x00000400 | ZIP | Link traffic will be gzipped
CAPAB_DODKEY | 0x00000800 | DKEY | Do DKEY with this link
CAPAB_QS | 0x00001000 | QS | Supports quit storm removal
CAPAB_SCS | 0x00002000 | SCS | String Cache System support
CAPAB_PT4 | 0x00004000 | PT4 | Support for PT4 protocol
CAPAB_UID | 0x00008000 | UID | Support for UIDs
CAPAB_KNOCK | 0x00010000 | KNOCK | Supports KNOCK
CAPAB_CLIENT | 0x00020000 | CLIENT | Supports CLIENT
CAPAB_IPV6 | 0x00040000 | IPV6 | Support for IPv6 addresses
CAPAB_SSJ5 | 0x00080000 | SSJ5 | Smart Join protocol 5 support
CAPAB_SN2 | 0x00100000 | SN2 | Support for SN2 protocol
CAPAB_VHOST | 0x00200000 | VHOST | Supports VHOST protocol
CAPAB_TOKEN | 0x00400000 | TOKEN | Supports s2s tokens
CAPAB_SSJ3 | 0x00800000 | SSJ3 | Smart Join protocol 3 support
CAPAB_NICK2 | 0x01000000 | NICK2 | Support for extended NICK (v2)
CAPAB_UMODE2 | 0x02000000 | UMODE2 | Supports UMODE2 command
CAPAB_VL | 0x04000000 | VL | VLine information in info field
CAPAB_TLKEXT | 0x08000000 | TLKEXT | Not 8, but 10 params in TKL's
CAPAB_CHANMODE | 0x10000000 | CHANMODE | Channel modes are passed here
CAPAB_SJB64 | 0x20000000 | SJB64 | SJOIN timestamps are base64 encoded
CAPAB_NICKCHARS | 0x40000000 | NICKCHARS | Character set used by the IRCD for nicks
4) Modes
The next thing you should do is defining the user modes. You will want to
have your .h file handy for this part.
unsigned long umodes[128] = { }
This array goes from 0 to 127 in the ASCII character set. Insert the user
modes at the slot where the mode fits. If you are adding a the user mode
of +i find the 105th (ASCII code of 'i') character slot in the array, and
place the UMODE_i into this slot. Your base .c file should contain a good
start for this, as well as a little help locating the characters.
The following mode set is for the channel symbols. During a SJOIN event
the modes are sent usually before the nick. These normally are @, +, %
etc.. depending on the ircd. Starting at ASCII 0 and running to 127.
Replace the 0 with the character (o = @, h = %) for the given mode. In the
case of halfop which is usually sent as % replace the 37th character with
'h', do this until all modes that are possible be received in this manor
have been inserted into the array.
Now that you have that complete, the following array is ready to be dealt
with. This is the cmmodes array, like the others it is a ASCII array
starting at 0 and going to 127. However at the given letter you will want
to enter the add, and delete function for the given mode. In the case of
bans (+b) there is add_ban, and del_ban. Anope provides functions for
bans, exceptions and invites, should your ircd have more then these please
contact Anope to discuss what can be done to add this mode.
5) Functions and Events
A brief word about functions and events. All events are captured using:
void moduleAddIRCDMsgs(void)
{
m = createMessage("NICK", anope_event_nick);
addCoreMessage(IRCD,m);
}
Each event should have a event handler if its important enough to be
processed by services. All event functions should be formed like this:
int anope_event_capab(char *source, int ac, char **av)
{
return MOD_CONT;
}
They will receive the source; this can be NULL at times depending on the
event. Next, ac is the number of arguments that are in the event, and av
holds the values for each; so av[0] is the first variable, av[1] will be
the second one, and so on. Events are likely to pass to various upper
level event handlers; see the previous ircd source for how they handle
these events.
All commands are formed like this:
void anope_cmd_svsnoop(char *server, int set)
{
send_cmd(NULL, "SVSNOOP %s %s", server, (set ? "+" : "-"));
}
They may take any number of arguments, depending on the command. They
should eventually come to a send_cmd(); this root function is how
commands are sent to the IRCd.
6) CAPAB/PROTOCTL
Most IRCD send a CAPAB or PROTOCTL line so that they can work out what
the other end of the connection is capable of doing. Anope has a function
to read these lines and set itself up to to handle these events better.
When adding support for your ircd, take the following steps.
1) In the ircd.c find the function anope_cmd_capab(); this function will
send the CAPAB/PROTOCTL line (consult your ircd documentation for
which to send). In a single line type in the tokens that anope must
send. Here is an example of Hybrid's capab line:
/* CAPAB */
void anope_cmd_capab()
{
send_cmd(NULL, "CAPAB TS5 EX IE HOPS HUB AOPS");
}
2) In the ircd.h file make sure to place the defines (see below) that
match your IRCd's tokens; only use the ones that matter to your ircd.
Should your IRCd add new features not covered in the defined, please
contact the Anope Dev team before doing so. See README for information
on how to contact the Anope team.
3) Ensure that the CAPAB/PROTOCTL event his handled correctly.
A) In the function "moduleAddIRCDMsgs" making sure that you have the
following two lines:
m = createMessage("CAPAB", anope_event_capab);
addCoreMessage(IRCD,m);
B) Add the function to handle the event
int anope_event_capab(char *source, int ac, char **av)
{
capab_parse(ac, av);
return MOD_CONT;
}
This function should call the capab_parse function which parses
the received CAPAB/PROTOCTL line.
How To Add IRCd Support
-----------------------
1) Files to Edit
2) The Code
3) The IRCDVar struct
4) Modes
5) Functions / Events
6) CAPAB/PROTOCTL
7) IRCDProto Class
1) Files to Edit
When preparing to add supprt to Anope for your IRCd, you need to edit
the following files
A) Make a copy of the .cpp file of the IRCd that matches the IRCd that
you are attempting to add support for best.
B) Add your IRCd into the supported IRCds in example.conf
2) The Code
Here is where the code of the .cpp file comes in. Be prepared to spend at
least an hour, if not longer, going over the code and getting it right;
Especially if you are setting up an ircd that is completely different
than the one you used as a base. This section covers the majority of the
code that is in use.
The first bit of code you will face is the IRCDVar structure, which is
explained in depth in the next section.
Scroll down to the bottom and find the class for this module and rename it
to something reflecting your IRCd name. Find the function:
pmodule_ircd_version("Unreal 3.2+");
This is the protocol name which will appear in various places; especially
when you do -version at the command prompt, this is where you state the
server name. The version is not always needed unless you are showing that
the support is for one branch of a ircd family, such as Unreal 3.1 and
Unreal 3.2.
The next task that you will face is setting whether the IRCD sends time
stamps on modes but does not tell us that it will do so. If it does, set
UseTSMODE to 1; if it does not set it to be 0. If you're not sure refer
to your IRCd's documentation on how MODE is sent.
pmodule_ircd_useTSMode(0);
3) The IRCDVar struct
Now you've come to the part where you setup your ircd. There are two
structs which hold this information; This allows you to quickly setup
your specific ircd.
IRCDVar myIrcd[] = { };
This struct contains your basic IRCd functions. Your base source file has
the list of all available variables; note that you should not swap any
around, or you will break stuff. Here is a brief description of the usage
of each.
1) Name: This member tells Anope about the IRCD's name. It may contain
text about it's name and version. This is used to identify the
build on startup.
2) Pseudo Client Mode: This is the user mode set by Anope on all BotServ
bots. Normally you want this to be a some form of
service or bot flag; you can use + for no mode at
all.
3) Max Channelmode Symbols: This is the total number of possible channel
modes that can appear before a nick. Do
remember to count each possible mode, so +ov
is 2.
4) Channelmode for bots: When a BotServ bot joins a channel, this is the
mode set on them. Normally you will want them
opped (+o), and protected (+a) on IRCd's that
support it.
5) SVSNICK: Can the ircd use SVSNICK to change some ones nick? Otherwise,
KILL is used. Use 1 for yes, 0 for no.
6) VHOST: Can a user's host be changed on the fly? Enabling this allow
HostServ online. Use 1 for yes, 0 for no.
7) SGLINE: Does the IRCd support realname (geocs) bans? Use 1 for yes,
0 for no.
8) SQLINE: Does the IRCd support nick bans? Use 1 for yes, 0 for no.
9) SZLINE: Does the IRCd support SZLINES? Use 1 for yes, 0 for no.
10) Number of Server Args: When an IRCd connects, this is the number of
parameters that are passed.
11) Join to Set: Services must join a channel to set any modes on that
channel. Use 1 for yes, 0 for no.
12) Join to Message: Services must join a channel to send any message to
that channel (cannot override +n). Use 1 for yes,
0 for no.
13) TS Topic Forward: Some IRCd's (like UnrealIRCd) like their topic TS
set forward by +1. Use 1 for yes, 0 for no.
14) TS Topic Backward: Some IRCd's (mainly older DreamForge-like ones)
like their topic TS set back by -1. Use 1 for yes,
0 for no.
15) SQline Channels: The IRCd's supports banning channel names via
SQLINES. Use 1 for yes, 0 for no.
16) Quit On Kill: When we (SVS)KILL a user, does the IRCd send back a
QUIT message for that user? Use 1 for yes, 0 for no.
17) SVSMODE -b: We can use SVSMODE to unban hosts from a channel. Use
1 for yes, 0 for no.
18) Reverse: We can do a reverse check when unbanning. For use with
DreamForge based IRCd's. Use 1 for yes, 0 for no.
19) vIdent: Support for including a user's ident in their vHost. Use
1 for yes, 0 for no.
20) SVSHOLD: Support for temporarily 'holding' a nick, instead of using
a nick enforcer client. Use 1 for yes, 0 for no.
21) TS on MODE: We need to send a timestamp when modes are being changed.
Use 1 for yes, 0 for no.
22) NICKIP: The IP address of new users is being sent along with their
hostname when new users are being introduced on the network.
Use 1 for yes, 0 for no.
23) OMODE: We can use OperServ to give some user a temporary O:LINE.
Use 1 for yes, 0 for no.
24) Umode: We can use OperServ to change a user's mode. Use 1 for yes,
0 for no.
25) Vhost On Nick: On NICK the IRCd sends the VHOST. Use 1 for yes,
0 for no.
26) Change Realname: Change real name. Use 1 for yes, 0 for no.
27) Check Nick ID: Should we check if a user should remain identified when
changing their nick? This is for IRCd's that remove
their registered-user mode when someone changes their
nick (like Bahamut does).
Use 1 for yes, 0 for no.
28) No Knock Requires +i: Does the No Knock channel mode require invite
only channels? Use 1 for yes, 0 for no.
29) Chan Modes: If sent in CAPAB/PROTOCOL, we store it in here. This is
NULL by default.
30) Tokens: Can we use tokens to talk to the IRCd? Use 1 for yes,
0 for no.
31) base64 SJOIN TS: Are the timestamps sent with a SJOIN in base64? Use
1 for yes, 0 for no.
32) SJOIN Ban Char: Character used to identify bans. Use ''.
33) SJOIN Except Char: Character used to identify exceptions. Use ''.
34) SJOIN Invite char: Character used to idenfity invexs. Use ''.
35) SVSMODE UCMODE: Can we clear user channel modes with SVSMODE? Use
1 for yes, 0 for no.
36) SGline Enforce: Does the IRCd enforce SGLINES for us or do we need to
do so? Use 1 for yes, 0 for no.
37) Vhost Character: The character used to represent the vHost mode, if
this is supported by the IRCd.
38) TS6: Does the IRCd support TS6? Use 1 for yes, 0 for no.
39) P10: Is this IRCd a P10-style IRCd? Use 1 for yes, 0 for no.
40) Character Set: Unreal passes the character set during PROTOCTL,
the value is stored here. Set this NULL to start.
41) Channel CIDR: Set to 1 if channel bans, excepts and invites
support CIDR masks. Expected syntax: *!*@ip/mask.
When set to 1, anope will only parse strict CIDR masks.
IRCd's that try to correct invalid CIDR's (like nefarious)
will need a custom implementation in the core.
Contact the anope Dev Team if this is the case.
Set to 0 if CIDR's are not supported by your IRCd.
42) Global TLD Prefix: Prefix used to send global messages, should probably
be "$"
43) Max Modes: The max number of mode changes we can send in one line
4) Modes
Anope is told about modes in the moduleAddModes() function.
For the most part, the syntax for adding channel and user modes are:
ModeManager::AddUserMode(new UserMode(UMODE_NETADMIN, 'N'));
Where 'N' is the char for the mode, and UMODE_NETADMIN shows what the
mode does. Or:
ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCOLOR, 'c'));
Where 'c' is the char for the mode and CMODE_BLOCKCOLOR shows what
the mode does
A full list of valid mode names for the second param can be found
in services.h in the enum for ChannelModeName and UserModeName
If necessary, you can add additional modes to this list.
Adding simple modes with parameters is similar, instead adding a
'new ChannelMode', use 'new ChannelModeParam', set the third optional
arg of ChannelModeParam to false if the param should NOT be sent when unsetting
it. Eg:
ModeManager::AddChannelMode(new ChannelModeParam(CMODE_JOINFLOOD, 'j', true));
Anope will internally track the params, and they can be retrieved through
Channel::GetParam();
If you want to make param validity checking for a mode, you must create a new
class which inherits from ChannelModeParam and overload the IsValid function.
Modes CMODE_OPERONLY, CMODE_ADMINONLY, and CMODE_REGISTERED already exist
internally as classes, to overload the CanSet function to disable non opers
from mlocking (or in CMODE_REGISTERED's case, anyone) from setting them.
This should be added like:
ModeManager::AddChannelMode(new ChannelModeOper('O'));
The CMODE_FLOOD param also has its own class, but due to the wide range of
valid parameters accepted across IRCds, your protocol module MUST have the
IsValid function for this.
bool ChannelModeFlood::IsValid(const std::string &value) { }
5) Functions and Events
A brief word about functions and events. All events are captured using:
void moduleAddIRCDMsgs(void)
{
m = createMessage("NICK", anope_event_nick);
addCoreMessage(IRCD,m);
}
Each event should have a event handler if its important enough to be
processed by services. All event functions should be formed like this:
int anope_event_capab(char *source, int ac, char **av)
{
return MOD_CONT;
}
They will receive the source; this can be NULL at times depending on the
event. Next, ac is the number of arguments that are in the event, and av
holds the values for each; so av[0] is the first variable, av[1] will be
the second one, and so on. Events are likely to pass to various upper
level event handlers; see the previous ircd source for how they handle
these events.
All commands are formed like this:
void anope_cmd_svsnoop(char *server, int set)
{
send_cmd(NULL, "SVSNOOP %s %s", server, (set ? "+" : "-"));
}
They may take any number of arguments, depending on the command. They
should eventually come to a send_cmd(); this root function is how
commands are sent to the IRCd.
6) CAPAB/PROTOCTL
Most IRCD send a CAPAB or PROTOCTL line so that they can work out what
the other end of the connection is capable of doing. Anope has a function
to read these lines and set itself up to to handle these events better.
When adding support for your ircd, take the following steps.
1) In the module constructor you must tell Anope what the uplink is capable of that
isn't already passed in the CAPAB/PROTOCTL, you do this by something similar to:
CapabType c[] = { CAPAB_NOQUIT, CAPAB_NICKIP, CAPAB_ZIP, CAPAB_TOKEN, CAPAB_SSJ3, CAPAB_NICK2, CAPAB_VL, CAPAB_TLKEXT, CAPAB_CHANMODE, CAPAB_SJB64, CAPAB_NICKCHARS };
for (unsigned i = 0; i < 11; ++i)
Capab.SetFlag(c[i]);
Anything else given to Anope in the CAPAB/PROTOCTL message will be handled later by CapabParse.
The available CAPAB options are:
--------------------------------------------------------------------------
Define | Description
----------------|------------|-----------|--------------------------------
CAPAB_NOQUIT | NOQUIT protocol support
CAPAB_TSMODE | Chanmodes are timestamped
CAPAB_UNCONNECT | UNCONNECT protocol support
CAPAB_NICKIP | IP sent in the NICK line
CAPAB_NSJOIN | Smart SJOIN support
CAPAB_ZIP | Support for gzipped links
CAPAB_BURST | Supports BURST command
CAPAB_TS3 | Support for TS3 protocol
CAPAB_TS5 | Support for TS5 protocol
CAPAB_DKEY | DH-Key exchange using DKEY
CAPAB_DOZIP | Link traffic will be gzipped
CAPAB_DODKEY | Do DKEY with this link
CAPAB_QS | Supports quit storm removal
CAPAB_SCS | String Cache System support
CAPAB_PT4 | Support for PT4 protocol
CAPAB_UID | Support for UIDs
CAPAB_KNOCK | Supports KNOCK
CAPAB_CLIENT | Supports CLIENT
CAPAB_IPV6 | Support for IPv6 addresses
CAPAB_SSJ5 | Smart Join protocol 5 support
CAPAB_SN2 | Support for SN2 protocol
CAPAB_VHOST | Supports VHOST protocol
CAPAB_TOKEN | Supports s2s tokens
CAPAB_SSJ3 | Smart Join protocol 3 support
CAPAB_NICK2 | Support for extended NICK (v2)
CAPAB_UMODE2 | Supports UMODE2 command
CAPAB_VL | VLine information in info field
CAPAB_TLKEXT | Not 8, but 10 params in TKL's
CAPAB_CHANMODE | Channel modes are passed here
CAPAB_SJB64 | SJOIN timestamps are base64 encoded
CAPAB_NICKCHARS | Character set used by the IRCD for nicks
2) In the ircd.c find the function anope_cmd_capab(); this function will
send the CAPAB/PROTOCTL line (consult your ircd documentation for
which to send). In a single line type in the tokens that anope must
send. Here is an example of Hybrid's capab line:
/* CAPAB */
void anope_cmd_capab()
{
send_cmd(NULL, "CAPAB TS5 EX IE HOPS HUB AOPS");
}
3) Ensure that the CAPAB/PROTOCTL event his handled correctly.
A) In the function module constructor make sure that you have the
following two lines:
m = createMessage("CAPAB", anope_event_capab);
addCoreMessage(IRCD,m);
B) Add the function to handle the event
int anope_event_capab(char *source, int ac, char **av)
{
CapabParse(ac, av);
return MOD_CONT;
}
This function should call the CapabParse function which parses
the received CAPAB/PROTOCTL line.
7) IRCDProto Class
The IRCDProto class is set up like:
class MyIRCdProto : public IRCDProto { } ircdproto;
And told to Anope through the
pmodule_ircd_proto(&ircd_proto);
function.
This is used for sending out specific messages from Anope to your IRCd.
A list of all of the valid function names to overload and their args
are in services.h. If the protocol module you are editing is similar enough
to the IRCd you are adding support for, many of these probably won't need to
be changed.
+22 -1
View File
@@ -1,6 +1,27 @@
Anope MySQL Support
-------------------
MySQL Support was removed in 1.9.0 until it can be better implemented moving forward.
MySQL support was readded in version 1.9.2 In the form of three modules.
db_mysql_read - Allows you to load your databases from MySQL.
db_mysql_write - Allows live updating of SQL tables whenever something is executed in Anope.
db_mysql_execute - Allows executing of Anope commands via SQL.
To execute commands via SQL, you must insert the command into the anope_commands table, an example is as follows:
INSERT INTO `anope_commands` (nick, service, command) VALUES('Adam', 'NickServ', 'REGISTER qwerty Adam@anope.org');
By default, every 60 seconds Anope checks this table for commands to execute. When Anope sees a new command to execute, it checks the following.
If the nick given is -SQLUser, then the command gets executed by a special fake user within Anope called -SQLUser. -SQLUser has every permission and command available, there are no permission checks at all for this user, it can do anything.
If the nick is not -SQLUser, it checks to see if it is a registered nick. If it is, it sees if there are any users online using the NickCore of that nick.
If there is a user online with that core the command gets executed as if that user executed it, and the reply goes to that user.
If there isn't a user online with the core, it creates a fake user as the nick given to it, and gives to it the permissions the user would have if they were online and identified.
If the nick is not registered, it checks to see if there is a user currently on that nick. If there is, it executes the command as that user, and the reply goes to that user.
If the nick is not registered and no one is using the nick, it creates a fake user of the nick given to it, and gives it regular nonidentified user access.
Currently there is no way to check to see if a command was executed successfully within Anope from SQL (even if there was, the possibly update delay would be a problem).
IMPORTANT: When using db_mysql_write when you already have a database, you need to do an initial import of the data to SQL (as db_mysql_write only updates it when it is changed, it never actually mass-dumps all of your data into SQL). To do this, start Anope and execute /OperServ SQLSYNC.
+1 -2
View File
@@ -1,8 +1,7 @@
Highlighted News in Anope 1.9
=============================
* Removed MySQL Support (pending better implementation)
* Added in live updating SQL and the ability to execute commands through SQL
* Re-designed configuration file
* Code refresh / rewrite into C++
+2 -4
View File
@@ -1,7 +1,7 @@
Anope -- a set of IRC services for IRC networks
-----------------------------------------------
Anope is 2003-2009 Anope Team <team@anope.org>.
Anope is 2003-2010 Anope Team <team@anope.org>.
Based on Epona 2000-2002 PegSoft <epona@pegsoft.net>.
Based on Services 1996-1999 Andrew Church <achurch@achurch.org>.
@@ -188,12 +188,10 @@ Table of Contents
on daemons supporting ip cloaking, such as UnrealIRCd, UltimateIRCd
and ViagraIRCd.
* HelpServ, a skeleton service used to serve help files.
Anope currently works with:
* Bahamut 1.4.27 or later (including 1.8)
* InspIRCd 1.1 or later (including 1.2)
* InspIRCd 1.1, 1.2, or 2.0
* Ratbox 2.0.6 or later
* UnrealIRCd 3.2 or later
+80
View File
@@ -0,0 +1,80 @@
Legend:
x = done
? = unsure
+ = in progress
1.9.2
-----
[x] Redo database insanity.
[x] Move database load/save to a module
[x] realtime SQL/whatever module using events (possibly ongoing)
[x] flatfile save on a periodic timer
[x] SANE password encryption - prefix password with the method it was encrypted with, allowing for *seamless* upgrading to different methods
[x] Salted SHA256 (contact Special for this)
[x] New database format (text, not binary - works very well for merging and so on)
[x] generic database routines modules can use to create their own database
[?] IRCd capability support: don't rely on CAPAB, provide an interface to turn capabilities on specifically
[x] Socket subsystem needs some serious loving
[x] Multiple sockets
[x] Asynchronous, using select() (multiple engines? not really needed..)
[x] Callbacks, event style, see also inspircd
[x] generic way to check which modes a user has set (u->HasUmode(UMODE_OPER))
[x] way for one module to depend on another... not like 2 MOD_HEADs and it being unpredictable which is loaded first..
the MOD_HEAD MOD_TAIL allows for too few combinations (interface code of insp, hooks code of insp?)
[x] Last used time on AKICK/access entries
[x] Channel passwords seem to be of limited use, think of a more appropriate way to handle this
[+] General options block, ability to turn LOGCHAN on from the config file..
[x] Docs directory cleanup
[x] Fix permanent channels support properly
[x] CS SET INHABIT to keep pseudoclient in a channel after it empties to maintain banlists and such
[x] Set forbidden channels +s
[x] SendAkill should just take a pointer to the Akill class instead of millions of fields (same for some other stuff)
[x] burn do_sjoin with fire
[x] Channel access additions
[x] Setter
[x] Last used
Future
------
[ ] Asynchronous DNS
[ ] CIDR Akills, session exceptions, etc
[ ] Hashing system for storing just about everything needs to die
[ ] Move a (lot) of stuff to class members as a defined interface rather than copypasta everywhere (ns_set, ns_saset!)
[?] Remote identification (1.9.1? will this break stuff?)
[ ] Language charset stuff, including collation (1.9.1? phoenix?)
[ ] Add support for +k, +q, etc type umodes
[ ] fantasy: allow replies/notifications to fantasy commands to go to the channel via notice
[?] a way for a module to queue itself (or even another module) for unloading
[ ] Language system is disgusting, it must die.
[ ] Modules should also have a way to add strings programatically
[ ] Should be able to add many strings by dropping a file in a set location.
[ ] I forsee this working via a function rather than defines, as it seems to do now: e.g. _("NS_NICK_IS_REGISTERED").
[?] Update help to reflect the fact /msg memoserv set notify mail - works just fine ;)
[ ] Useful/common "third party" modules to core distro
[ ] NS AJOIN
[+] Method to store listmodes (more generically than AKICK, too) for e.g. +beI and extbans, etc.
[ ] Channel access additions
[ ] Time added
[ ] Time modified
[ ] Expiry (useful?)
[ ] NS INFO: seperate field for last seen realhost, shown to SRA only
[ ] NS SUSPEND: show suspender and reason, probably to sopers only (see CS SUSPEND)
[ ] Merge NS INFO blah ALL with NS INFO blah, if you're requesting info, you really want the info anyway.
[?] Don't allow soper accounts to expire
[?] Reason for CS SET RESTRICTED
[ ] NS IDENTIFY changes
[?] Last failed identify? Maybe more useful for sopers only, so users don't get unnecessarily worried
[?] Last successful login time/ip? perhaps both of these should be a new nick setting
[x] AKILL/SGLINE/etc..
[x] Setter
[x] Time added
[+] Time modified (can they be modified?)
[ ] Time until expiry/expiry time (YES, time until expiry *instead of* expiry time, more human)
[x] Reason
[ ] Unique IDs on each AKILL/blah so that networks may use them as ticket IDs
[ ] HS ACTIVATE -ALL (rob sez this all needs reviewing)
[?] NS MARK, CS MARK. Allow multiple marks. Combine into OS MARK? (AKA os_info)
[?] MS IGNORE. Make it take nick (accounts) or n!u@h masks. Fake success of memo send still, but send to opers?
[?] More "friendly" date displays of some things like registration time ("November 7th 2006 (2 years, 0 months, 0 days ago)")
[?] OS INJECT
[?] Drop CS SET ENTRYMSG, replace with a 'news' type system? (limited to a configured number of items, default 3)
+1 -1
View File
@@ -10,7 +10,7 @@ services.h: sysconf.h config.h extern.h
extern.h: slist.h
touch $@
pseudo.h: commands.h timers.h datafiles.h slist.h
pseudo.h: commands.h timers.h slist.h
touch $@
clean:
+113 -20
View File
@@ -1,22 +1,87 @@
/* NickServ nickname structures. */
/** Flags set on NickAliases
*/
enum NickNameFlag
{
NS_BEGIN,
/* Nick may not be registered or used */
NS_FORBIDDEN,
/* Nick never expires */
NS_NO_EXPIRE,
/* This nick is being held after a kill by an enforcer client
* or is being SVSHeld. Used by ns_release to determin if something
* should be allowed to be released
*/
NS_HELD,
/* We are taking over this nick, either by SVSNICK or KILL.
* We are waiting for the confirmation of either of these actions to
* proceed. This is checked in NickAlias::OnCancel
*/
NS_COLLIDED,
NS_END
};
/** Flags set on NickCores
*/
enum NickCoreFlag
{
NI_BEGIN,
/* Kill others who take this nick */
NI_KILLPROTECT,
/* Dont recognize unless IDENTIFIED */
NI_SECURE,
/* Use PRIVMSG instead of NOTICE */
NI_MSG,
/* Don't allow user to change memo limit */
NI_MEMO_HARDMAX,
/* Notify of memos at signon and un-away */
NI_MEMO_SIGNON,
/* Notify of new memos when sent */
NI_MEMO_RECEIVE,
/* Don't show in LIST to non-servadmins */
NI_PRIVATE,
/* Don't show email in INFO */
NI_HIDE_EMAIL,
/* Don't show last seen address in INFO */
NI_HIDE_MASK,
/* Don't show last quit message in INFO */
NI_HIDE_QUIT,
/* Kill in 20 seconds instead of in 60 */
NI_KILL_QUICK,
/* Kill immediatly */
NI_KILL_IMMED,
/* User gets email on memo */
NI_MEMO_MAIL,
/* Don't show services access status */
NI_HIDE_STATUS,
/* Nickname is suspended */
NI_SUSPENDED,
/* Autoop nickname in channels */
NI_AUTOOP,
/* This nickcore is forbidden, which means the nickalias for it is aswell */
NI_FORBIDDEN,
NI_END
};
/** XXX: this really needs to die with fire and be merged with metadata into NickCore or something.
*/
class NickRequest
class CoreExport NickRequest
{
public:
NickRequest()
{
next = prev = NULL;
nick = passcode = email = NULL;
*password = 0;
requested = lastmail = 0;
}
NickRequest(const std::string &nickname);
~NickRequest();
NickRequest *next, *prev;
char *nick;
char *passcode;
char password[PASSMAX];
std::string passcode;
std::string password;
char *email;
time_t requested;
time_t lastmail; /* Unsaved */
@@ -24,10 +89,18 @@ class NickRequest
class NickCore;
class CoreExport NickAlias : public Extensible
class CoreExport NickAlias : public Extensible, public Flags<NickNameFlag>
{
public:
NickAlias();
/** Default constructor
* @param nickname The nick
* @param nickcore The nickcofe for this nick
*/
NickAlias(const std::string &nickname, NickCore *nickcore);
/** Default destructor
*/
~NickAlias();
NickAlias *next, *prev;
char *nick; /* Nickname */
@@ -36,24 +109,44 @@ class CoreExport NickAlias : public Extensible
char *last_usermask; /* Last usermask */
time_t time_registered; /* When the nick was registered */
time_t last_seen; /* When it was seen online for the last time */
uint16 status; /* See NS_* below */
NickCore *nc; /* I'm an alias of this */
HostInfo hostinfo;
/** Release a nick
* See the comment in users.cpp
*/
void Release();
/** This function is called when a user on this nick either disconnects or changes nick.
* Note that the user isnt necessarially identified to this nick
* See the comment in users.cpp
* @param u The user
*/
void OnCancel(User *u);
};
class CoreExport NickCore : public Extensible
class CoreExport NickCore : public Extensible, public Flags<NickCoreFlag>
{
public:
NickCore();
/** Default constructor
* @param display The display nick
*/
NickCore(const std::string &nickdisplay);
/** Default destructor
*/
~NickCore();
NickCore *next, *prev;
std::list<User *> Users;
char *display; /* How the nick is displayed */
char pass[PASSMAX]; /* Password of the nicks */
std::string pass; /* Password of the nicks */
char *email; /* E-mail associated to the nick */
char *greet; /* Greet associated to the nick */
uint32 icq; /* ICQ # associated to the nick */
char *url; /* URL associated to the nick */
uint32 flags; /* See NI_* below */
uint16 language; /* Language selected by nickname owner (LANG_*) */
std::vector<std::string> access; /* Access list, vector of strings */
MemoInfo memos;
@@ -69,18 +162,18 @@ class CoreExport NickCore : public Extensible
* @param cmdstr The string to check, e.g. botserv/set/private.
* @return True if this opertype may run the specified command, false otherwise.
*/
bool HasCommand(const std::string &cmdstr) const;
virtual bool HasCommand(const std::string &cmdstr) const;
/** Checks whether this account is a services oper or not.
* @return True if this account is a services oper, false otherwise.
*/
bool IsServicesOper() const;
virtual bool IsServicesOper() const;
/** Check whether this opertype has access to the given special permission.
* @param privstr The priv to check for, e.g. users/auspex.
* @return True if this opertype has the specified priv, false otherwise.
*/
bool HasPriv(const std::string &privstr) const;
virtual bool HasPriv(const std::string &privstr) const;
/** Add an entry to the nick's access list
*
+31 -15
View File
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2008-2009 Robin Burchell <w00t@inspircd.org>
* Copyright (C) 2008-2009 Anope Team <team@anope.org>
* Copyright (C) 2008-2010 Robin Burchell <w00t@inspircd.org>
* Copyright (C) 2008-2010 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*
@@ -9,38 +9,55 @@
*
*/
/** Flags settable on a bot
*/
enum BotFlag
{
BI_BEGIN,
/* This bot can only be assigned by IRCops */
BI_PRIVATE,
/* The following flags are used to determin what bot really is what.
* Since you *could* have ChanServ really named BotServ or something stupid,
* this keeps track of them and allows them to be renamed in the config
* at any time, even if they already exist in the database
*/
BI_CHANSERV,
BI_BOTSERV,
BI_HOSTSERV,
BI_OPERSERV,
BI_MEMOSERV,
BI_NICKSERV,
BI_GLOBAL,
BI_END
};
struct CommandHash;
class CoreExport BotInfo
class CoreExport BotInfo : public Extensible, public Flags<BotFlag>
{
public:
BotInfo *next, *prev;
std::string uid; /* required for UID supporting servers, as opposed to the shitty struct Uid. */
char *nick; /* Nickname of the bot */
char *user; /* Its user name */
char *host; /* Its hostname */
char *real; /* Its real name */
int16 flags; /* Bot flags -- see BI_* below */
std::string nick; /* Nickname of the bot */
std::string user; /* Its user name */
std::string host; /* Its hostname */
std::string real; /* Its real name */
time_t created; /* Birth date ;) */
int16 chancount; /* Number of channels that use the bot. */
/* Dynamic data */
time_t lastmsg; /* Last time we said something */
CommandHash **cmdTable;
/** Create a new bot.
* XXX: Note - this constructor is considered obsolete. Use the four parameter form.
* @param nick The nickname to assign to the bot.
*/
BotInfo(const char *nick);
/** Create a new bot.
* @param nick The nickname to assign to the bot.
* @param user The ident to give the bot.
* @param host The hostname to give the bot.
* @param real The realname to give the bot.
*/
BotInfo(const char *nick, const char *user, const char *host, const char *real);
BotInfo(const std::string &nick, const std::string &user = "", const std::string &host = "", const std::string &real = "");
/** Destroy a bot, clearing up appropriately.
*/
@@ -68,4 +85,3 @@ class CoreExport BotInfo
*/
void UnAssign(User *u, ChannelInfo *ci);
};
+264
View File
@@ -0,0 +1,264 @@
/* Channel support
*
* (C) 2008-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*
* $Id$
*
*/
struct UserData
{
UserData()
{
lastline = NULL;
last_use = last_start = time(NULL);
lines = times = 0;
}
virtual ~UserData() { delete [] lastline; }
/* Data validity */
time_t last_use;
/* for flood kicker */
int16 lines;
time_t last_start;
/* for repeat kicker */
char *lastline;
int16 times;
};
struct UserContainer
{
User *user;
UserData ud;
Flags<ChannelModeName> *Status;
UserContainer(User *u) : user(u) { }
virtual ~UserContainer() { }
};
typedef std::list<UserContainer *> CUserList;
enum ChannelFlags
{
/* Channel still exists when emptied */
CH_PERSIST,
/* If set the channel is syncing users (channel was just created) and it should not be deleted */
CH_SYNCING
};
class CoreExport Channel : public Extensible, public Flags<ChannelFlags>
{
private:
/** A map of channel modes with their parameters set on this channel
*/
std::map<ChannelModeName, std::string> Params;
/* Modes set on the channel */
std::bitset<128> modes;
public:
/** Default constructor
* @param name The channel name
* @param ts The time the channel was created
*/
Channel(const std::string &name, time_t ts = time(NULL));
/** Default destructor
*/
~Channel();
Channel *next, *prev;
std::string name; /* Channel name */
ChannelInfo *ci; /* Corresponding ChannelInfo */
time_t creation_time; /* When channel was created */
char *topic;
std::string topic_setter;
time_t topic_time; /* When topic was set */
EList *bans;
EList *excepts;
EList *invites;
/* List of users in the channel */
CUserList users;
BanData *bd;
time_t server_modetime; /* Time of last server MODE */
time_t chanserv_modetime; /* Time of last check_modes() */
int16 server_modecount; /* Number of server MODEs this second */
int16 chanserv_modecount; /* Number of check_mode()'s this sec */
int16 bouncy_modes; /* Did we fail to set modes here? */
int16 topic_sync; /* Is the topic in sync? */
/** Restore the channel topic, set mlock (key), set stickied bans, etc
*/
void Sync();
/** Join a user internally to the channel
* @param u The user
*/
void JoinUser(User *u);
/** Remove a user internally from the channel
* @param u The user
*/
void DeleteUser(User *u);
/** Check if the user is on the channel
* @param u The user
* @return A user container if found, else NULL
*/
UserContainer *FindUser(User *u);
/** Check if a user has a status on a channel
* @param u The user
* @param cms The status mode, or NULL to represent no status
* @return true or false
*/
bool HasUserStatus(User *u, ChannelModeStatus *cms);
/** Check if a user has a status on a channel
* Use the overloaded function for ChannelModeStatus* to check for no status
* @param u The user
* @param Name The Mode name, eg CMODE_OP, CMODE_VOICE
* @return true or false
*/
bool HasUserStatus(User *u, ChannelModeName Name);
/** See if the channel has any modes at all
* @return true or false
*/
inline const bool HasModes() const { return modes.count(); }
/** See if a channel has a mode
* @param Name The mode name
* @return true or false
*/
bool HasMode(ChannelModeName Name);
/** Set a mode internally on a channel, this is not sent out to the IRCd
* @param cm The mode
* @param param The param
* @param EnforceMLock true if mlocks should be enforced, false to override mlock
*/
void SetModeInternal(ChannelMode *cm, const std::string &param = "", bool EnforceMLock = true);
/** Remove a mode internally on a channel, this is not sent out to the IRCd
* @param cm The mode
* @param param The param
* @param EnforceMLock true if mlocks should be enforced, false to override mlock
*/
void RemoveModeInternal(ChannelMode *cm, const std::string &param = "", bool EnforceMLock = true);
/** Set a mode on a channel
* @param bi The client setting the modes
* @param cm The mode
* @param param Optional param arg for the mode
* @param EnforceMLock true if mlocks should be enforced, false to override mlock
*/
void SetMode(BotInfo *bi, ChannelMode *cm, const std::string &param = "", bool EnforceMLock = true);
/**
* Set a mode on a channel
* @param bi The client setting the modes
* @param Name The mode name
* @param param Optional param arg for the mode
* @param EnforceMLock true if mlocks should be enforced, false to override mlock
*/
void SetMode(BotInfo *bi, ChannelModeName Name, const std::string &param = "", bool EnforceMLock = true);
/**
* Set a mode on a channel
* @param bi The client setting the modes
* @param Mode The mode
* @param param Optional param arg for the mode
* @param EnforceMLock true if mlocks should be enforced, false to override mlock
*/
void SetMode(BotInfo *bi, char Mode, const std::string &param = "", bool EnforceMLock = true);
/** Remove a mode from a channel
* @param bi The client setting the modes
* @param cm The mode
* @param param Optional param arg for the mode
* @param EnforceMLock true if mlocks should be enforced, false to override mlock
*/
void RemoveMode(BotInfo *bi, ChannelMode *cm, const std::string &param = "", bool EnforceMLock = true);
/**
* Remove a mode from a channel
* @param bi The client setting the modes
* @param Name The mode name
* @param param Optional param arg for the mode
* @param EnforceMLock true if mlocks should be enforced, false to override mlock
*/
void RemoveMode(BotInfo *bi, ChannelModeName Name, const std::string &param = "", bool EnforceMLock = true);
/**
* Remove a mode from a channel
* @param bi The client setting the modes
* @param Mode The mode
* @param param Optional param arg for the mode
* @param EnforceMLock true if mlocks should be enforced, false to override mlock
*/
void RemoveMode(BotInfo *bi, char Mode, const std::string &param = "", bool EnforceMLock = true);
/** Clear all the modes from the channel
* @param bi The client unsetting the modes
*/
void ClearModes(BotInfo *bi = NULL);
/** Clear all the bans from the channel
* @param bi The client unsetting the modes
*/
void ClearBans(BotInfo *bi = NULL);
/** Clear all the excepts from the channel
* @param bi The client unsetting the modes
*/
void ClearExcepts(BotInfo *bi = NULL);
/** Clear all the invites from the channel
* @param bi The client unsetting the modes
*/
void ClearInvites(BotInfo *bi = NULL);
/** Get a param from the channel
* @param Name The mode
* @param Target a string to put the param into
* @return true on success
*/
const bool GetParam(ChannelModeName Name, std::string &Target);
/** Check if a mode is set and has a param
* @param Name The mode
*/
const bool HasParam(ChannelModeName Name);
/** Set a string of modes on the channel
* @param bi The client setting the modes
* @param EnforceMLock Should mlock be enforced on this mode change
* @param cmodes The modes to set
*/
void SetModes(BotInfo *bi, bool EnforceMLock, const char *cmodes, ...);
/** Kick a user from a channel internally
* @param source The sender of the kick
* @param nick The nick being kicked
* @param reason The reason for the kick
*/
void KickInternal(const std::string &source, const std::string &nick, const std::string &reason);
/** Kick a user from the channel
* @param bi The sender, can be NULL for the service bot for this channel
* @param u The user being kicked
* @param reason The reason for the kick
* @return true if the kick was scucessful, false if a module blocked the kick
*/
bool Kick(BotInfo *bi, User *u, const char *reason = NULL, ...);
};
+3 -3
View File
@@ -1,6 +1,6 @@
/* Declarations for command data.
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
@@ -21,8 +21,8 @@
*/
extern MDE Command *lookup_cmd(Command *list, char *name);
extern MDE void mod_help_cmd(char *service, User *u, CommandHash *cmdTable[],const char *cmd);
extern MDE void mod_run_cmd(char *service, User *u, CommandHash *cmdTable[],const char *cmd);
extern MDE void mod_help_cmd(char *service, User *u, CommandHash *cmdTable[], const char *cmd);
extern MDE void mod_run_cmd(const std::string &service, User *u, CommandHash *cmdTable[], const char *cmd);
//extern MDE void do_help_limited(char *service, User * u, Command * c);
/*************************************************************************/
+3 -35
View File
@@ -1,6 +1,6 @@
/* Services configuration.
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
@@ -22,20 +22,9 @@
/******* General configuration *******/
/* Name of configuration file (in Services directory) */
#define SERVICES_CONF "services.conf"
/* Name of log file (in Services directory) */
#define LOG_FILENAME "services.log"
/* Maximum amount of data from/to the network to buffer (bytes). */
#define NET_BUFSIZE 65536
/******* OperServ configuration *******/
/* Define this to enable OperServ's svs commands (superadmin only). */
#define USE_OSSVS
/******************* END OF USER-CONFIGURABLE SECTION ********************/
/* Size of input buffer (note: this is different from BUFSIZ)
@@ -43,29 +32,8 @@
* things will happen. */
#define BUFSIZE 1024
/* Extra warning: If you change CHANMAX, your ChanServ database will be
* unusable.
*/
/* Maximum length of a channel name, including the trailing null. Any
* channels with a length longer than (CHANMAX-1) including the leading #
* will not be usable with ChanServ. */
#define CHANMAX 64
/* Maximum length of a nickname, including the trailing null. This MUST be
* at least one greater than the maximum allowable nickname length on your
* network, or people will run into problems using Services! The default
* (32) works with all servers I know of. */
#define NICKMAX 32
/* Maximum length of a password */
#define PASSMAX 32
/* Maximum length of a username */
#define USERMAX 10
/* Maximum length of a domain */
#define HOSTMAX 64
/* Maximum amount of data from/to the network to buffer (bytes). */
#define NET_BUFSIZE 65536
/**************************************************************************/
+382 -1
View File
@@ -374,6 +374,387 @@ class ServerConfig
void ValidateHostname(const char *, const std::string &, const std::string &);
void ValidateIP(const char *p, const std::string &, const std::string &, bool);
void ValidateNoSpaces(const char *, const std::string &, const std::string &);
/** Below here is a list of variables which contain the config files values
*/
/* IRCd module in use */
char *IRCDModule;
/* Host to connect to **/
char *LocalHost;
/* List of uplink servers to try and connect to */
std::list<Uplink *> Uplinks;
/* Our server name */
char *ServerName;
/* Our servers description */
char *ServerDesc;
/* The username/ident of services clients */
char *ServiceUser;
/* The hostname if services clients */
char *ServiceHost;
/* Help channel, ops here get usermode +h **/
char *HelpChannel;
/* Log channel */
char *LogChannel;
/* Name of the network were on */
char *NetworkName;
/* The max legnth of nicks */
unsigned NickLen;
/* Max length of idents */
unsigned UserLen;
/* Max lenght of hostnames */
unsigned HostLen;
/* Max length of passwords */
unsigned PassLen;
/* NickServ Name */
char *s_NickServ;
/* ChanServ Name */
char *s_ChanServ;
/* MemoServ Name */
char *s_MemoServ;
/* BotServ Name */
char *s_BotServ;
/* OperServ name */
char *s_OperServ;
/* Global name */
char *s_GlobalNoticer;
/* NickServs realname */
char *desc_NickServ;
/* ChanServ realname */
char *desc_ChanServ;
/* MemoServ relname */
char *desc_MemoServ;
/* BotServ realname */
char *desc_BotServ;
/* OperServ realname */
char *desc_OperServ;
/* Global realname */
char *desc_GlobalNoticer;
/* HostServ Name */
char *s_HostServ;
/* HostServ realname */
char *desc_HostServ;
/* Filename for the PID file */
char *PIDFilename;
/* MOTD filename */
char *MOTDFilename;
/* True if its ok to not be able to save backs */
bool NoBackupOkay;
/* Do password checking when new people register */
bool StrictPasswords;
/* How many times you're allowed to give a bad password before being killed */
unsigned BadPassLimit;
/* How long before bad passwords are forgotten */
time_t BadPassTimeout;
/* Delay between automatic database updates */
time_t UpdateTimeout;
/* Delay between checks for expired nicks and channels */
time_t ExpireTimeout;
/* How long to wait for something from the uplink, this is passed to select() */
time_t ReadTimeout;
/* How often to send program errors */
time_t WarningTimeout;
/* How long to process things such as timers to see if there is anything to calll */
time_t TimeoutCheck;
/* Num of days logfiles are kept */
int KeepLogs;
/* Number of days backups are kept */
int KeepBackups;
/* Forbidding requires a reason */
bool ForceForbidReason;
/* Services should use privmsgs instead of notices */
bool UsePrivmsg;
/* Services only respond to full PRIVMSG client@services.server.name messages */
bool UseStrictPrivMsg;
/* Dump a core file if we crash */
bool DumpCore;
/* Log users connecting/existing/changing nicks */
bool LogUsers;
/* Number of seconds between consecutive uses of the REGISTER command
* Not to be confused with NSRegDelay */
unsigned NickRegDelay;
/* Max number if news items allowed in the list */
unsigned NewsCount;
/* Default mlock modes */
std::string MLock;
/* Default botmodes on channels, defaults to ao */
std::string BotModes;
/* How many times to try and reconnect to the uplink before giving up */
unsigned MaxRetries;
/* How long to wait between connection attempts */
int RetryWait;
/* Services can use email */
bool UseMail;
/* Path to the sendmail executable */
char *SendMailPath;
/* Address to send from */
char *SendFrom;
/* Only opers can have services send mail */
bool RestrictMail;
/* Delay between sending mail */
time_t MailDelay;
/* Don't quote the To: address */
bool DontQuoteAddresses;
/* Prefix of guest nicks when a user gets forced off of a nick */
char *NSGuestNickPrefix;
/* Allow users to set kill immed on */
bool NSAllowKillImmed;
/* Don't allow nicks to use /ns group to regroup nicks */
bool NSNoGroupChange;
/* Default flags for newly registered nicks */
Flags<NickCoreFlag> NSDefFlags;
/* Default language used by services */
unsigned NSDefLanguage;
/* Users must be connected this long before they can register
* Not to be confused with NickRegDelay */
time_t NSRegDelay;
/* Time before the registering mail will be resent */
time_t NSResendDelay;
/* How long before nicks expir */
time_t NSExpire;
/* Time before NickRequests expire */
time_t NSRExpire;
/* Force email when registering */
bool NSForceEmail;
/* Max number of nicks in a group */
int NSMaxAliases;
/* Max number of allowed strings on the access list */
unsigned NSAccessMax;
/* Enforcer client user name */
char *NSEnforcerUser;
/* Enforcer client hostname */
char *NSEnforcerHost;
/* How long before recovered nicks are released */
time_t NSReleaseTimeout;
/* /nickserv list is oper only */
bool NSListOpersOnly;
/* Max number of entries that can be returned from the list command */
unsigned NSListMax;
/* Only allow usermode +a etc on real services admins */
bool NSSecureAdmins;
/* Services opers must be /operd on the ircd aswell */
bool NSStrictPrivileges;
/* Use email to verify new users registering */
bool NSEmailReg;
/* Set the proper channel modes on users when they identify */
bool NSModeOnID;
/* Add the users hostnask their access list when they register */
bool NSAddAccessOnReg;
/* Default flags for newly registered channels */
Flags<ChannelInfoFlag> CSDefFlags;
/* Max number of channels a user can own */
unsigned CSMaxReg;
/* Time before a channel expires */
time_t CSExpire;
/* Default ban type to use for channels */
int CSDefBantype;
/* Max number of entries allowed on channel access lists */
unsigned CSAccessMax;
/* Max number of entries allowed on autokick lists */
unsigned CSAutokickMax;
/* Default autokick reason */
char *CSAutokickReason;
/* Time ChanServ should stay in the channel to hold it to keep users from getting in */
time_t CSInhabit;
/* ChanServ's LIST command is oper only */
bool CSListOpersOnly;
/* Max number of entries allowed to be returned from the LIST command */
unsigned CSListMax;
/* true to make ChanServ oper only */
bool CSOpersOnly;
/* Max number of memos allowed */
unsigned MSMaxMemos;
/* Time you must wait between sending memos */
time_t MSSendDelay;
/* Notify all of the aliases of the core the memo was sent to */
bool MSNotifyAll;
/* Who can use memos reciepts */
unsigned MSMemoReceipt;
/* Defai;t BotServ flags */
Flags<BotServFlag> BSDefFlags;
/* How long before botserv forgets a user. This is used for flood kickers etc */
time_t BSKeepData;
/* Min number of users to have in the channel before the service bot joins */
unsigned BSMinUsers;
/* Max number of words allowed on the badwordslist */
unsigned BSBadWordsMax;
/* BotServ bot only joins if it would normally allowed to, abides by bans etc */
bool BSSmartJoin;
/* Dont tell users what badword they used */
bool BSGentleBWReason;
/* Case sensitive badwords matching */
bool BSCaseSensitive;
/* Char to use for the fantasy char, eg ! */
char *BSFantasyCharacter;
/* Only show /stats o to opers */
bool HideStatsO;
/* Send out a global when services shut down or restart */
bool GlobalOnCycle;
/* Don't include the opers name in globals */
bool AnonymousGlobal;
/* Dont allow users to register nicks with oper names in them */
bool RestrictOperNicks;
/* Message to send when shutting down */
char *GlobalOnCycleMessage;
/* Message to send when starting up */
char *GlobalOnCycleUP;
/* Super admin is allowed */
bool SuperAdmin;
/* Log things said through ACT/SAY */
bool LogBot;
/* Log when new user max is reached */
bool LogMaxUsers;
/* Default expiry time for akills */
time_t AutokillExpiry;
/* Default expiry time for chan kills */
time_t ChankillExpiry;
/* Default expiry time for SGLine Expire */
time_t SGLineExpiry;
/* Default expiry time for SQLines */
time_t SQLineExpiry;
/* Default expiry time for SZLine */
time_t SZLineExpiry;
/* Actually akill the user when the akill is added */
bool AkillOnAdd;
/* Kill users on SGline */
bool KillonSGline;
/* Kill users on SQline */
bool KillonSQline;
/* Send a WALLOPS/GLOBOPS when a user opers */
bool WallOper;
/* Send a WALLOPS/GLOBOPS when a nonoper tries to use OperServ */
bool WallBadOS;
/* Send a WALLOPS/GLOBOPS when someone uses the GLOBAL command */
bool WallOSGlobal;
/* Send a WALLOPS/GLOBOPS when someone uses the MODE command */
bool WallOSMode;
/* Send a WALLOPS/GLOBOPS when someone uses the CLEARMODES command */
bool WallOSClearmodes;
/* Send a WALLOPS/GLOBOPS when someone uses the KICK command */
bool WallOSKick;
/* Send a WALLOPS/GLOBOPS when someone uses the AKILL command */
bool WallOSAkill;
/* Send a WALLOPS/GLOBOPS when someone uses the SGLINE command */
bool WallOSSGLine;
/* Send a WALLOPS/GLOBOPS when someone uses the SQLINE command */
bool WallOSSQLine;
/* Send a WALLOPS/GLOBOPS when someone uses the SZLINE command */
bool WallOSSZLine;
/* Send a WALLOPS/GLOBOPS when someone uses the NOOP command */
bool WallOSNoOp;
/* Send a WALLOPS/GLOBOPS when when someone uses the JUPE command */
bool WallOSJupe;
/* Send a WALLOPS/GLOBOPS when an akill expires */
bool WallAkillExpire;
/* Send a WALLOPS/GLOBOPS when SGLines expire */
bool WallSGLineExpire;
/* Send a WALLOPS/GLOBOPS when SQLines expire */
bool WallSQLineExpire;
/* Send a WALLOPS/GLOBOPS when SZLines expire */
bool WallSZLineExpire;
/* Send a WALLOPS/GLOBOPS when exceptions expire */
bool WallExceptionExpire;
/* Send a WALLOPS/GLOBOPS when DROP is used */
bool WallDrop;
/* Send a WALLOPS/GLOBOPS when FORBID is used */
bool WallForbid;
/* Send a WALLOPS/GLOBOPS when GETPASS is used */
bool WallGetpass;
/* Send a WALLOPS/GLOBOPS when SETPASS is used */
bool WallSetpass;
/* Add the akillers nick to the akill reason */
bool AddAkiller;
/* Limit sessions */
bool LimitSessions;
/* The default session limit */
unsigned DefSessionLimit;
/* How long before exceptions expire */
time_t ExceptionExpiry;
/* How many times to kill before adding an KILL */
int MaxSessionKill;
/* Max limit that can be used for exceptions */
unsigned MaxSessionLimit;
/* How long session akills should last */
time_t SessionAutoKillExpiry;
/* Reason to use for session kills */
char *SessionLimitExceeded;
/* Optional second reason */
char *SessionLimitDetailsLoc;
/* OperServ requires you to be an operator */
bool OSOpersOnly;
/* List of modules to autoload */
std::list<std::string> ModulesAutoLoad;
/* Encryption modules */
std::list<std::string> EncModuleList;
/* Database modules */
std::list<std::string> DBModuleList;
/* HostServ Core Modules */
std::list<std::string> HostServCoreModules;
/* MemoServ Core Modules */
std::list<std::string> MemoServCoreModules;
/* BotServ Core Modules */
std::list<std::string> BotServCoreModules;
/* OperServ Core Modules */
std::list<std::string> OperServCoreModules;
/* NickServ Core Modules */
std::list<std::string> NickServCoreModules;
/* ChanServ Core Modules */
std::list<std::string> ChanServCoreModules;
/* Default defcon level */
int DefConLevel;
/* Timeout before defcon is reset */
time_t DefConTimeOut;
/* Session limiit to use when using defcon */
int DefConSessionLimit;
/* How long to add akills for defcon */
time_t DefConAKILL;
/* Chan modes for defcon */
char *DefConChanModes;
/* Should we global on defcon */
bool GlobalOnDefcon;
/* Should we send DefconMessage aswell? */
bool GlobalOnDefconMore;
/* Message to send when defcon is off */
char *DefConOffMessage;
/* Message to send when defcon is on*/
char *DefconMessage;
/* Reason to akill clients for defcon */
char *DefConAkillReason;
/* User keys to use for generating random hashes for pass codes etc */
long unsigned int UserKey1;
long unsigned int UserKey2;
long unsigned int UserKey3;
/* Numeric */
char *Numeric;
/* Array of ulined servers */
char **Ulines;
/* Number of ulines */
int NumUlines;
/* List of available opertypes */
std::list<OperType *> MyOperTypes;
/* List of pairs of opers and their opertype from the config */
std::list<std::pair<std::string, std::string> > Opers;
};
/** This class can be used on its own to represent an exception, or derived to represent a module-specific exception.
@@ -395,7 +776,7 @@ class ConfigException : public CoreException
* Actually no, it does nothing. Never mind.
* @throws Nothing!
*/
virtual ~ConfigException() throw() { };
virtual ~ConfigException() throw() { }
};
#define CONF_NO_ERROR 0x000000
-71
View File
@@ -1,71 +0,0 @@
/* Database file descriptor structure and file handling routine prototypes.
*
* (C) 2003-2009 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* $Id$
*
*/
#ifndef DATAFILES_H
#define DATAFILES_H
#ifndef _WIN32
#include <sys/param.h>
#endif
/*************************************************************************/
typedef struct dbFILE_ dbFILE;
struct dbFILE_ {
int mode; /* 'r' for reading, 'w' for writing */
FILE *fp; /* The normal file descriptor */
FILE *backupfp; /* Open file pointer to a backup copy of
* the database file (if non-NULL) */
char filename[MAXPATHLEN]; /* Name of the database file */
char backupname[MAXPATHLEN]; /* Name of the backup file */
};
/*************************************************************************/
/* Prototypes and macros: */
E void check_file_version(dbFILE *f);
E int get_file_version(dbFILE *f);
E int write_file_version(dbFILE *f, uint32 version);
E dbFILE *open_db(const char *service, const char *filename, const char *mode, uint32 version);
E void restore_db(dbFILE *f); /* Restore to state before open_db() */
E void close_db(dbFILE *f);
E void backup_databases();
#define read_db(f,buf,len) (fread((buf),1,(len),(f)->fp))
#define write_db(f,buf,len) (fwrite((buf),1,(len),(f)->fp))
#define getc_db(f) (fgetc((f)->fp))
E int read_int16(uint16 *ret, dbFILE *f);
E int write_int16(uint16 val, dbFILE *f);
E int read_int32(uint32 *ret, dbFILE *f);
E int write_int32(uint32 val, dbFILE *f);
E int read_ptr(void **ret, dbFILE *f);
E int write_ptr(const void *ptr, dbFILE *f);
E int read_string(char **ret, dbFILE *f);
E int write_string(const char *s, dbFILE *f);
#define read_int8(ret,f) ((*(ret)=fgetc((f)->fp))==EOF ? -1 : 0)
#define write_int8(val,f) (fputc((val),(f)->fp)==EOF ? -1 : 0)
#define read_buffer(buf,f) (read_db((f),(buf),sizeof(buf)) == sizeof(buf))
#define write_buffer(buf,f) (write_db((f),(buf),sizeof(buf)) == sizeof(buf))
#define read_buflen(buf,len,f) (read_db((f),(buf),(len)) == (len))
#define write_buflen(buf,len,f) (write_db((f),(buf),(len)) == (len))
#define read_variable(var,f) (read_db((f),&(var),sizeof(var)) == sizeof(var))
#define write_variable(var,f) (write_db((f),&(var),sizeof(var)) == sizeof(var))
/*************************************************************************/
#endif /* DATAFILES_H */
+1 -1
View File
@@ -1,6 +1,6 @@
/* Set default values for any constants that should be in include files but
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
+232
View File
@@ -0,0 +1,232 @@
/*
*
* Copyright (C) 2008-2010 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*
*
* $Id$
*
*/
/** Dummy base class we use to cast everything to/from
*/
class ExtensibleItemBase
{
public:
ExtensibleItemBase() { }
virtual ~ExtensibleItemBase() { }
};
/** Class used to represent an extensible item that doesn't hold a pointer
*/
template<typename T> class ExtensibleItemRegular : public ExtensibleItemBase
{
protected:
T Item;
public:
ExtensibleItemRegular(T item) : Item(item) { }
virtual ~ExtensibleItemRegular() { }
T GetItem() const { return Item; }
};
/** Class used to represent an extensible item that holds a pointer
*/
template<typename T> class ExtensibleItemPointer : public ExtensibleItemBase
{
protected:
T *Item;
public:
ExtensibleItemPointer(T *item) : Item(item) { }
virtual ~ExtensibleItemPointer() { delete Item; }
T *GetItem() const { return Item; }
};
/** Class used to represent an extensible item that holds a pointer to an arrray
*/
template<typename T> class ExtensibleItemPointerArray : public ExtensibleItemBase
{
protected:
T *Item;
public:
ExtensibleItemPointerArray(T *item) : Item(item) { }
virtual ~ExtensibleItemPointerArray() { delete [] Item; }
T *GetItem() const { return Item; }
};
class CoreExport Extensible
{
private:
std::map<std::string, ExtensibleItemBase *> Extension_Items;
public:
/** Default constructor, does nothing
*/
Extensible() { }
/** Default destructor, deletes all of the extensible items in this object
* then clears the map
*/
virtual ~Extensible()
{
for (std::map<std::string, ExtensibleItemBase *>::iterator it = Extension_Items.begin(); it != Extension_Items.end(); ++it)
{
delete it->second;
}
Extension_Items.clear();
}
/** Extend an Extensible class.
*
* @param key The key parameter is an arbitary string which identifies the extension data
* @param p This parameter is a pointer to an ExtensibleItem or ExtensibleItemBase derived class
*
* You must provide a key to store the data as via the parameter 'key'.
* The data will be inserted into the map. If the data already exists, you may not insert it
* twice, Extensible::Extend will return false in this case.
*
* @return Returns true on success, false if otherwise
*/
bool Extend(const std::string &key, ExtensibleItemBase *p)
{
bool Ret = this->Extension_Items.insert(std::make_pair(key, p)).second;
if (!Ret)
delete p;
return Ret;
}
/** Extend an Extensible class.
*
* @param key The key parameter is an arbitary string which identifies the extension data
*
* You must provide a key to store the data as via the parameter 'key', this single-parameter
* version takes no 'data' parameter, this is used purely for boolean values.
* The key will be inserted into the map with a NULL 'data' pointer. If the key already exists
* then you may not insert it twice, Extensible::Extend will return false in this case.
*
* @return Returns true on success, false if otherwise
*/
bool Extend(const std::string &key)
{
/* This will only add an item if it doesnt already exist,
* the return value is a std::pair of an iterator to the
* element, and a bool saying if it was actually inserted.
*/
return this->Extend(key, new ExtensibleItemRegular<char *>(NULL));
}
/** Shrink an Extensible class.
*
* @param key The key parameter is an arbitary string which identifies the extension data
*
* You must provide a key name. The given key name will be removed from the classes data. If
* you provide a nonexistent key (case is important) then the function will return false.
* @return Returns true on success.
*/
bool Shrink(const std::string &key)
{
std::map<std::string, ExtensibleItemBase *>::iterator it = this->Extension_Items.find(key);
if (it != this->Extension_Items.end())
{
delete it->second;
/* map::size_type map::erase( const key_type& key );
* returns the number of elements removed, std::map
* is single-associative so this should only be 0 or 1
*/
return this->Extension_Items.erase(key);
}
return false;
}
/** Get an extension item that is not a pointer.
*
* @param key The key parameter is an arbitary string which identifies the extension data
* @param p If you provide a non-existent key, this value will be 0. Otherwise a copy to the item you requested will be placed in this templated parameter.
* @return Returns true if the item was found and false if it was nor, regardless of wether 'p' is NULL. This allows you to store NULL values in Extensible.
*/
template<typename T> bool GetExtRegular(const std::string &key, T &p)
{
std::map<std::string, ExtensibleItemBase *>::iterator it = this->Extension_Items.find(key);
if (it != this->Extension_Items.end())
{
p = dynamic_cast<ExtensibleItemRegular<T> *>(it->second)->GetItem();
return true;
}
return false;
}
/** Get an extension item that is a pointer.
*
* @param key The key parameter is an arbitary string which identifies the extension data
* * @param p If you provide a non-existent key, this value will be NULL. Otherwise a pointer to the item you requested will be placed in this templated parameter.
* @return Returns true if the item was found and false if it was nor, regardless of wether 'p' is NULL. This allows you to store NULL values in Extensible.
*/
template<typename T> bool GetExtPointer(const std::string &key, T *&p)
{
std::map<std::string, ExtensibleItemBase *>::iterator it = this->Extension_Items.find(key);
if (it != this->Extension_Items.end())
{
p = dynamic_cast<ExtensibleItemPointer<T> *>(it->second)->GetItem();
return true;
}
p = NULL;
return false;
}
/** Get an extension item that is a pointer to an array
*
* @param key The key parameter is an arbitary string which identifies the extension data
* @param p If you provide a non-existent key, this value will be NULL. Otherwise a pointer to the item you requested will be placed in this templated parameter.
* @return Returns true if the item was found and false if it was nor, regardless of wether 'p' is NULL. This allows you to store NULL values in Extensible.
*/
template<typename T> bool GetExtArray(const std::string &key, T *&p)
{
std::map<std::string, ExtensibleItemBase *>::iterator it = this->Extension_Items.find(key);
if (it != this->Extension_Items.end())
{
p = dynamic_cast<ExtensibleItemPointerArray<T> *>(it->second)->GetItem();
return true;
}
p = NULL;
return false;
}
/** Get an extension item.
*
* @param key The key parameter is an arbitary string which identifies the extension data
* @return Returns true if the item was found and false if it was not.
*
* This single-parameter version only checks if the key exists, it does nothing with
* the 'data' field and is probably only useful in conjunction with the single-parameter
* version of Extend().
*/
bool GetExt(const std::string &key)
{
return (this->Extension_Items.find(key) != this->Extension_Items.end());
}
/** Get a list of all extension items names.
* @param list A deque of strings to receive the list
* @return This function writes a list of all extension items stored
* in this object by name into the given deque and returns void.
*/
void GetExtList(std::deque<std::string> &list)
{
for (std::map<std::string, ExtensibleItemBase *>::iterator i = Extension_Items.begin(); i != Extension_Items.end(); ++i)
{
list.push_back(i->first);
}
}
};
+84 -436
View File
@@ -1,6 +1,6 @@
/* Prototypes and external variable declarations.
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
@@ -19,6 +19,7 @@
#define EI extern DllExport
#include "slist.h"
#include "hashcomp.h"
E void ModuleRunTimeDirCleanUp();
@@ -28,26 +29,15 @@ E char *uplink;
/* IRC Variables */
E IRCDVar *ircd;
E IRCDCAPAB *ircdcap;
E char *flood_mode_char_set;
E char *flood_mode_char_remove;
E int UseTSMODE; /* hack to get around bahamut clones that don't send TSMODE */
EI unsigned long umodes[128];
E char csmodes[128];
E CMMode cmmodes[128];
E CBMode cbmodes[128];
E CBModeInfo *cbmodeinfos;
E CUMode cumodes[128];
E char *IRCDModule;
E IRCDProto *ircdproto;
/**** actions.c ****/
E void kill_user(const char *source, const char *user, const char *reason);
E void bad_password(User * u);
E void sqline(char *mask, char *reason);
E void common_unban(ChannelInfo * ci, char *nick);
E void common_svsmode(User * u, const char *modes, const char *arg);
E void kill_user(const std::string &source, const std::string &user, const std::string &reason);
E bool bad_password(User *u);
E void sqline(const std::string &mask, const std::string &reason);
E void common_unban(ChannelInfo *ci, const std::string &nick);
/**** botserv.c ****/
@@ -58,15 +48,12 @@ E void bs_init();
E void botserv(User *u, char *buf);
E void botmsgs(User *u, BotInfo *bi, char *buf);
E void botchanmsgs(User *u, ChannelInfo *ci, char *buf);
E void load_bs_dbase();
E void save_bs_dbase();
E BotInfo *findbot(const char *nick);
E BotInfo *findbot(const std::string &nick);
/** Finds a pseudoclient, given a UID. Useful for TS6 protocol modules.
* @param uid The UID to search for
* @return The pseudoclient structure, or NULL if one could not be found
*/
E BotInfo *findbot_byuid(const char *uid);
E void bot_join(ChannelInfo *ci);
E char *normalizeBuffer(const char *);
E void insert_bot(BotInfo * bi);
@@ -79,56 +66,26 @@ E void bot_raw_mode(User * requester, ChannelInfo * ci, const char *mode, char *
E Channel *chanlist[1024];
E void add_ban(Channel * chan, const char *mask);
E void chan_adduser2(User * user, Channel * c);
E void add_invite(Channel * chan, const char *mask);
E void chan_delete(Channel * c);
E void del_ban(Channel * chan, const char *mask);
E void chan_set_key(Channel * chan, const char *value);
E void set_limit(Channel * chan, const char *value);
E void del_invite(Channel * chan, const char *mask);
E char *get_key(Channel * chan);
E char *get_limit(Channel * chan);
E Channel *chan_create(const char *chan, time_t ts);
E Channel *join_user_update(User * user, Channel * chan, const char *name, time_t chants);
E void add_exception(Channel * chan, const char *mask);
E void del_exception(Channel * chan, const char *mask);
E char *get_flood(Channel * chan);
E void set_flood(Channel * chan, const char *value);
E char *get_redirect(Channel * chan);
E void set_redirect(Channel * chan, const char *value);
E void get_channel_stats(long *nrec, long *memuse);
E Channel *findchan(const char *chan);
E Channel *firstchan();
E Channel *nextchan();
E void chan_deluser(User * user, Channel * c);
E void ChanSetInternalModes(Channel *c, int ac, const char **av);
E int is_on_chan(Channel * c, User * u);
E User *nc_on_chan(Channel * c, NickCore * nc);
E char *chan_get_modes(Channel * chan, int complete, int plus);
E void chan_set_modes(const char *source, Channel * chan, int ac,
const char **av, int check);
E int chan_get_user_status(Channel * chan, User * user);
E int chan_has_user_status(Channel * chan, User * user, int16 status);
E void chan_remove_user_status(Channel * chan, User * user, int16 status);
E void chan_set_user_status(Channel * chan, User * user, int16 status);
E int get_access_level(ChannelInfo * ci, NickAlias * na);
E const char *get_xop_level(int level);
E void do_cmode(const char *source, int ac, const char **av);
E void do_join(const char *source, int ac, const char **av);
E void do_kick(const char *source, int ac, const char **av);
E void do_kick(const std::string &source, int ac, const char **av);
E void do_part(const char *source, int ac, const char **av);
E void do_sjoin(const char *source, int ac, const char **av);
E void do_topic(const char *source, int ac, const char **av);
E void do_mass_mode(char *modes);
E void MassChannelModes(BotInfo *bi, const std::string &modes);
E void chan_set_correct_modes(User * user, Channel * c, int give_modes);
E void restore_unsynced_topics();
@@ -137,7 +94,7 @@ E Entry *entry_create(char *mask);
E Entry *entry_add(EList *list, const char *mask);
E void entry_delete(EList *list, Entry *e);
E EList *list_create();
E int entry_match(Entry *e, const char *nick, const char *user, const char *host, uint32 ip);
E int entry_match(Entry *e, const ci::string &nick, const ci::string &user, const ci::string &host, uint32 ip);
E int entry_match_mask(Entry *e, const char *mask, uint32 ip);
E Entry *elist_match(EList *list, const char *nick, const char *user, const char *host, uint32 ip);
E Entry *elist_match_mask(EList *list, const char *mask, uint32 ip);
@@ -146,28 +103,22 @@ E Entry *elist_find_mask(EList *list, const char *mask);
E long get_memuse(EList *list);
#define whosends(ci) ((!(ci) || !((ci)->botflags & BS_SYMBIOSIS) || !(ci)->bi || !(ci)->c || (ci)->c->usercount < BSMinUsers) ? findbot(s_ChanServ) : (ci)->bi)
#define whosends(ci) ((!(ci) || !((ci)->botflags.HasFlag(BS_SYMBIOSIS)) || !(ci)->bi || !(ci)->c || (ci)->c->users.size() < Config.BSMinUsers) ? findbot(Config.s_ChanServ) : (ci)->bi)
/**** chanserv.c ****/
E ChannelInfo *chanlists[256];
E CSModeUtil csmodeutils[];
E LevelInfo levelinfo[];
E void get_chanserv_stats(long *nrec, long *memuse);
E int delchan(ChannelInfo * ci);
E void alpha_insert_chan(ChannelInfo * ci);
E void reset_levels(ChannelInfo * ci);
E void cs_init();
E void chanserv(User * u, char *buf);
E void load_cs_dbase();
E void save_cs_dbase();
E void expire_chans();
E void cs_remove_nick(const NickCore * nc);
E int is_real_founder(User * user, ChannelInfo * ci);
E void check_modes(Channel * c);
E int check_valid_admin(User * user, Channel * chan, int servermode);
E int check_valid_op(User * user, Channel * chan, int servermode);
@@ -176,32 +127,22 @@ E int check_should_voice(User * user, char *chan);
E int check_should_halfop(User * user, char *chan);
E int check_should_owner(User * user, char *chan);
E int check_should_protect(User * user, char *chan);
E int check_kick(User * user, const char *chan, time_t chants);
E void record_topic(const char *chan);
E void restore_topic(const char *chan);
E int check_topiclock(Channel * c, time_t topic_time);
E ChannelInfo *cs_findchan(const char *chan);
E ChannelInfo *cs_findchan(const std::string &chan);
E int check_access(User * user, ChannelInfo * ci, int what);
E int is_founder(User * user, ChannelInfo * ci);
E int get_access(User * user, ChannelInfo * ci);
E bool IsFounder(User *user, ChannelInfo *ci);
E bool IsRealFounder(User *user, ChannelInfo *ci);
E int get_access(User *user, ChannelInfo *ci);
E void update_cs_lastseen(User * user, ChannelInfo * ci);
E int get_idealban(ChannelInfo * ci, User * u, char *ret, int retlen);
E AutoKick *is_stuck(ChannelInfo * ci, const char *mask);
E void stick_mask(ChannelInfo * ci, AutoKick * akick);
E void stick_all(ChannelInfo * ci);
E char *cs_get_flood(ChannelInfo * ci);
E void cs_set_flood(ChannelInfo * ci, const char *value);
E char *cs_get_key(ChannelInfo * ci);
E void cs_set_key(ChannelInfo * ci, const char *value);
E char *cs_get_limit(ChannelInfo * ci);
E void cs_set_limit(ChannelInfo * ci, const char *value);
E char *cs_get_redirect(ChannelInfo * ci);
E void cs_set_redirect(ChannelInfo * ci, const char *value);
E int levelinfo_maxwidth;
E ChannelInfo *makechan(const char *chan);
E int is_identified(User * user, ChannelInfo * ci);
E char *get_mlock_modes(ChannelInfo * ci, int complete);
/**** compat.c ****/
@@ -216,262 +157,30 @@ char *sockstrerror(int error);
/**** config.c ****/
E ServerConfig serverConfig;
E std::list<Uplink *> Uplinks;
E char *LocalHost;
E unsigned LocalPort;
E char *ServerName;
E char *ServerDesc;
E char *ServiceUser;
E char *ServiceHost;
E char *HelpChannel;
E char *LogChannel;
E char *NetworkName;
E unsigned NickLen;
E char *s_NickServ;
E char *s_ChanServ;
E char *s_MemoServ;
E char *s_BotServ;
E char *s_OperServ;
E char *s_GlobalNoticer;
E char *desc_NickServ;
E char *desc_ChanServ;
E char *desc_MemoServ;
E char *desc_BotServ;
E char *desc_OperServ;
E char *desc_GlobalNoticer;
E char *HostDBName;
E char *desc_HostServ;
E char *s_HostServ;
E void load_hs_dbase();
E void save_hs_dbase();
E int do_on_id(User * u);
E void delHostCore(const char *nick);
E void hostserv(User * u, char *buf);
E char *PIDFilename;
E char *MOTDFilename;
E char *NickDBName;
E char *PreNickDBName;
E char *ChanDBName;
E char *BotDBName;
E char *OperDBName;
E char *NewsDBName;
E bool NoBackupOkay;
E bool StrictPasswords;
E unsigned BadPassLimit;
E time_t BadPassTimeout;
E time_t UpdateTimeout;
E time_t ExpireTimeout;
E time_t ReadTimeout;
E time_t WarningTimeout;
E time_t TimeoutCheck;
E int KeepLogs;
E int KeepBackups;
E bool ForceForbidReason;
E bool UsePrivmsg;
E bool UseStrictPrivMsg;
E bool DumpCore;
E bool LogUsers;
E unsigned NickRegDelay;
E bool RestrictOperNicks;
E unsigned NewsCount;
E char *Numeric;
E bool UseMail;
E char *SendMailPath;
E char *SendFrom;
E bool RestrictMail;
E time_t MailDelay;
E bool DontQuoteAddresses;
E int NSDefFlags;
E unsigned NSDefLanguage;
E time_t NSRegDelay;
E time_t NSResendDelay;
E time_t NSExpire;
E time_t NSRExpire;
E bool NSForceEmail;
E int NSMaxAliases;
E unsigned NSAccessMax;
E char *NSEnforcerUser;
E char *NSEnforcerHost;
E time_t NSReleaseTimeout;
E bool NSAllowKillImmed;
E bool NSNoGroupChange;
E bool NSListOpersOnly;
E unsigned NSListMax;
E char *NSGuestNickPrefix;
E bool NSSecureAdmins;
E bool NSStrictPrivileges;
E bool NSEmailReg;
E bool NSModeOnID;
E bool NSAddAccessOnReg;
E int CSDefFlags;
E unsigned CSMaxReg;
E time_t CSExpire;
E int CSDefBantype;
E unsigned CSAccessMax;
E unsigned CSAutokickMax;
E char *CSAutokickReason;
E time_t CSInhabit;
E bool CSListOpersOnly;
E unsigned CSListMax;
E bool CSRestrictGetPass;
E bool CSOpersOnly;
E unsigned MSMaxMemos;
E time_t MSSendDelay;
E bool MSNotifyAll;
E unsigned MSMemoReceipt;
E int BSDefFlags;
E time_t BSKeepData;
E unsigned BSMinUsers;
E unsigned BSBadWordsMax;
E bool BSSmartJoin;
E bool BSGentleBWReason;
E bool BSCaseSensitive;
E char *BSFantasyCharacter;
E bool HideStatsO;
E bool GlobalOnCycle;
E bool AnonymousGlobal;
E char *GlobalOnCycleMessage;
E char *GlobalOnCycleUP;
E bool LogMaxUsers;
E bool SuperAdmin;
E bool LogBot;
E time_t AutokillExpiry;
E time_t ChankillExpiry;
E time_t SGLineExpiry;
E time_t SQLineExpiry;
E time_t SZLineExpiry;
E bool AkillOnAdd;
E bool KillonSGline;
E bool KillonSQline;
E bool WallOper;
E bool WallBadOS;
E bool WallOSGlobal;
E bool WallOSMode;
E bool WallOSClearmodes;
E bool WallOSKick;
E bool WallOSAkill;
E bool WallOSSGLine;
E bool WallOSSQLine;
E bool WallOSSZLine;
E bool WallOSNoOp;
E bool WallOSJupe;
E bool WallAkillExpire;
E bool WallSGLineExpire;
E bool WallSQLineExpire;
E bool WallSZLineExpire;
E bool WallExceptionExpire;
E bool WallDrop;
E bool WallForbid;
E bool WallGetpass;
E bool WallSetpass;
E bool AddAkiller;
/**
* Modules Stuff
**/
E char **ModulesAutoload;
E int ModulesNumber;
E char **ModulesDelayedAutoload;
E int ModulesDelayedNumber;
E char **HostServCoreModules;
E int HostServCoreNumber;
E char **MemoServCoreModules;
E int MemoServCoreNumber;
E char **BotServCoreModules;
E int BotServCoreNumber;
E char **OperServCoreModules;
E int OperServCoreNumber;
E char **NickServCoreModules;
E int NickServCoreNumber;
E char **ChanServCoreModules;
E int ChanServCoreNumber;
E bool LimitSessions;
E unsigned DefSessionLimit;
E time_t ExceptionExpiry;
E int MaxSessionKill;
E unsigned MaxSessionLimit;
E time_t SessionAutoKillExpiry;
E char *ExceptionDBName;
E char *SessionLimitDetailsLoc;
E char *SessionLimitExceeded;
E char **Ulines;
E int NumUlines;
E std::string services_conf;
E ServerConfig Config;
E int read_config(int reload);
E int DefConLevel;
E int DefCon[6];
E int checkDefCon(int level);
E void resetDefCon(int level);
E int DefConSessionLimit;
E time_t DefConTimeOut;
E time_t DefConAKILL;
E char *DefConChanModes;
E bool GlobalOnDefcon;
E bool GlobalOnDefconMore;
E char *DefconMessage;
E char *DefConAkillReason;
E char *DefConOffMessage;
E long unsigned int UserKey1;
E long unsigned int UserKey2;
E long unsigned int UserKey3;
/**** converter.c ****/
E int convert_ircservices_44();
/* hostserv.c */
E void do_on_id(User *u);
E void hostserv(User *u, char *buf);
E void HostServSyncVhosts(NickAlias *na);
/**** encrypt.c ****/
E char *EncModule;
E void initEncryption();
E int enc_encrypt(const char *src, int len, char *dest, int size);
E int enc_encrypt_in_place(char *buf, int size);
E int enc_encrypt_check_len(int passlen, int bufsize);
E int enc_decrypt(const char *src, char *dest, int size);
E int enc_check_password(const char *plaintext, const char *password);
E void encmodule_encrypt(int (*func)(const char *src, int len, char *dest, int size));
E void encmodule_encrypt_in_place(int (*func)(char *buf, int size));
E void encmodule_encrypt_check_len(int (*func)(int passlen, int bufsize));
E void encmodule_decrypt(int (*func)(const char *src, char *dest, int size));
E void encmodule_check_password(int (*func)(const char *plaintext, const char *password));
E int enc_encrypt(const std::string &src, std::string &dest);
E int enc_encrypt_in_place(std::string &buf);
E int enc_decrypt(const std::string &src, std::string &dest);
E int enc_check_password(std::string &plaintext, std::string &password);
/**** hostserv.c ****/
E void get_hostserv_stats(long *nrec, long *memuse);
E void hostserv_init();
E void addHostCore(const char *nick, char *vIdent, char *vhost, const char *creator, int32 tmp_time);
E char *getvIdent(char *nick);
E char *getvHost(char *nick);
E HostCore *hostCoreListHead();
E HostCore *findHostCore(HostCore * head, const char *nick, bool *found);
E HostCore *createHostCorelist(HostCore * next, const char *nick, char *vIdent, char *vHost, const char *creator, int32 tmp_time);
E HostCore *insertHostCore(HostCore * head, HostCore * prev, const char *nick, char *vIdent, char *vHost, const char *creator, int32 tmp_time);
E HostCore *deleteHostCore(HostCore * head, HostCore * prev);
E void set_lastmask(User * u);
/**** init.c ****/
E void introduce_user(const char *user);
E void introduce_user(const std::string &user);
E bool GetCommandLineArgument(const std::string &name, char shortname = 0);
E bool GetCommandLineArgument(const std::string &name, char shortname, std::string &param);
E int init_primary(int ac, char **av);
E int init_secondary(int ac, char **av);
E Uplink *uplink_server;
@@ -479,31 +188,8 @@ E Uplink *uplink_server;
/**** ircd.c ****/
E void pmodule_ircd_proto(IRCDProto *);
E void pmodule_ircd_var(IRCDVar * ircdvar);
E void pmodule_ircd_cap(IRCDCAPAB * cap);
E void pmodule_ircd_version(const char *version);
E void pmodule_ircd_cbmodeinfos(CBModeInfo * modeinfos);
E void pmodule_ircd_cumodes(CUMode modes[128]);
E void pmodule_ircd_flood_mode_char_set(const char *mode);
E void pmodule_ircd_flood_mode_char_remove(const char *mode);
E void pmodule_ircd_cbmodes(CBMode modes[128]);
E void pmodule_ircd_cmmodes(CMMode modes[128]);
E void pmodule_ircd_csmodes(char mode[128]);
E void pmodule_ircd_useTSMode(int use);
E void pmodule_invis_umode(int mode);
E void pmodule_oper_umode(int mode);
E void pmodule_invite_cmode(int mode);
E void pmodule_secret_cmode(int mode);
E void pmodule_private_cmode(int mode);
E void pmodule_key_mode(int mode);
E void pmodule_limit_mode(int mode);
E int anope_get_secret_mode();
E int anope_get_invite_mode();
E int anope_get_key_mode();
E int anope_get_limit_mode();
E int anope_get_private_mode();
E int anope_get_invis_mode();
E int anope_get_oper_mode();
/**** language.c ****/
@@ -524,7 +210,6 @@ E const char *getstring(int index);
E int open_log();
E void close_log();
E void alog(const char *fmt, ...) FORMAT(printf,1,2);
E void log_perror(const char *fmt, ...) FORMAT(printf,1,2);
E void fatal(const char *fmt, ...) FORMAT(printf,1,2);
E void fatal_perror(const char *fmt, ...) FORMAT(printf,1,2);
@@ -547,10 +232,10 @@ E char *version_protocol;
E const char version_flags[];
E std::string services_dir;
E const char *log_filename;
E std::string log_filename;
E int debug;
E int readonly;
E int logchan;
E bool LogChan;
E int nofork;
E int forceload;
E int nothird;
@@ -559,14 +244,14 @@ E int protocoldebug;
E int is44;
E int quitting;
E int delayed_quit;
E int shutting_down;
E const char *quitmsg;
E char inbuf[BUFSIZE];
E int servsock;
E int save_data;
E int got_alarm;
E time_t start_time;
E Socket *UplinkSock;
E void save_databases();
E void expire_all();
E void sighandler(int signum);
@@ -593,9 +278,9 @@ E int delmemo(MemoInfo * mi, int num);
E int m_nickcoll(const char *user);
E int m_away(const char *source, const char *msg);
E int m_kill(const char *nick, const char *msg);
E int m_kill(const std::string &nick, const char *msg);
E int m_motd(const char *source);
E int m_privmsg(const char *source, const char *receiver, const char *msg);
E int m_privmsg(const char *source, const std::string &receiver, const char *msg);
E int m_stats(const char *source, int ac, const char **av);
E int m_whois(const char *source, const char *who);
E int m_time(const char *source, int ac, const char **av);
@@ -639,7 +324,7 @@ E char *myStrGetTokenRemainder(const char *str, const char dilim,
E char *stripModePrefix(const char *str);
E int myNumToken(const char *str, const char dilim);
E void doCleanBuffer(char *str);
E void EnforceQlinedNick(const char *nick, const char *killer);
E void EnforceQlinedNick(const std::string &nick, const char *killer);
E int nickIsServices(const char *nick, int bot);
E void add_entropy_userkeys();
@@ -652,7 +337,10 @@ E char *str_signed(unsigned char *str);
E void ntoa(struct in_addr addr, char *ipaddr, int len);
E char **buildStringList(const std::string &src, int *number);
E std::list<std::string> BuildStringList(const std::string &);
E std::list<ci::string> BuildStringList(const ci::string &);
E std::vector<std::string> BuildStringVector(const std::string &);
E void binary_to_hex(unsigned char *bin, char *hex, int length);
E uint32 cidr_to_netmask(uint16 cidr);
@@ -664,27 +352,18 @@ E int str_is_pure_wildcard(const char *str);
E uint32 str_is_ip(char *str);
E int str_is_cidr(char *str, uint32 * ip, uint32 * mask, char **host);
/**** modes.cpp ****/
/* Number of generic modes we support */
E unsigned GenericChannelModes, GenericUserModes;
E std::bitset<128> DefMLockOn;
E std::bitset<128> DefMLockOff;
E std::map<ChannelModeName, std::string> DefMLockParams;
/* Modes to set on bots when they join the channel */
E std::list<ChannelModeStatus *> BotModes;
E void SetDefaultMLock();
/**** modules.c ****/
E void modules_unload_all(bool unload_proto); /* Read warnings near function source */
E void ModuleDatabaseBackup(const char *dbname);
E void ModuleRemoveBackups(const char *dbname);
/**** news.c ****/
/* Add news items. */
E int add_newsitem(User * u, const char *text, int16 type);
/* Delete news items. */
E int del_newsitem(int num, int16 type);
E int32 nnews, news_size;
E NewsItem *news;
E void get_news_stats(long *nrec, long *memuse);
E void load_news();
E void save_news();
E void display_news(User * u, int16 type);
E int do_logonnews(User * u);
E int do_opernews(User * u);
E int do_randomnews(User * u);
/**** nickserv.c ****/
@@ -692,57 +371,39 @@ E NickAlias *nalists[1024];
E NickCore *nclists[1024];
E NickRequest *nrlists[1024];
E NickRequest *findrequestnick(const char *nick);
E int delnickrequest(NickRequest * nr);
E unsigned int guestnum;
E void insert_requestnick(NickRequest * nr);
E void alpha_insert_alias(NickAlias * na);
E void insert_core(NickCore * nc);
E void get_aliases_stats(long *nrec, long *memuse);
E void get_core_stats(long *nrec, long *memuse);
E void collide(NickAlias * na, int from_timeout);
E void del_ns_timeout(NickAlias * na, int type);
E void change_core_display(NickCore * nc);
E void change_core_display(NickCore * nc, const char *newdisplay);
E void release(NickAlias * na, int from_timeout);
E int do_setmodes(User * u);
E int should_mode_change(int16 status, int16 mode);
E void ns_init();
E void nickserv(User * u, char *buf);
E void load_ns_dbase();
E void load_ns_req_db();
E void save_ns_dbase();
E void save_ns_req_dbase();
E int validate_user(User * u);
E void cancel_user(User * u);
E int nick_identified(User * u);
E void expire_nicks();
E void expire_requests();
EI int ns_do_register(User * u);
E int delnick(NickAlias * na);
E NickAlias *findnick(const char *nick);
E NickAlias *findnick(const std::string &nick);
E NickCore *findcore(const char *nick);
E bool is_on_access(User *u, NickCore *nc);
/** Set the correct oper type for a nickcore
* @param nc The nick core
*/
E void SetOperType(NickCore *nc);
/**** operserv.c ****/
E SList akills, sglines, sqlines, szlines;
E int DefConModesSet;
E uint32 DefConModesOn;
E uint32 DefConModesOff;
E ChannelInfo DefConModesCI;
E Flags<ChannelModeName> DefConModesOn;
E Flags<ChannelModeName> DefConModesOff;
E std::map<ChannelModeName, std::string> DefConModesOnParams;
E bool SetDefConParam(ChannelModeName, std::string &);
E bool GetDefConParam(ChannelModeName, std::string *);
E void UnsetDefConParam(ChannelModeName);
E void operserv(User *u, char *buf);
E void os_init();
E void load_os_dbase();
E void save_os_dbase();
E int add_akill(User *u, const char *mask, const char *by, const time_t expires, const char *reason);
E int check_akill(const char *nick, const char *username, const char *host, const char *vhost, const char *ip);
@@ -765,10 +426,13 @@ E int check_szline(const char *nick, char *ip);
E Server *server_global(Server * s, char *msg);
E bool OSOpersOnly;
E time_t DefContimer;
E void runDefCon();
E int defconParseModeString(const char *str);
E std::vector<NewsItem *> News;
E bool CheckDefCon(DefconLevel Level);
E bool CheckDefCon(int level, DefconLevel Level);
E void AddDefCon(int level, DefconLevel Level);
E void DelDefCon(int level, DefconLevel Level);
E std::vector<std::bitset<32> > DefCon;
/**** process.c ****/
@@ -781,7 +445,7 @@ E int delete_ignore(const char *nick);
E int clear_ignores();
E int split_buf(char *buf, const char ***argv, int colon_special);
E void process();
E void process(const std::string &buf);
/**** send.c ****/
@@ -792,7 +456,7 @@ E void notice_server(char *source, Server * s, const char *fmt, ...)
FORMAT(printf,3,4);
E void notice_list(const char *source, const char *dest, char **text); // MARK_DEPRECATED;
E void notice_lang(const char *source, User *dest, int message, ...); // MARK_DEPRECATED;
E void notice_lang(const std::string &source, User *dest, int message, ...); // MARK_DEPRECATED;
E void notice_help(const char *source, User *dest, int message, ...); // MARK_DEPRECATED;
@@ -801,23 +465,22 @@ E void notice_help(const char *source, User *dest, int message, ...); // MARK_DE
E Server *servlist;
E Server *me_server;
E Server *serv_uplink;
E uint32 uplink_capab;
E CapabInfo capab_info[];
E Flags<CapabType> Capab;
E CapabInfo Capab_Info[];
E Server *first_server(int flags);
E Server *next_server(int flags);
E Server *first_server(ServerFlag flag);
E Server *next_server(ServerFlag flag);
E void CapabParse(int ac, const char **av);
E int is_ulined(const char *server);
E int is_sync(Server *server);
E Server *new_server(Server * uplink, const char *name, const char *desc,
uint16 flags, const char *suid);
E Server *new_server(Server * uplink, const char *name, const char *desc, ServerFlag flag, const std::string &suid);
E Server *findserver(Server *s, const char *name);
E void do_server(const char *source, const char *servername, const char *hops, const char *descript, const char *numeric);
E void do_server(const char *source, const char *servername, const char *hops, const char *descript, const std::string &numeric);
E void do_squit(const char *source, int ac, const char **av);
E void capab_parse(int ac, const char **av);
E int anope_check_sync(const char *name);
E void finish_sync(Server *serv, int sync_links);
@@ -839,13 +502,9 @@ E int32 nsessions;
E void get_session_stats(long *nrec, long *memuse);
E void get_exception_stats(long *nrec, long *memuse);
E int do_session(User *u);
E int add_session(const char *nick, const char *host, char *hostip);
E void del_session(const char *host);
E void load_exceptions();
E void save_exceptions();
E int do_exception(User *u);
E void expire_exceptions();
E Session *findsession(const char *host);
@@ -869,20 +528,10 @@ E void slist_pack(SList *slist);
E int slist_remove(SList *slist, void *item);
E int slist_setcapacity(SList *slist, int16 capacity);
/**** sockutil.c ****/
E int32 total_read, total_written;
E int32 read_buffer_len();
E int32 write_buffer_len();
E int sgetc(ano_socket_t s);
E char *sgets(char *buf, int len, ano_socket_t s);
E char *sgets2(char *buf, int len, ano_socket_t s);
E int sread(ano_socket_t s, char *buf, int len);
E int sputs(char *str, ano_socket_t s);
E int sockprintf(ano_socket_t s, const char *fmt, ...);
E int conn(const char *host, int port, const char *lhost, int lport);
E void disconn(ano_socket_t s);
/**** sockets.cpp ****/
E SocketEngine socketEngine;
E int32 TotalRead;
E int32 TotalWritten;
/**** users.c ****/
@@ -893,11 +542,11 @@ E uint32 maxusercnt, usercnt;
E time_t maxusertime;
E void get_user_stats(long *nusers, long *memuse);
E User *finduser(const char *nick);
E User *finduser(const std::string &nick);
E User *firstuser();
E User *nextuser();
E User *find_byuid(const char *uid);
E User *find_byuid(const std::string &uid);
E User *first_uid();
E User *next_uid();
E Server *findserver_uid(Server * s, const char *name);
@@ -909,7 +558,7 @@ E User *do_nick(const char *source, const char *nick, const char *username, cons
E void do_umode(const char *source, int ac, const char **av);
E void do_quit(const char *source, int ac, const char **av);
E void do_kill(const char *source, const char *reason);
E void do_kill(const std::string &source, const std::string &reason);
E int is_oper(User * user);
E int is_protected(User * user);
@@ -920,21 +569,20 @@ E int is_excepted_mask(ChannelInfo * ci, const char *mask);
E int match_usermask(const char *mask, User * user);
E char *create_mask(User * u);
E void UserSetInternalModes(User *user, int ac, const char **av);
/******************************************************************************/
E const char* base64enc(long i);
E long base64dec(char *b64);
E const char *base64enc(long i);
E long base64dec(const char *b64);
E long base64dects(const char *ts);
E int b64_encode(char *src, size_t srclength, char *target, size_t targsize);
E int b64_encode(const char *src, size_t srclength, char *target, size_t targsize);
E int b64_decode(const char *src, char *target, size_t targsize);
E const char* encode_ip(unsigned char *ip);
E const char *encode_ip(unsigned char *ip);
E int decode_ip(const char *buf);
E char *host_resolve(char *host);
E void event_process_hook(const char *name, int argc, char **argv);
#ifdef _WIN32
E char *GetWindowsVersion() ;
E int SupportedWindowsVersion();
+18 -11
View File
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2002-2009 InspIRCd Development Team
* Copyright (C) 2009 Anope Team <team@anope.org>
* Copyright (C) 2002-2010 InspIRCd Development Team
* Copyright (C) 2009-2010 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*
@@ -113,7 +113,7 @@ namespace irc
* @return similar to strcmp, zero for equal, less than zero for str1
* being less and greater than zero for str1 being greater than str2.
*/
static CoreExport int compare(const char *str1, const char *str2, size_t n);
static int compare(const char *str1, const char *str2, size_t n);
/** Find a char within a string up to position n.
* @param s1 String to find in
@@ -121,7 +121,7 @@ namespace irc
* @param c Character to search for
* @return Pointer to the first occurance of c in s1
*/
static CoreExport const char *find(const char *s1, int n, char c);
static const char *find(const char *s1, int n, char c);
};
/** This typedef declares irc::string based upon irc_char_traits.
@@ -137,7 +137,7 @@ namespace ci
* This class is used to implement ci::string, a case-insensitive, ASCII-
* comparing string class.
*/
struct ci_char_traits : std::char_traits<char>
struct CoreExport ci_char_traits : std::char_traits<char>
{
/** Check if two chars match.
* @param c1st First character
@@ -167,7 +167,7 @@ namespace ci
* @return similar to strcmp, zero for equal, less than zero for str1
* being less and greater than zero for str1 being greater than str2.
*/
static CoreExport int compare(const char *str1, const char *str2, size_t n);
static int compare(const char *str1, const char *str2, size_t n);
/** Find a char within a string up to position n.
* @param s1 String to find in
@@ -175,7 +175,7 @@ namespace ci
* @param c Character to search for
* @return Pointer to the first occurance of c in s1
*/
static CoreExport const char *find(const char *s1, int n, char c);
static const char *find(const char *s1, int n, char c);
};
/** This typedef declares ci::string based upon ci_char_traits.
@@ -189,7 +189,7 @@ namespace ci
/** Operator << for irc::string
*/
inline std::ostream &operator<<(std::ostream &os, const irc::string &str) { return os << str.c_str(); }
inline std::ostream &operator<<(std::ostream &os, const irc::string &str) { return os << std::string(str.c_str()); }
/** Operator >> for irc::string
*/
@@ -203,7 +203,7 @@ inline std::istream &operator>>(std::istream &is, irc::string &str)
/** Operator << for ci::string
*/
inline std::ostream &operator<<(std::ostream &os, const ci::string &str) { return os << str.c_str(); }
inline std::ostream &operator<<(std::ostream &os, const ci::string &str) { return os << std::string(str.c_str()); }
/** Operator >> for ci::string
*/
@@ -425,6 +425,8 @@ class CoreExport sepstream
/** Create a sepstream and fill it with the provided data
*/
sepstream(const std::string &source, char seperator);
sepstream(const ci::string &source, char seperator);
sepstream(const char *source, char seperator);
virtual ~sepstream() { }
/** Fetch the next token from the stream
@@ -432,6 +434,7 @@ class CoreExport sepstream
* @return True if tokens still remain, false if there are none left
*/
virtual bool GetToken(std::string &token);
virtual bool GetToken(ci::string &token);
/** Fetch the entire remaining stream, without tokenizing
* @return The remaining part of the stream
@@ -446,22 +449,26 @@ class CoreExport sepstream
/** A derived form of sepstream, which seperates on commas
*/
class CoreExport commasepstream : public sepstream
class commasepstream : public sepstream
{
public:
/** Initialize with comma seperator
*/
commasepstream(const std::string &source) : sepstream(source, ',') { }
commasepstream(const ci::string &source) : sepstream(source, ',') { }
commasepstream(const char *source) : sepstream(source, ',') { }
};
/** A derived form of sepstream, which seperates on spaces
*/
class CoreExport spacesepstream : public sepstream
class spacesepstream : public sepstream
{
public:
/** Initialize with space seperator
*/
spacesepstream(const std::string &source) : sepstream(source, ' ') { }
spacesepstream(const ci::string &source) : sepstream(source, ' ') { }
spacesepstream(const char *source) : sepstream(source, ' ') { }
};
#endif
+1 -1
View File
@@ -1,6 +1,6 @@
/* Declarations of IRC message structures, variables, and functions.
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
+531
View File
@@ -0,0 +1,531 @@
/* Mode support
*
* Copyright (C) 2008-2010 Adam <Adam@anope.org>
* Copyright (C) 2008-2010 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*
*
* $Id$
*
*/
/** All of the valid user mode names
*/
enum UserModeName
{
UMODE_BEGIN,
UMODE_SERV_ADMIN, UMODE_BOT, UMODE_CO_ADMIN, UMODE_FILTER, UMODE_HIDEOPER, UMODE_NETADMIN,
UMODE_REGPRIV, UMODE_PROTECTED, UMODE_NO_CTCP, UMODE_WEBTV, UMODE_WHOIS, UMODE_ADMIN, UMODE_DEAF,
UMODE_GLOBOPS, UMODE_HELPOP, UMODE_INVIS, UMODE_OPER, UMODE_PRIV, UMODE_GOD, UMODE_REGISTERED,
UMODE_SNOMASK, UMODE_VHOST, UMODE_WALLOPS, UMODE_CLOAK, UMODE_SSL, UMODE_CALLERID, UMODE_COMMONCHANS,
UMODE_HIDDEN, UMODE_STRIPCOLOR,
UMODE_END
};
/** All of the valid channel mode names
*/
enum ChannelModeName
{
CMODE_BEGIN,
/* Channel modes */
CMODE_BLOCKCOLOR, CMODE_FLOOD, CMODE_INVITE, CMODE_KEY, CMODE_LIMIT, CMODE_MODERATED, CMODE_NOEXTERNAL,
CMODE_PRIVATE, CMODE_REGISTERED, CMODE_SECRET, CMODE_TOPIC, CMODE_AUDITORIUM, CMODE_SSL, CMODE_ADMINONLY,
CMODE_NOCTCP, CMODE_FILTER, CMODE_NOKNOCK, CMODE_REDIRECT, CMODE_REGMODERATED, CMODE_NONICK, CMODE_OPERONLY,
CMODE_NOKICK, CMODE_REGISTEREDONLY, CMODE_STRIPCOLOR, CMODE_NONOTICE, CMODE_NOINVITE, CMODE_ALLINVITE,
CMODE_BLOCKCAPS, CMODE_PERM, CMODE_NICKFLOOD, CMODE_JOINFLOOD, CMODE_DELAYEDJOIN, CMODE_NOREJOIN,
/* b/e/I */
CMODE_BAN, CMODE_EXCEPT,
CMODE_INVITEOVERRIDE,
/* v/h/o/a/q */
CMODE_VOICE, CMODE_HALFOP, CMODE_OP,
CMODE_PROTECT, CMODE_OWNER,
CMODE_END
};
/** The different types of modes
*/
enum ModeType
{
/* Regular mode */
MODE_REGULAR,
/* b/e/I */
MODE_LIST,
/* k/l etc */
MODE_PARAM,
/* v/h/o/a/q */
MODE_STATUS
};
/* Classes of modes, Channel modes and User modes
*/
enum ModeClass
{
/* Channel mode */
MC_CHANNEL,
/* User mode */
MC_USER
};
/** This class is the basis of all modes in Anope
*/
class CoreExport Mode
{
public:
/* Class of mode this is */
ModeClass Class;
/* Mode char for this */
char ModeChar;
/* Type of mode this is */
ModeType Type;
/** Default constructor
* @param mClass The type of mode this is
* @param modeChar The mode char
* @param type The mode type
*/
Mode(ModeClass mClass, char modeChar, ModeType type);
/** Default destructor
*/
virtual ~Mode();
};
/** This class is a user mode, all user modes use this/inherit from this
*/
class CoreExport UserMode : public Mode
{
public:
/* Mode name */
UserModeName Name;
/** Default constructor
* @param nName The mode name
* @param modeChar The mode char
*/
UserMode(UserModeName mName, char modeChar);
/** Default destructor
*/
virtual ~UserMode();
};
class UserModeParam : public UserMode
{
public:
/** Default constructor
* @param mName The mode name
* @param modeChar The mode char
*/
UserModeParam(UserModeName mName, char modeChar);
/** Check if the param is valid
* @param value The param
* @return true or false
*/
virtual bool IsValid(const std::string &value) { return true; }
};
/** This class is a channel mode, all channel modes use this/inherit from this
*/
class CoreExport ChannelMode : public Mode
{
public:
/* Mode name */
ChannelModeName Name;
/** Default constructor
* @param mName The mode name
* @param modeChar The mode char
*/
ChannelMode(ChannelModeName mName, char modeChar);
/** Default destructor
*/
virtual ~ChannelMode();
/** Can a user set this mode, used for mlock
* NOTE: User CAN be NULL, this is for checking if it can be locked with defcon
* @param u The user, or NULL
*/
virtual bool CanSet(User *u) { return true; }
};
/** This is a mode for lists, eg b/e/I. These modes should inherit from this
*/
class CoreExport ChannelModeList : public ChannelMode
{
public:
/** Default constructor
* @param mName The mode name
* @param modeChar The mode char
*/
ChannelModeList(ChannelModeName mName, char modeChar);
/** Default destructor
*/
virtual ~ChannelModeList();
/** Is the mask valid
* @param mask The mask
* @return true for yes, false for no
*/
virtual bool IsValid(const std::string &mask) { return true; }
/** Add the mask to the channel, this should be overridden
* @param chan The channel
* @param mask The mask
*/
virtual void AddMask(Channel *chan, const char *mask) { }
/** Delete the mask from the channel, this should be overridden
* @param chan The channel
* @param mask The mask
*/
virtual void DelMask(Channel *chan, const char *mask) { }
};
/** This is a mode with a paramater, eg +k/l. These modes should use/inherit from this
*/
class CoreExport ChannelModeParam : public ChannelMode
{
public:
/** Default constructor
* @param mName The mode name
* @param modeChar The mode char
* @param MinusArg true if this mode sends no arg when unsetting
*/
ChannelModeParam(ChannelModeName mName, char modeChar, bool MinusArg = false);
/** Default destructor
*/
virtual ~ChannelModeParam();
/* Should we send an arg when unsetting this mode? */
bool MinusNoArg;
/** Is the param valid
* @param value The param
* @return true for yes, false for no
*/
virtual bool IsValid(const std::string &value) { return true; }
};
/** This is a mode that is a channel status, eg +v/h/o/a/q.
*/
class CoreExport ChannelModeStatus : public ChannelMode
{
public:
/* The symbol, eg @ % + */
char Symbol;
/** Default constructor
* @param mName The mode name
* @param modeChar The mode char
* @param mSymbol The symbol for the mode, eg @ % +
*/
ChannelModeStatus(ChannelModeName mName, char modeChar, char mSymbol);
/** Default destructor
*/
virtual ~ChannelModeStatus();
};
/** Channel mode +b
*/
class CoreExport ChannelModeBan : public ChannelModeList
{
public:
ChannelModeBan(char modeChar) : ChannelModeList(CMODE_BAN, modeChar) { }
void AddMask(Channel *chan, const char *mask);
void DelMask(Channel *chan, const char *mask);
};
/** Channel mode +e
*/
class CoreExport ChannelModeExcept : public ChannelModeList
{
public:
ChannelModeExcept(char modeChar) : ChannelModeList(CMODE_EXCEPT, modeChar) { }
void AddMask(Channel *chan, const char *mask);
void DelMask(Channel *chan, const char *mask);
};
/** Channel mode +I
*/
class CoreExport ChannelModeInvite : public ChannelModeList
{
public:
ChannelModeInvite(char modeChar) : ChannelModeList(CMODE_INVITEOVERRIDE, modeChar) { }
void AddMask(Channel *chan, const char *mask);
void DelMask(Channel *chan, const char *mask);
};
/** Channel mode +k (key)
*/
class CoreExport ChannelModeKey : public ChannelModeParam
{
public:
ChannelModeKey(char modeChar) : ChannelModeParam(CMODE_KEY, modeChar) { }
bool IsValid(const std::string &value);
};
/** Channel mode +f (flood)
*/
class ChannelModeFlood : public ChannelModeParam
{
public:
ChannelModeFlood(char modeChar, bool minusNoArg = false) : ChannelModeParam(CMODE_FLOOD, modeChar, minusNoArg) { }
bool IsValid(const std::string &value);
};
/** This class is used for channel mode +A (Admin only)
* Only opers can mlock it
*/
class CoreExport ChannelModeAdmin : public ChannelMode
{
public:
ChannelModeAdmin(char modeChar) : ChannelMode(CMODE_ADMINONLY, modeChar) { }
/* Opers only */
bool CanSet(User *u);
};
/** This class is used for channel mode +O (Opers only)
* Only opers can mlock it
*/
class CoreExport ChannelModeOper : public ChannelMode
{
public:
ChannelModeOper(char modeChar) : ChannelMode(CMODE_OPERONLY, modeChar) { }
/* Opers only */
bool CanSet(User *u);
};
/** This class is used for channel mode +r (registered channel)
* No one may mlock r
*/
class CoreExport ChannelModeRegistered : public ChannelMode
{
public:
ChannelModeRegistered(char modeChar) : ChannelMode(CMODE_REGISTERED, modeChar) { }
/* No one mlocks +r */
bool CanSet(User *u);
};
enum StackerType
{
ST_CHANNEL,
ST_USER
};
class StackerInfo
{
public:
/* Modes to be added */
std::list<std::pair<void *, std::string> > AddModes;
/* Modes to be deleted */
std::list<std::pair<void *, std::string> > DelModes;
/* The type of object this stacker info is for */
StackerType Type;
/* Bot this is sent from */
BotInfo *bi;
/** Add a mode to this object
* @param Mode The mode
* @param Set true if setting, false if unsetting
* @param Param The param for the mode
*/
void AddMode(void *Mode, bool Set, const std::string &Param);
};
/** This is mode manager
* It contains functions for adding modes to Anope so Anope can track them
* and do things such as MLOCK.
* This also contains a mode stacker that will combine multiple modes and set
* them on a channel all at once
*/
class CoreExport ModeManager
{
protected:
/* List of pairs of user/channels and their stacker info */
static std::list<std::pair<void *, StackerInfo *> > StackerObjects;
/** Get the stacker info for an item, if one doesnt exist it is created
* @param Item The user/channel etc
* @return The stacker info
*/
static StackerInfo *GetInfo(void *Item);
/** Build a list of mode strings to send to the IRCd from the mode stacker
* @param info The stacker info for a channel or user
* @return a list of strings
*/
static std::list<std::string> BuildModeStrings(StackerInfo *info);
/** Add a mode to the stacker, internal use only
* @param bi The client to set the modes from
* @param u The user
* @param um The user mode
* @param Set Adding or removing?
* @param Param A param, if there is one
*/
static void StackerAddInternal(BotInfo *bi, User *u, UserMode *um, bool Set, const std::string &Param);
/** Add a mode to the stacker, internal use only
* @param bi The client to set the modes from
* @param c The channel
* @param cm The channel mode
* @param Set Adding or removing?
* @param Param A param, if there is one
*/
static void StackerAddInternal(BotInfo *bi, Channel *c, ChannelMode *cm, bool Set, const std::string &Param);
/** Really add a mode to the stacker, internal use only
* @param bi The client to set the modes from
* @param Object The object, user/channel
* @param Mode The mode
* @param Set Adding or removing?
* @param Param A param, if there is one
* @param Type The type this is, user or channel
*/
static void StackerAddInternal(BotInfo *bi, void *Object, void *Mode, bool Set, const std::string &Param, StackerType Type);
public:
/* User modes */
static std::map<char, UserMode *> UserModesByChar;
static std::map<UserModeName, UserMode *> UserModesByName;
/* Channel modes */
static std::map<char, ChannelMode *> ChannelModesByChar;
static std::map<ChannelModeName, ChannelMode *> ChannelModesByName;
/* Although there are two different maps for UserModes and ChannelModes
* the pointers in each are the same. This is used to increase
* efficiency.
*/
/* List of all modes Anope knows about */
static std::list<Mode *> Modes;
/** Add a user mode to Anope
* @param um A UserMode or UserMode derived class
* @return true on success, false on error
*/
static bool AddUserMode(UserMode *um);
/** Add a channel mode to Anope
* @param cm A ChannelMode or ChannelMode derived class
* @return true on success, false on error
*/
static bool AddChannelMode(ChannelMode *cm);
/** Find a channel mode
* @param Mode The mode
* @return The mode class
*/
static ChannelMode *FindChannelModeByChar(char Mode);
/** Find a user mode
* @param Mode The mode
* @return The mode class
*/
static UserMode *FindUserModeByChar(char Mode);
/** Find a channel mode
* @param Mode The modename
* @return The mode class
*/
static ChannelMode *FindChannelModeByName(ChannelModeName Name);
/** Find a user mode
* @param Mode The modename
* @return The mode class
*/
static UserMode *FindUserModeByName(UserModeName Name);
/** Gets the channel mode char for a symbol (eg + returns v)
* @param Value The symbol
* @return The char
*/
static char GetStatusChar(char Value);
/** Add a mode to the stacker to be set on a channel
* @param bi The client to set the modes from
* @param c The channel
* @param cm The channel mode
* @param Set true for setting, false for removing
* @param Param The param, if there is one
*/
static void StackerAdd(BotInfo *bi, Channel *c, ChannelMode *cm, bool Set, const std::string &Param = "");
/** Add a mode to the stacker to be set on a channel
* @param bi The client to set the modes from
* @param c The channel
* @param Name The channel mode name
* @param Set true for setting, false for removing
* @param Param The param, if there is one
*/
static void StackerAdd(BotInfo *bi, Channel *c, ChannelModeName Name, bool Set, const std::string &Param = "");
/** Add a mode to the stacker to be set on a channel
* @param bi The client to set the modes from
* @param c The channel
* @param Mode The mode char
* @param Set true for setting, false for removing
* @param Param The param, if there is one
*/
static void StackerAdd(BotInfo *bi, Channel *c, const char Mode, bool Set, const std::string &Param = "");
/** Add a mode to the stacker to be set on a user
* @param bi The client to set the modes from
* @param u The user
* @param um The user mode
* @param Set true for setting, false for removing
* @param param The param, if there is one
*/
static void StackerAdd(BotInfo *bi, User *u, UserMode *um, bool Set, const std::string &Param = "");
/** Add a mode to the stacker to be set on a user
* @param bi The client to set the modes from
* @param u The user
* @param Name The user mode name
* @param Set true for setting, false for removing
* @param Param The param, if there is one
*/
static void StackerAdd(BotInfo *bi, User *u, UserModeName Name, bool Set, const std::string &Param = "");
/** Add a mode to the stacker to be set on a user
* @param bi The client to set the modes from
* @param u The user
* @param Mode The mode to be set
* @param Set true for setting, false for removing
* @param Param The param, if there is one
*/
static void StackerAdd(BotInfo *bi, User *u, const char Mode, bool Set, const std::string &Param = "");
/** Process all of the modes in the stacker and send them to the IRCd to be set on channels/users
*/
static void ProcessModes();
};
+436 -186
View File
@@ -1,6 +1,6 @@
/* Modular support
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
@@ -70,7 +70,7 @@ enum EventReturn
} \
catch (CoreException& modexcept) \
{ \
alog("Exception caught: %s",modexcept.GetReason()); \
Alog() << "Exception caught: " << modexcept.GetReason(); \
} \
_i = safei; \
} \
@@ -99,7 +99,7 @@ do { \
} \
catch (CoreException& modexcept) \
{ \
alog("Exception caught: %s",modexcept.GetReason()); \
Alog() << "Exception caught: " << modexcept.GetReason(); \
} \
_i = safei; \
} \
@@ -186,7 +186,7 @@ enum CommandReturn
const char *ano_moderr();
#endif
typedef enum { CORE,PROTOCOL,THIRD,SUPPORTED,QATESTED,ENCRYPTION } MODType;
typedef enum { CORE,PROTOCOL,THIRD,SUPPORTED,QATESTED,ENCRYPTION,DATABASE } MODType;
typedef enum { MOD_OP_LOAD, MOD_OP_UNLOAD } ModuleOperation;
/*************************************************************************/
@@ -217,21 +217,20 @@ struct ModuleLang_ {
char **argv;
};
enum CommandFlags
enum CommandFlag
{
CFLAG_ALLOW_UNREGISTERED = 1,
CFLAG_ALLOW_FORBIDDEN = 2,
CFLAG_ALLOW_SUSPENDED = 4,
CFLAG_ALLOW_UNREGISTEREDCHANNEL = 8,
CFLAG_STRIP_CHANNEL = 16,
CFLAG_DISABLE_FANTASY = 32
CFLAG_ALLOW_UNREGISTERED,
CFLAG_ALLOW_FORBIDDEN,
CFLAG_ALLOW_SUSPENDED,
CFLAG_ALLOW_UNREGISTEREDCHANNEL,
CFLAG_STRIP_CHANNEL,
CFLAG_DISABLE_FANTASY
};
/** Every services command is a class, inheriting from Command.
*/
class CoreExport Command
class CoreExport Command : public Flags<CommandFlag>
{
int flags;
public:
size_t MaxParams;
size_t MinParams;
@@ -250,7 +249,7 @@ class CoreExport Command
/** Execute this command.
* @param u The user executing the command.
*/
virtual CommandReturn Execute(User *u, std::vector<ci::string> &);
virtual CommandReturn Execute(User *u, const std::vector<ci::string> &);
/** Requested when the user is requesting help on this command. Help on this command should be sent to the user.
* @param u The user requesting help
@@ -261,24 +260,9 @@ class CoreExport Command
/** Requested when the user provides bad syntax to this command (not enough params, etc).
* @param u The user executing the command.
* @param subcommand The subcommand the user tried to use
*/
virtual void OnSyntaxError(User *u);
/** Set a certain flag on this command.
* @param flag The CommandFlag to set on this command.
*/
void SetFlag(CommandFlags flag);
/** Remove a certain flag from this command.
* @param flag The CommandFlag to unset.
*/
void UnsetFlag(CommandFlags flag);
/** Check whether a certain flag is set on this command.
* @param flag The CommandFlag to check.
* @return bool True if the flag is set, false else.
*/
bool HasFlag(CommandFlags flag) const;
virtual void OnSyntaxError(User *u, const ci::string &subcommand);
/** Set which command permission (e.g. chanserv/forbid) is required for this command.
* @param reststr The permission required to successfully execute this command
@@ -292,7 +276,7 @@ class CoreExport Command
Command *next;
};
class CoreExport Version
class Version
{
private:
unsigned Major;
@@ -327,6 +311,9 @@ class CoreExport Version
const unsigned GetBuild();
};
/* Forward declaration of CallBack class for the Module class */
class CallBack;
/** Every module in Anope is actually a class.
*/
class CoreExport Module
@@ -342,9 +329,9 @@ class CoreExport Module
*/
std::string filename;
/** Timers used in this module
/** Callbacks used in this module
*/
std::list<Timer *> CallBacks;
std::list<CallBack *> CallBacks;
ano_module_t handle;
time_t created;
@@ -400,48 +387,6 @@ class CoreExport Module
*/
virtual Version GetVersion() { return Version(VERSION_MAJOR, VERSION_MINOR, VERSION_BUILD); }
/** Add output to NickServ Help.
* When doing /msg NickServ HELP, this function will be calloed to allow it to send out
* a notice witht he code you wish to display
* @Param u The user executing the command
*/
virtual void NickServHelp(User *u) { }
/** Add output to ChanServ Help.
* When doing /msg ChanServ HELP, this function will be calloed to allow it to send out
* a notice witht he code you wish to display
* @Param u The user executing the command
*/
virtual void ChanServHelp(User *u) { }
/** Add output to MemoServ Help.
* When doing /msg MemoServ HELP, this function will be calloed to allow it to send out
* a notice witht he code you wish to display
* @Param u The user executing the command
*/
virtual void MemoServHelp(User *u) { }
/** Add output to BotServ Help.
* When doing /msg BotServ HELP, this function will be calloed to allow it to send out
* a notice witht he code you wish to display
* @Param u The user executing the command
*/
virtual void BotServHelp(User *u) { }
/** Add output to OperServ Help.
* When doing /msg OperServ HELP, this function will be calloed to allow it to send out
* a notice witht he code you wish to display
* @Param u The user executing the command
*/
virtual void OperServHelp(User *u) { }
/** Add output to HostServ Help.
* When doing /msg HostServ HELP, this function will be calloed to allow it to send out
* a notice witht he code you wish to display
* @Param u The user executing the command
*/
virtual void HostServHelp(User *u) { }
/**
* Allow a module to add a set of language strings to anope
* @param langNumber the language number for the strings
@@ -471,7 +416,7 @@ class CoreExport Module
* @param number The message number
* @param ... The argument list
**/
void NoticeLang(char *source, User * u, int number, ...);
void NoticeLang(const char *source, User * u, int number, ...);
/**
* Add a module provided command to the given service.
@@ -490,19 +435,35 @@ class CoreExport Module
*/
int DelCommand(CommandHash * cmdTable[], const char *name);
/**
* Adds a timer to the current module
* The timer handling will take care of everything for this timer, this is only here
* so we have a list of timers to destroy when this module is unloaded
* @param t A timer derived class
/** Called on NickServ HELP
* @param u The user requesting help
*/
void AddCallBack(Timer *t);
virtual void OnNickServHelp(User *u) { }
/**
* Deletes a timer for the current module
* @param t The timer
/** Called on ChanServ HELP
* @param u The user requesting help
*/
bool DelCallBack(Timer *t);
virtual void OnChanServHelp(User *u) { }
/** Called on Botserv HELP
* @param u The user requesting help
*/
virtual void OnBotServHelp(User *u) { }
/** Called on HostServ HELP
* @param u The user requesting help
*/
virtual void OnHostServHelp(User *u) { }
/** Called on OperServ HELP
* @param u The user requesting help
*/
virtual void OnOperServHelp(User *u) { }
/** Called on MemoServ HELP
* @param u The user requesting help
*/
virtual void OnMemoServHelp(User *u) { }
/** Called when the ircd notifies that a user has been kicked from a channel.
* @param c The channel the user has been kicked from.
@@ -532,6 +493,16 @@ class CoreExport Module
*/
virtual EventReturn OnBotUnAssign(User *sender, ChannelInfo *ci) { return EVENT_CONTINUE; }
/** Called after a user has been introduced, but before any type
* of checking has been done (akills, defcon, s*lines, etc)
* return EVENT_STOP here to allow the user to get by untouched,
* or kill them then return EVENT_STOP to tell Anope the user no
* longer exists
* @param u The user
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to stop processing
*/
virtual EventReturn OnPreUserConnect(User *u) { return EVENT_CONTINUE; }
/** Called when a new user connects to the network.
* @param u The connecting user.
*/
@@ -540,13 +511,22 @@ class CoreExport Module
/** Called when a new server connects to the network.
* @param s The server that has connected to the network
*/
virtual void OnServerConnect(Server *s) { }
virtual void OnNewServer(Server *s) { }
/** Called after a user changed the nick
* @param u The user.
* @param oldnick the old nick of the user
* @param oldnick The old nick of the user
*/
virtual void OnUserNickChange(User *u, const char *oldnick) { }
virtual void OnUserNickChange(User *u, const std::string &oldnick) { }
/** Called immediatly when a user tries to run a command
* @param service The service
* @param u The user
* @param cmd The command
* @param c The command class (if it exists)
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to halt the command and not process it
*/
virtual EventReturn OnPreCommandRun(const std::string &service, User *u, const char *cmd, Command *c) { return EVENT_CONTINUE; }
/** Called before a command is due to be executed.
* @param u The user executing the command
@@ -570,25 +550,23 @@ class CoreExport Module
*/
virtual void OnPostLoadDatabases() { }
/** Called when anope saves databases.
* NOTE: This event is deprecated pending new database handling.
* XXX.
/** Called when the databases are saved
* @return EVENT_CONTINUE to let other modules continue saving, EVENT_STOP to stop
*/
virtual void OnSaveDatabase() MARK_DEPRECATED { }
virtual EventReturn OnSaveDatabase() { return EVENT_CONTINUE; }
/** Called when anope backs up databases.
* NOTE: This event is deprecated pending new database handling.
/** Called when the databases are loaded
* @return EVENT_CONTINUE to let other modules continue saving, EVENT_STOP to stop
*/
virtual void OnBackupDatabase() MARK_DEPRECATED { }
virtual EventReturn OnLoadDatabase() { return EVENT_CONTINUE; }
/** Called when anope needs to check passwords against encryption
* see src/encrypt.c for detailed informations
*/
virtual EventReturn OnEncrypt(const char *src,int len,char *dest,int size) { return EVENT_CONTINUE; }
virtual EventReturn OnEncryptInPlace(char *buf, int size) { return EVENT_CONTINUE; }
virtual EventReturn OnEncryptCheckLen(int passlen, int bufsize) { return EVENT_CONTINUE; }
virtual EventReturn OnDecrypt(const char *src, char *dest, int size) { return EVENT_CONTINUE; }
virtual EventReturn OnCheckPassword(const char *plaintext, const char *password) { return EVENT_CONTINUE; }
virtual EventReturn OnEncrypt(const std::string &src, std::string &dest) { return EVENT_CONTINUE; }
virtual EventReturn OnEncryptInPlace(std::string &buf) { return EVENT_CONTINUE; }
virtual EventReturn OnDecrypt(const std::string &hashm, const std::string &src, std::string &dest) { return EVENT_CONTINUE; }
virtual EventReturn OnCheckPassword(const std::string &hashm, std::string &plaintext, std::string &password) { return EVENT_CONTINUE; }
/** Called on fantasy command
* @param command The command
@@ -618,19 +596,27 @@ class CoreExport Module
* @param mask The mask being banned
*/
virtual void OnBotBan(User *u, ChannelInfo *ci, const char *mask) { }
/** Called after a bot has been created, but NOT added to the internal
* list and NOT introduced
* @param bi The bot
*/
virtual void OnBotPreLoad(BotInfo *bi) { }
/** Called when a bot kicks a user
* @param u The user being kicked
/** Called before a badword is added to the badword list
* @param ci The channel
* @param reason The reason
* @param bw The badword
*/
virtual void OnBotKick(User *u, ChannelInfo *ci, const std::string &reason) { }
virtual void OnBadWordAdd(ChannelInfo *ci, BadWord *bw) { }
/** Called before a badword is deleted from a channel
* @param ci The channel
* @param bw The badword
*/
virtual void OnBadWordDel(ChannelInfo *ci, BadWord *bw) { }
/** Called before a bot kicks a user
* @param bi The bot sending the kick
* @param c The channel the user is being kicked on
* @param u The user being kicked
* @param reason The reason
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to halt the command and not process it
*/
virtual EventReturn OnBotKick(BotInfo *bi, Channel *c, User *u, const std::string &reason) { return EVENT_CONTINUE; }
/** Called before a user parts a channel
* @param u The user
@@ -640,15 +626,18 @@ class CoreExport Module
/** Called when a user parts a channel
* @param u The user
* @param c The channel
* @param c The channel, may be NULL if the channel no longer exists
* @param channel The channel name
* @param msg The part reason
*/
virtual void OnPartChannel(User *u, Channel *c, const std::string &msg) { }
virtual void OnPartChannel(User *u, Channel *c, const std::string &channel, const std::string &msg) { }
/** Called before a user joins a channel
* @param u The user
* @param channel The channel
* @param c The channel
* @return EVENT_STOP to allow the user to join the channel through restrictions, EVENT_CONTINUE to let other modules decide
*/
virtual void OnPreJoinChannel(User *u, const char *channel) { }
virtual EventReturn OnPreJoinChannel(User *u, Channel *c) { return EVENT_CONTINUE; }
/** Called when a user joins a channel
* @param u The user
@@ -662,6 +651,12 @@ class CoreExport Module
*/
virtual void OnTopicUpdated(Channel *c, const char *topic) { }
/** Called before a channel expires
* @param ci The channel
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to halt the command and not process it
*/
virtual EventReturn OnPreChanExpire(ChannelInfo *ci) { return EVENT_CONTINUE; }
/** Called when a channel expires
* @param chname The channel name
*/
@@ -671,10 +666,18 @@ class CoreExport Module
*/
virtual void OnPreServerConnect() { }
/** Called when anope connects to its uplink
/** Called when Anope connects to its uplink
*/
virtual void OnServerConnect() { }
/** Called when we are done synching with the uplink, just before we send the EOB
*/
virtual void OnFinishSync(Server *serv) { }
/** Called when Anope disconnects from its uplink, before it tries to reconnect
*/
virtual void OnServerDisconnect() { }
/** Called before the database expire routines are called
* Note: Code that is in seperate expiry routines should just be done
* when we save the DB, theres no need to have both
@@ -685,6 +688,73 @@ class CoreExport Module
*/
virtual void OnDatabaseExpire() MARK_DEPRECATED { }
/** Called when the flatfile dbs are being written
* @param Write A callback to the function used to insert a line into the database
*/
virtual void OnDatabaseWrite(void (*Write)(const std::string &)) { }
/** Called when a line is read from the database
* @param params The params from the database
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to stop processing
*/
virtual EventReturn OnDatabaseRead(const std::vector<std::string> &params) { return EVENT_CONTINUE; }
/** Called when nickcore metadata is read from the database
* @param nc The nickcore
* @param key The metadata key
* @param params The params from the database
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to stop processing
*/
virtual EventReturn OnDatabaseReadMetadata(NickCore *nc, const std::string &key, const std::vector<std::string> &params) { return EVENT_CONTINUE; }
/** Called when nickcore metadata is read from the database
* @param na The nickalias
* @param key The metadata key
* @param params The params from the database
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to stop processing
*/
virtual EventReturn OnDatabaseReadMetadata(NickAlias *na, const std::string &key, const std::vector<std::string> &params) { return EVENT_CONTINUE; }
/** Called when botinfo metadata is read from the database
* @param bi The botinfo
* @param key The metadata key
* @param params The params from the database
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to stop processing
*/
virtual EventReturn OnDatabaseReadMetadata(BotInfo *bi, const std::string &key, const std::vector<std::string> &params) { return EVENT_CONTINUE; }
/** Called when chaninfo metadata is read from the database
* @param ci The chaninfo
* @param key The metadata key
* @param params The params from the database
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to stop processing
*/
virtual EventReturn OnDatabaseReadMetadata(ChannelInfo *ci, const std::string &key, const std::vector<std::string> &params) { return EVENT_CONTINUE; }
/** Called when we are writing metadata for a nickcore
* @param WriteMetata A callback function used to insert the metadata
* @param nc The nickcore
*/
virtual void OnDatabaseWriteMetadata(void (*WriteMetadata)(const std::string &, const std::string &), NickCore *nc) { }
/** Called when we are wrting metadata for a nickalias
* @param WriteMetata A callback function used to insert the metadata
* @param na The nick alias
*/
virtual void OnDatabaseWriteMetadata(void (*WriteMetadata)(const std::string &, const std::string &), NickAlias *na) { }
/** Called when we are writing metadata for a botinfo
* @param WriteMetata A callback function used to insert the metadata
* @param bi The botinfo
*/
virtual void OnDatabaseWriteMetadata(void (*WriteMetadata)(const std::string &, const std::string &), BotInfo *bi) { }
/** Called when are are writing metadata for a channelinfo
* @param WriteMetata A callback function used to insert the metadata
* @param bi The channelinfo
*/
virtual void OnDatabaseWriteMetadata(void (*WriteMetadata)(const std::string &, const std::string &), ChannelInfo *ci) { }
/** Called before services restart
*/
virtual void OnPreRestart() { }
@@ -706,6 +776,12 @@ class CoreExport Module
*/
virtual void OnSignal(const char *msg) { }
/** Called before a nick expires
* @param na The nick
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to halt the command and not process it
*/
virtual EventReturn OnPreNickExpire(NickAlias *na) { return EVENT_CONTINUE; }
/** Called when a nick drops
* @param nick The nick
*/
@@ -714,14 +790,55 @@ class CoreExport Module
/** Called when defcon level changes
* @param level The level
*/
virtual void OnDefconLevel(const char *level) { }
virtual void OnDefconLevel(int level) { }
/** Called before an akill is added
* @param u The user adding the akill
* @param ak The akill
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to halt the command and not process it
*/
virtual EventReturn OnAddAkill(User *u, Akill *ak) { return EVENT_CONTINUE; }
/** Called before an akill is deleted
* @param u The user removing the akill
* @param ak The akill, can be NULL for all akills!
*/
virtual void OnDelAkill(User *u, Akill *ak) { }
/** Called after an exception has been added
* @param u The user who added it
* @param ex The exception
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to halt the command and not process it
*/
virtual EventReturn OnExceptionAdd(User *u, Exception *ex) { return EVENT_CONTINUE; }
/** Called before an exception is deleted
* @param u The user who is deleting it
* @param ex The exceotion
*/
virtual void OnExceptionDel(User *u, Exception *ex) { }
/** Called before a SXLine is added
* @param u The user adding the SXLine
* @param sx The SXLine
* @param Type The type of SXLine this is
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to halt the command and not process it
*/
virtual EventReturn OnAddSXLine(User *u, SXLine *sx, SXLineType Type) { return EVENT_CONTINUE; }
/** Called before a SXLine is deleted
* @param u The user deleting the SXLine
* @param sx The SXLine, can be NULL for all SXLines
* @param Type The type of SXLine this is
*/
virtual void OnDelSXLine(User *u, SXLine *sx, SXLineType Type) { }
/** Called when a server quits
* @param server The server
*/
virtual void OnServerQuit(Server *server) { }
/** Called on a QUIT
/** Called on a QUIT
* @param u The user
* @param msg The quit message
*/
@@ -750,25 +867,25 @@ class CoreExport Module
/** Called when access is deleted from a channel
* @param ci The channel
* @param u The user who removed the access
* @param nick The name of the user whos access was removed
* @param nc The user who was deleted
*/
virtual void OnAccessDel(ChannelInfo *ci, User *u, const char *nick) { }
virtual void OnAccessDel(ChannelInfo *ci, User *u, NickCore *nc) { }
/** Called when access is changed
* @param ci The channel
* @param u The user who changed the access
* @param nick The nick whos access was changed
* @param na The nick whos access was changed
* @param level The level of the new access
*/
virtual void OnAccessChange(ChannelInfo *ci, User *u, const char *nick, int level) { }
virtual void OnAccessChange(ChannelInfo *ci, User *u, NickAlias *na, int level) { }
/** Called when access is added
* @param ci The channel
* @param u The user who added the access
* @param nick The nick who was added to access
* @para na The nick who was added to access
* @param level The level they were added at
*/
virtual void OnAccessAdd(ChannelInfo *ci, User *u, const char *nick, int level) { }
virtual void OnAccessAdd(ChannelInfo *ci, User *u, NickAlias *na, int level) { }
/** Called when the access list is cleared
* @param ci The channel
@@ -776,10 +893,18 @@ class CoreExport Module
*/
virtual void OnAccessClear(ChannelInfo *ci, User *u) { }
/** Called when a level for a channel is changed
* @param u The user changing the level
* @param ci The channel the level was changed on
* @param pos The level position, can be -1 for resetting levels
* @param what The new level
*/
virtual void OnLevelChange(User *u, ChannelInfo *ci, int pos, int what) { }
/** Called when a channel is dropped
* @param chname The channel name
*/
virtual void OnChanDrop(const char *chname) { }
virtual void OnChanDrop(const std::string &chname) { }
/** Called when a channel is forbidden
* @param ci The channel
@@ -806,6 +931,28 @@ class CoreExport Module
*/
virtual void OnDelChan(ChannelInfo *ci) { }
/** Called when a new channel is created
* @param c The channel
*/
virtual void OnChannelCreate(Channel *c) { }
/** Called when a channel is deleted
* @param c The channel
*/
virtual void OnChannelDelete(Channel *c) { }
/** Called after adding an akick to a channel
* @param ci The channel
* @param ak The akick
*/
virtual void OnAkickAdd(ChannelInfo *ci, AutoKick *ak) { }
/** Called before removing an akick from a channel
* @param ci The channel
* @param ak The akick
*/
virtual void OnAkickDel(ChannelInfo *ci, AutoKick *ak) { }
/** Called when a nick is dropped
* @param nick The nick
*/
@@ -847,30 +994,11 @@ class CoreExport Module
*/
virtual void OnNickUnsuspended(NickAlias *na) { }
/** Called when the defcon level is changed
* @param level The level
*/
virtual void OnDefconLevel(int level) { }
/** Called on finduser()
* @param u pointer to the user
*/
virtual void OnFindUser(User *u) { }
/** Called on findnick()
* @param nick nickname to be searched for
*/
virtual void OnFindNick(const std::string &nick) { }
/** Called on delnick()
* @ param na pointer to the nickalias
*/
virtual void OnDelNick(NickAlias *na) { }
/* Called on findcore()
* @param nick nickname to be searched for (nc->display)
*/
virtual void OnFindCore(const std::string &nick) { }
/** Called on delcore()
* @param nc pointer to the NickCore
*/
@@ -882,11 +1010,6 @@ class CoreExport Module
*/
virtual void OnChangeCoreDisplay(NickCore *nc, const std::string &newdisplay) { }
/** Called on findrequestnick()
* @param nick nicname to be searched for
*/
virtual void OnFindRequestNick(const std::string &nick) { }
/** called from ns_register.c, after the NickRequest have been created
* @param nr pointer to the NickRequest
*/
@@ -902,26 +1025,128 @@ class CoreExport Module
*/
virtual void OnNickClearAccess(NickCore *nc) { }
/** Called when a user adds an entry to their access list
* @param nc The nick
* @param entry The entry
*/
virtual void OnNickAddAccess(NickCore *nc, const std::string &entry) { }
/** called from NickCore::EraseAccess()
* @param nc pointer to the NickCore
* @param entry The access mask
*/
virtual void OnNickEraseAccess(NickCore *nc, const std::string &entry) { }
/** called when a HostCore is deleted
* @param hc pointer to the HostCore
/** called when a vhost is deleted
* @param na The nickalias of the vhost
*/
virtual void OnDeleteHostCore(HostCore *hc) { }
virtual void OnDeleteVhost(NickAlias *na) { }
/** called on findHostCore
* @param nick the name of the HostCore we are searching for
/** Called when a vhost is set
* @param na The nickalias of the vhost
*/
virtual void OnFindHostCore(const std::string &nick) { }
virtual void OnSetVhost(NickAlias *na) { }
/** called when a new HostCore is inserted
* @param hc pointer to the HostCore
/** Called when a memo is sent
* @param u The user sending the memo
* @param nc The nickcore of who the memo was sent to
* @param m The memo
*/
virtual void OnInsertHostCore(HostCore *hc) { }
virtual void OnMemoSend(User *u, NickCore *nc, Memo *m) { }
/** Called when a memo is sent
* @param u The user sending the memo
* @param ci The channel the memo was sent to
* @param m The memo
*/
virtual void OnMemoSend(User *u, ChannelInfo *ci, Memo *m) { }
/** Called when a memo is deleted
* @param nc The nickcore of the memo being deleted
* @param mi The memo info
* @param number What memo number is being deleted, can be 0 for all memos
*/
virtual void OnMemoDel(NickCore *nc, MemoInfo *mi, int number) { }
/** Called when a memo is deleted
* @param ci The channel of the memo being deleted
* @param mi The memo info
* @param number What memo number is being deleted, can be 0 for all memos
*/
virtual void OnMemoDel(ChannelInfo *ci, MemoInfo *mi, int number) { }
/** Called when a mode is set on a channel
* @param c The channel
* @param Name The mode name
* @param param The mode param, if there is one
* @return EVENT_STOP to make mlock/secureops etc checks not happen
*/
virtual EventReturn OnChannelModeSet(Channel *c, ChannelModeName Name, const std::string &param) { return EVENT_CONTINUE; }
/** Called when a mode is unset on a channel
* @param c The channel
* @param Name The mode name
* @param param The mode param, if there is one
* @return EVENT_STOP to make mlock/secureops etc checks not happen
*/
virtual EventReturn OnChannelModeUnset(Channel *c, ChannelModeName Name, const std::string &param) { return EVENT_CONTINUE; }
/** Called when a mode is set on a user
* @param u The user
* @param Name The mode name
*/
virtual void OnUserModeSet(User *u, UserModeName Name) { }
/** Called when a mode is unset from a user
* @param u The user
* @param Name The mode name
*/
virtual void OnUserModeUnset(User *u, UserModeName Name) { }
/** Called when a channel mode is introducted into Anope
* @param cm The mode
*/
virtual void OnChannelModeAdd(ChannelMode *cm) { }
/** Called when a user mode is introducted into Anope
* @param um The mode
*/
virtual void OnUserModeAdd(UserMode *um) { }
/** Called when a mode is about to be mlocked
* @param Name The mode being mlocked
* @param status true if its being mlocked +, false for -
* @param param The param, if there is one and if status is true
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to deny the mlock.
*/
virtual EventReturn OnMLock(ChannelModeName Name, bool status, const std::string &param) { return EVENT_CONTINUE; }
/** Called when a mode is about to be unlocked
* @param Name The mode being mlocked
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to deny the mlock.
*/
virtual EventReturn OnUnMLock(ChannelModeName Name) { return EVENT_CONTINUE; }
/** Called after a module is loaded
* @param u The user loading the module, can be NULL
* @param m The module
*/
virtual void OnModuleLoad(User *u, Module *m) { }
/** Called before a module is unloaded
* @param u The user, can be NULL
* @param m The module
*/
virtual void OnModuleUnload(User *u, Module *m) { }
/** Called when a server is synced
* @param s The server, can be our uplink server
*/
virtual void OnServerSync(Server *s) { }
/** Called when we sync with our uplink
*/
virtual void OnUplinkSync() { }
};
@@ -932,34 +1157,49 @@ enum Implementation
{
I_BEGIN,
/* NickServ */
I_OnNickExpire, I_OnNickForbidden, I_OnNickGroup, I_OnNickLogout, I_OnNickIdentify, I_OnNickDrop,
I_OnNickServHelp, I_OnPreNickExpire, I_OnNickExpire, I_OnNickForbidden, I_OnNickGroup, I_OnNickLogout, I_OnNickIdentify, I_OnNickDrop,
I_OnNickRegister, I_OnNickSuspended, I_OnNickUnsuspended,
I_OnFindUser, I_OnFindNick, I_OnDelNick, I_OnFindCore, I_OnDelCore, I_OnChangeCoreDisplay,
I_OnFindRequestNick, I_OnDelNickRequest, I_OnMakeNickRequest, I_OnNickClearAccess, I_OnNickEraseAccess,
I_OnDelNick, I_OnDelCore, I_OnChangeCoreDisplay,
I_OnDelNickRequest, I_OnMakeNickRequest, I_OnNickClearAccess, I_OnNickAddAccess, I_OnNickEraseAccess,
/* ChanServ */
I_OnChanForbidden, I_OnChanSuspend, I_OnChanDrop, I_OnChanExpire, I_OnAccessAdd, I_OnAccessChange,
I_OnAccessDel, I_OnAccessClear, I_OnChanRegistered, I_OnChanUnsuspend, I_OnDelChan,
I_OnChanServHelp, I_OnChanForbidden, I_OnChanSuspend, I_OnChanDrop, I_OnPreChanExpire, I_OnChanExpire, I_OnAccessAdd, I_OnAccessChange,
I_OnAccessDel, I_OnAccessClear, I_OnLevelChange, I_OnChanRegistered, I_OnChanUnsuspend, I_OnDelChan, I_OnChannelCreate,
I_OnChannelDelete, I_OnAkickAdd, I_OnAkickDel,
/* BotServ */
I_OnBotJoin, I_OnBotKick, I_OnBotCreate, I_OnBotChange, I_OnBotDelete, I_OnBotAssign, I_OnBotUnAssign,
I_OnUserKicked, I_OnBotFantasy, I_OnBotNoFantasyAccess, I_OnBotBan, I_OnBotPreLoad,
I_OnBotServHelp, I_OnBotJoin, I_OnBotKick, I_OnBotCreate, I_OnBotChange, I_OnBotDelete, I_OnBotAssign, I_OnBotUnAssign,
I_OnUserKicked, I_OnBotFantasy, I_OnBotNoFantasyAccess, I_OnBotBan, I_OnBadWordAdd, I_OnBadWordDel,
/* HostServ */
I_OnDeleteHostCore, I_OnFindHostCore, I_OnInsertHostCore,
I_OnHostServHelp, I_OnSetVhost, I_OnDeleteVhost,
/* MemoServ */
I_OnMemoServHelp, I_OnMemoSend, I_OnMemoDel,
/* Users */
I_OnUserConnect, I_OnUserNickChange, I_OnUserQuit, I_OnUserLogoff, I_OnPreJoinChannel, I_OnJoinChannel,
I_OnPrePartChannel, I_OnPartChannel,
I_OnPreUserConnect, I_OnUserConnect, I_OnUserNickChange, I_OnUserQuit, I_OnUserLogoff, I_OnPreJoinChannel,
I_OnJoinChannel, I_OnPrePartChannel, I_OnPartChannel,
/* OperServ */
I_OnDefconLevel,
I_OnOperServHelp, I_OnDefconLevel, I_OnAddAkill, I_OnDelAkill, I_OnExceptionAdd, I_OnExceptionDel,
I_OnAddSXLine, I_OnDelSXLine,
/* Database */
I_OnPostLoadDatabases, I_OnSaveDatabase, I_OnLoadDatabase,
I_OnDatabaseExpire,
I_OnDatabaseWrite, I_OnDatabaseRead, I_OnDatabaseReadMetadata, I_OnDatabaseWriteMetadata,
/* Modules */
I_OnModuleLoad, I_OnModuleUnload,
/* Other */
I_OnReload, I_OnPreServerConnect, I_OnServerConnect, I_OnPreCommand, I_OnPostCommand, I_OnPostLoadDatabases, I_OnSaveDatabase, I_OnBackupDatabase,
I_OnPreDatabaseExpire, I_OnDatabaseExpire, I_OnPreRestart, I_OnRestart, I_OnPreShutdown, I_OnShutdown, I_OnSignal,
I_OnReload, I_OnPreServerConnect, I_OnNewServer, I_OnServerConnect, I_OnFinishSync, I_OnServerDisconnect, I_OnPreCommandRun,
I_OnPreCommand, I_OnPostCommand, I_OnPreDatabaseExpire, I_OnPreRestart, I_OnRestart, I_OnPreShutdown, I_OnShutdown, I_OnSignal,
I_OnServerQuit, I_OnTopicUpdated,
I_OnEncrypt, I_OnEncryptInPlace, I_OnEncryptCheckLen, I_OnDecrypt, I_OnCheckPassword,
I_OnChannelModeSet, I_OnChannelModeUnset, I_OnUserModeSet, I_OnUserModeUnset, I_OnChannelModeAdd, I_OnUserModeAdd,
I_OnMLock, I_OnUnMLock, I_OnServerSync, I_OnUplinkSync,
I_END
};
@@ -975,10 +1215,9 @@ class CoreExport ModuleManager
static std::vector<Module *> EventHandlers[I_END];
/** Load up a list of modules.
* @param total_modules The number of modules to load
* @param module_list The list of modules to load
**/
static void LoadModuleList(int total_modules, char **module_list);
static void LoadModuleList(std::list<std::string> &ModList);
/** Loads a given module.
* @param m the module to load
@@ -1046,10 +1285,10 @@ class CoreExport ModuleManager
*/
static void Attach(Implementation* i, Module* mod, size_t sz);
/** Delete all timers attached to a module
/** Delete all callbacks attached to a module
* @param m The module
*/
static void ClearTimers(Module *m);
static void ClearCallBacks(Module *m);
private:
/** Call the module_delete function to safely delete the module
@@ -1058,7 +1297,27 @@ private:
static void DeleteModule(Module *m);
};
/** Class used for callbacks within modules
*/
class CallBack : public Timer
{
private:
Module *m;
public:
CallBack(Module *mod, long time_from_now, time_t now = time(NULL), bool repeating = false) : Timer(time_from_now, now, repeating), m(mod)
{
m->CallBacks.push_back(this);
}
virtual ~CallBack()
{
std::list<CallBack *>::iterator it = std::find(m->CallBacks.begin(), m->CallBacks.end(), this);
if (it != m->CallBacks.end())
{
m->CallBacks.erase(it);
}
}
};
struct ModuleHash_ {
char *name;
@@ -1089,9 +1348,7 @@ struct MessageHash_ {
/* Module Managment Functions */
MDE Module *findModule(const char *name); /* Find a module */
int encryption_module_init(); /* Load the encryption module */
int protocol_module_init(); /* Load the IRCD Protocol Module up*/
MDE void moduleDisplayHelp(const char *service, User *u);
/*************************************************************************/
/*************************************************************************/
@@ -1112,13 +1369,6 @@ int destroyMessage(Message *m); /* destroy a Message*/
MDE bool moduleMinVersion(int major,int minor,int patch,int build); /* Checks if the current version of anope is before or after a given verison */
/*************************************************************************/
/* Some IRCD protocol module support functions */
/** Update the protect deatials, could be either protect or admin etc.. */
MDE void updateProtectDetails(const char *level_info_protect_word, const char *level_info_protectme_word, const char *fant_protect_add, const char *fant_protect_del, const char *level_protect_word, const char *protect_set_mode, const char *protect_unset_mode);
MDE void updateOwnerDetails(const char *fant_owner_add, const char *fant_owner_del, const char *owner_set_mode, const char *owner_del_mode);
/************************************************************************/
#endif
+7 -5
View File
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2008-2009 Robin Burchell <w00t@inspircd.org>
* Copyright (C) 2008-2009 Anope Team <team@anope.org>
* Copyright (C) 2008-2010 Robin Burchell <w00t@inspircd.org>
* Copyright (C) 2008-2010 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*
@@ -9,12 +9,14 @@
*
*/
#include "hashcomp.h"
class CoreExport OperType
{
private:
/** The name of this opertype, e.g. "sra".
*/
std::string name;
ci::string name;
/** Privs that this opertype may use, e.g. 'users/auspex'.
* This *must* be std::list, see commands comment for details.
@@ -34,7 +36,7 @@ class CoreExport OperType
/** Create a new opertype of the given name.
* @param nname The opertype name, e.g. "sra".
*/
OperType(const std::string &nname);
OperType(const ci::string &nname);
/** Check whether this opertype has access to run the given command string.
* @param cmdstr The string to check, e.g. botserv/set/private.
@@ -60,5 +62,5 @@ class CoreExport OperType
/** Returns the name of this opertype.
*/
const std::string &GetName() const;
const ci::string &GetName() const;
};
+1 -2
View File
@@ -1,6 +1,6 @@
/* Include extra includes needed by most/all pseudo-clients.
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
@@ -15,5 +15,4 @@
#include "commands.h"
#include "language.h"
#include "timers.h"
#include "datafiles.h"
#include "slist.h"
+209 -87
View File
@@ -1,6 +1,6 @@
/* Modular support
*
* (C) 2008-2009 Anope Team
* (C) 2008-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -9,39 +9,81 @@
*
*/
class CoreExport ChannelInfo : public Extensible
/** Flags used for the ChannelInfo class
*/
enum ChannelInfoFlag
{
CI_BEGIN,
/* ChanServ is currently holding the channel */
CI_INHABIT,
/* Retain the topic even after the channel is emptied */
CI_KEEPTOPIC,
/* Don't allow non-authorized users to be opped */
CI_SECUREOPS,
/* Hide channel from ChanServ LIST command */
CI_PRIVATE,
/* Topic can only be changed by SET TOPIC */
CI_TOPICLOCK,
/* Only users on the access list may join */
CI_RESTRICTED,
/* Don't allow ChanServ and BotServ commands to do bad things to users with higher access levels */
CI_PEACE,
/* Don't allow any privileges unless a user is IDENTIFIED with NickServ */
CI_SECURE,
/* Don't allow the channel to be registered or used */
CI_FORBIDDEN,
/* Channel does not expire */
CI_NO_EXPIRE,
/* Channel memo limit may not be changed */
CI_MEMO_HARDMAX,
/* Send notice to channel on use of OP/DEOP */
CI_OPNOTICE,
/* Stricter control of channel founder status */
CI_SECUREFOUNDER,
/* Sign kicks with the user who did the kick */
CI_SIGNKICK,
/* Sign kicks if level is < than the one defined by the SIGNKIGK level */
CI_SIGNKICK_LEVEL,
/* Uses XOP */
CI_XOP,
/* Channel is suspended */
CI_SUSPENDED,
/* Channel still exists when emptied, this can be caused by setting a perm
* channel mode (+P on InspIRCd) or /cs set #chan persist on.
* This keeps the service bot in the channel regardless if a +P type mode
* is set or not
*/
CI_PERSIST,
CI_END
};
class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag>
{
private:
std::map<ChannelModeName, std::string> Params; /* Map of parameters by mode name for mlock */
std::vector<ChanAccess *> access; /* List of authorized users */
std::vector<AutoKick *> akick; /* List of users to kickban */
std::vector<BadWord *> badwords; /* List of badwords */
std::bitset<128> mlock_on; /* Modes mlocked on */
std::bitset<128> mlock_off; /* Modes mlocked off */
public:
ChannelInfo()
{
next = prev = NULL;
founderpass[0] = name[0] = last_topic_setter[0] = '\0';
founder = successor = NULL;
desc = url = email = last_topic = forbidby = forbidreason = NULL;
time_registered = last_used = last_topic_time = 0;
flags = 0;
bantype = akickcount = 0;
levels = NULL;
akick = NULL;
mlock_on = mlock_off = mlock_limit = 0;
mlock_key = mlock_flood = mlock_redirect = entry_message = NULL;
c = NULL;
bi = NULL;
botflags = 0;
ttb = NULL;
bwcount = 0;
badwords = NULL;
capsmin = capspercent = 0;
floodlines = floodsecs = 0;
repeattimes = 0;
}
/** Default constructor
* @param chname The channel name
*/
ChannelInfo(const std::string &chname);
/** Default destructor
*/
~ChannelInfo();
ChannelInfo *next, *prev;
char name[CHANMAX];
std::string name; /* Channel name */
NickCore *founder;
NickCore *successor; /* Who gets the channel if the founder
* nick is dropped or expires */
char founderpass[PASSMAX];
char *desc;
char *url;
char *email;
@@ -49,41 +91,28 @@ class CoreExport ChannelInfo : public Extensible
time_t time_registered;
time_t last_used;
char *last_topic; /* Last topic on the channel */
char last_topic_setter[NICKMAX]; /* Who set the last topic */
std::string last_topic_setter; /* Who set the last topic */
time_t last_topic_time; /* When the last topic was set */
uint32 flags; /* See below */
char *forbidby;
char *forbidreason;
int16 bantype;
int16 *levels; /* Access levels for commands */
std::vector<ChanAccess *> access; /* List of authorized users */
uint16 akickcount;
AutoKick *akick; /* List of users to kickban */
uint32 mlock_on, mlock_off; /* See channel modes below */
uint32 mlock_limit; /* 0 if no limit */
char *mlock_key; /* NULL if no key */
char *mlock_flood; /* NULL if no +f */
char *mlock_redirect; /* NULL if no +L */
char *entry_message; /* Notice sent on entering channel */
MemoInfo memos;
struct channel_ *c; /* Pointer to channel record (if *
Channel *c; /* Pointer to channel record (if *
* channel is currently in use) */
/* For BotServ */
BotInfo *bi; /* Bot used on this channel */
uint32 botflags; /* BS_* below */
Flags<BotServFlag> botflags;
int16 *ttb; /* Times to ban for each kicker */
uint16 bwcount;
BadWord *badwords; /* For BADWORDS kicker */
int16 capsmin, capspercent; /* For CAPS kicker */
int16 floodlines, floodsecs; /* For FLOOD kicker */
int16 repeattimes; /* For REPEAT kicker */
@@ -92,19 +121,12 @@ class CoreExport ChannelInfo : public Extensible
*
* @param nc The NickCore of the user that the access entry should be tied to
* @param level The channel access level the user has on the channel
* @param creator The user who added the access
* @param last_seen When the user was last seen within the channel
*
* Creates a new access list entry and inserts it into the access list.
*/
void AddAccess(NickCore *nc, int16 level, int32 last_seen = 0)
{
ChanAccess *new_access = new ChanAccess;
new_access->in_use = 1;
new_access->nc = nc;
new_access->level = level;
new_access->last_seen = last_seen;
access.push_back(new_access);
}
void AddAccess(NickCore *nc, int16 level, const std::string &creator, int32 last_seen = 0);
/** Get an entry from the channel access list by index
*
@@ -113,13 +135,7 @@ class CoreExport ChannelInfo : public Extensible
*
* Retrieves an entry from the access list that matches the given index.
*/
ChanAccess *GetAccess(unsigned index)
{
if (access.empty() || index >= access.size())
return NULL;
return access[index];
}
ChanAccess *GetAccess(unsigned index);
/** Get an entry from the channel access list by NickCore
*
@@ -129,17 +145,12 @@ class CoreExport ChannelInfo : public Extensible
*
* Retrieves an entry from the access list that matches the given NickCore, optionally also matching a certain level.
*/
ChanAccess *GetAccess(NickCore *nc, int16 level = 0)
{
if (access.empty())
return NULL;
ChanAccess *GetAccess(NickCore *nc, int16 level = 0);
for (unsigned i = 0; i < access.size(); i++)
if (access[i]->in_use && access[i]->nc == nc && (level ? access[i]->level == level : true))
return access[i];
return NULL;
}
/** Get the size of the accss vector for this channel
* @return The access vector size
*/
const unsigned GetAccessCount() const;
/** Erase an entry from the channel access list
*
@@ -147,32 +158,143 @@ class CoreExport ChannelInfo : public Extensible
*
* Clears the memory used by the given access entry and removes it from the vector.
*/
void EraseAccess(unsigned index)
{
if (access.empty() || index >= access.size())
return;
delete access[index];
access.erase(access.begin() + index);
}
void EraseAccess(unsigned index);
/** Cleans the channel access list
*
* Cleans up the access list so it no longer contains entries no longer in use.
*/
void CleanAccess()
{
for (unsigned j = access.size(); j > 0; --j)
if (!access[j - 1]->in_use)
EraseAccess(j - 1);
}
void CleanAccess();
/** Clear the entire channel access list
*
* Clears the entire access list by deleting every item and then clearing the vector.
*/
void ClearAccess()
{
while (access.begin() != access.end())
EraseAccess(0);
}
void ClearAccess();
/** Add an akick entry to the channel by NickCore
* @param user The user who added the akick
* @param akicknc The nickcore being akicked
* @param reason The reason for the akick
* @param t The time the akick was added, defaults to now
* @param lu The time the akick was last used, defaults to never
*/
AutoKick *AddAkick(const std::string &user, NickCore *akicknc, const std::string &reason, time_t t = time(NULL), time_t lu = 0);
/** Add an akick entry to the channel by reason
* @param user The user who added the akick
* @param mask The mask of the akick
* @param reason The reason for the akick
* @param t The time the akick was added, defaults to now
* @param lu The time the akick was last used, defaults to never
*/
AutoKick *AddAkick(const std::string &user, const std::string &mask, const std::string &reason, time_t t = time(NULL), time_t lu = 0);
/** Get an entry from the channel akick list
* @param index The index in the akick vector
* @return The akick structure, or NULL if not found
*/
AutoKick *GetAkick(unsigned index);
/** Get the size of the akick vector for this channel
* @return The akick vector size
*/
const unsigned GetAkickCount() const;
/** Erase an entry from the channel akick list
* @param akick The akick
*/
void EraseAkick(AutoKick *akick);
/** Clear the whole akick list
*/
void ClearAkick();
/** Clean all of the nonused entries from the akick list
*/
void CleanAkick();
/** Add a badword to the badword list
* @param word The badword
* @param type The type (SINGLE START END)
* @return The badword
*/
BadWord *AddBadWord(const std::string &word, BadWordType type);
/** Get a badword structure by index
* @param index The index
* @return The badword
*/
BadWord *GetBadWord(unsigned index);
/** Get how many badwords are on this channel
* @return The number of badwords in the vector
*/
const unsigned GetBadWordCount() const;
/** Remove a badword
* @param badword The badword
*/
void EraseBadWord(BadWord *badword);
/** Clear all badwords from the channel
*/
void ClearBadWords();
/** Clean all of the nonused entries from the badwords list
*/
void CleanBadWords();
/** Check if a mode is mlocked
* @param Name The mode
* @param status True to check mlock on, false for mlock off
* @return true on success, false on fail
*/
const bool HasMLock(ChannelModeName Name, bool status);
/** Set a mlock
* @param Name The mode
* @param status True for mlock on, false for mlock off
* @param param An optional param arg for + mlocked modes
* @return true on success, false on failure (module blocking)
*/
bool SetMLock(ChannelModeName Name, bool status, const std::string param = "");
/** Remove a mlock
* @param Name The mode
* @return true on success, false on failure (module blcoking)
*/
bool RemoveMLock(ChannelModeName Name);
/** Clear all mlocks on the channel
*/
void ClearMLock();
/** Get the number of mlocked modes for this channel
* @param status true for mlock on, false for mlock off
* @return The number of mlocked modes
*/
const size_t GetMLockCount(bool status) const;
/** Get a param from the channel
* @param Name The mode
* @param Target a string to put the param into
* @return true on success
*/
const bool GetParam(ChannelModeName Name, std::string &Target);
/** Check if a mode is set and has a param
* @param Name The mode
*/
const bool HasParam(ChannelModeName Name);
/** Clear all the params from the channel
*/
void ClearParams();
/** Check whether a user is permitted to be on this channel
* @param u The user
* @return true if they are allowed, false if they aren't and were kicked
*/
bool CheckKick(User *user);
};
+533 -710
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1,6 +1,6 @@
/* Header for Services list handler.
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
+165 -28
View File
@@ -1,6 +1,6 @@
/*
*
* (C) 2004-2009 Anope Team
* (C) 2004-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
@@ -15,34 +15,171 @@
#define SOCKETS_H
#ifdef _WIN32
typedef SOCKET ano_socket_t;
#define ano_sockread(fd, buf, len) recv(fd, buf, len, 0)
#define ano_sockwrite(fd, buf, len) send(fd, buf, len, 0)
#define ano_sockclose(fd) closesocket(fd)
#define ano_sockgeterr() WSAGetLastError()
#define ano_sockseterr(err) WSASetLastError(err)
/* ano_sockstrerror in sockutil.c */
extern char *ano_sockstrerror(int);
/* ano_socksetnonb in sockutil.c */
#define ano_sockerrnonb(err) (err == WSAEINPROGRESS || err == WSAEWOULDBLOCK)
#define SOCKERR_EBADF WSAENOTSOCK
#define SOCKERR_EINTR WSAEINTR
#define SOCKERR_EINVAL WSAEINVAL
#define SOCKERR_EINPROGRESS WSAEINPROGRESS
#define CloseSocket closesocket
#else
typedef int ano_socket_t;
#define ano_sockread(fd, buf, len) read(fd, buf, len)
#define ano_sockwrite(fd, buf, len) write(fd, buf, len)
#define ano_sockclose(fd) close(fd)
#define ano_sockgeterr() errno
#define ano_sockseterr(err) errno = err
#define ano_sockstrerror(err) strerror(err)
#define ano_socksetnonb(fd) fcntl(fd, F_SETFL, O_NONBLOCK)
#define ano_sockerrnonb(err) (err == EINPROGRESS)
#define SOCKERR_EBADF EBADF
#define SOCKERR_EINTR EINTR
#define SOCKERR_EINVAL EINVAL
#define SOCKERR_EINPROGRESS EINPROGRESS
#define CloseSocket close
#endif
class SocketException : public CoreException
{
public:
/** Default constructor for socket exceptions
* @param message Error message
*/
SocketException(const std::string &message) : CoreException(message) { }
/** Default destructor
* @throws Nothing
*/
virtual ~SocketException() throw() { }
};
class CoreExport Socket
{
private:
/** Read from the socket
* @param buf Buffer to read to
* @param sz How much to read
* @return Number of bytes recieved
*/
virtual int RecvInternal(char *buf, size_t sz) const;
/** Write to the socket
* @param buf What to write
* @return Number of bytes sent, -1 on error
*/
virtual int SendInternal(const std::string &buf) const;
protected:
/* Socket FD */
int Sock;
/* Host this socket is connected to */
std::string TargetHost;
/* Port we're connected to */
int Port;
/* IP this socket is bound to */
std::string BindHost;
/* Is this an IPv6 socket? */
bool IPv6;
/* Messages to be written to the socket */
std::string WriteBuffer;
/* Part of a message not totally yet recieved */
std::string extrabuf;
/* How much data was recieved from the socket */
size_t RecvLen;
public:
/** Default constructor
* @param nTargetHost Hostname to connect to
* @param nPort Port to connect to
* @param nBindHos Host to bind to when connecting
* @param nIPv6 true to use IPv6
*/
Socket(const std::string &nTargetHost, int nPort, const std::string &nBindHost = "", bool nIPv6 = false);
/** Default destructor
*/
virtual ~Socket();
/** Get the socket FD for this socket
* @return The fd
*/
virtual int GetSock() const;
/** Check if this socket is IPv6
* @return true or false
*/
bool IsIPv6() const;
/** Called when there is something to be read from thie socket
* @return true on success, false to kill this socket
*/
virtual bool ProcessRead();
/** Called when this socket becomes writeable
* @return true on success, false to drop this socket
*/
virtual bool ProcessWrite();
/** Called when there is an error on this socket
*/
virtual void ProcessError();
/** Called with a message recieved from the socket
* @param buf The message
* @return true on success, false to kill this socket
*/
virtual bool Read(const std::string &buf);
/** Write to the socket
* @param message The message to write
*/
void Write(const char *message, ...);
void Write(std::string &message);
/** Get the length of the read buffer
* @return The length of the read buffer
*/
size_t ReadBufferLen() const;
/** Get the length of the write buffer
* @return The length of the write buffer
*/
size_t WriteBufferLen() const;
};
class CoreExport SocketEngine
{
private:
/* List of sockets that need to be deleted */
std::set<Socket *> OldSockets;
/* FDs to read */
fd_set ReadFDs;
/* FDs that want writing */
fd_set WriteFDs;
/* Max FD */
int MaxFD;
/** Unmark a socket as writeable
* @param s The socket
*/
void ClearWriteable(Socket *s);
public:
/* Set of sockets */
std::set<Socket *> Sockets;
/** Constructor
*/
SocketEngine();
/** Destructor
*/
virtual ~SocketEngine();
/** Add a socket to the socket engine
* @param s The socket
*/
void AddSocket(Socket *s);
/** Delete a socket from the socket engine
* @param s The socket
*/
void DelSocket(Socket *s);
/** Mark a socket as wanting to be written to
* @param s The socket
*/
void MarkWriteable(Socket *s);
/** Called to iterate through each socket and check for activity
*/
void Process();
/** Get the last socket error
* @return The error
*/
const std::string GetError() const;
};
#endif
+2 -8
View File
@@ -1,6 +1,6 @@
/* Timer include stuff.
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
@@ -47,7 +47,7 @@ class CoreExport Timer : public Extensible
*/
Timer(long time_from_now, time_t now = time(NULL), bool repeating = false);
/** Default destructor, does nothing
/** Default destructor, removes the timer from the list
*/
virtual ~Timer();
@@ -103,12 +103,6 @@ class CoreExport TimerManager : public Extensible
*/
static void DelTimer(Timer *T);
/** Check if something is a timer
* @param T A pointer
* @return true or false
*/
static bool IsTimer(Timer *T);
/** Tick all pending timers
* @param ctime The current time
*/
+122 -24
View File
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2008-2009 Robin Burchell <w00t@inspircd.org>
* Copyright (C) 2008-2009 Anope Team <team@anope.org>
* Copyright (C) 2008-2010 Robin Burchell <w00t@inspircd.org>
* Copyright (C) 2008-2010 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*
@@ -8,30 +8,34 @@
* $Id$
*
*/
struct u_chanlist {
struct u_chanlist *next, *prev;
struct ChannelContainer
{
Channel *chan;
int16 status; /* Associated flags; see CSTATUS_* below. */
Flags<ChannelModeName> *Status;
ChannelContainer(Channel *c) : chan(c) { }
virtual ~ChannelContainer() { }
};
struct u_chaninfolist {
struct u_chaninfolist *next, *prev;
ChannelInfo *chan;
};
typedef std::list<ChannelContainer *> UChannelList;
/* Online user and channel data. */
class CoreExport User : public Extensible
{
private:
protected:
std::string vident;
std::string ident;
std::string uid;
bool OnAccess; /* If the user is on the access list of the nick theyre on */
std::bitset<128> modes; /* Bitset of mode names the user has set on them */
std::map<UserModeName, std::string> Params; /* Map of user modes and the params this user has */
NickCore *nc; /* NickCore account the user is currently loggged in as */
public: // XXX: exposing a tiny bit too much
User *next, *prev;
char nick[NICKMAX];
std::string nick; /* User's current nick */
char *host; /* User's real hostname */
char *hostip; /* User's IP number */
@@ -41,14 +45,11 @@ class CoreExport User : public Extensible
Server *server; /* Server user is connected to */
time_t timestamp; /* Timestamp of the nick */
time_t my_signon; /* When did _we_ see the user? */
uint32 mode; /* See below */
NickCore *nc;
int isSuperAdmin; /* is SuperAdmin on or off? */
struct u_chanlist *chans; /* Channels user has joined */
struct u_chaninfolist *founder_chans; /* Channels user has identified for */
/* Channels the user is in */
UChannelList chans;
unsigned short invalid_pw_count; /* # of invalid password attempts */
time_t invalid_pw_time; /* Time of last invalid password */
@@ -72,11 +73,10 @@ class CoreExport User : public Extensible
*/
~User();
/** Update the nickname of a user record accordingly, should be
* called from ircd protocol.
*/
void SetNewNick(const std::string &newnick);
virtual void SetNewNick(const std::string &newnick);
/** Update the displayed (vhost) of a user record.
* This is used (if set) instead of real host.
@@ -105,7 +105,6 @@ class CoreExport User : public Extensible
*/
const std::string &GetUID() const;
/** Update the displayed ident (username) of a user record.
* @param ident The new ident to give this user.
*/
@@ -128,6 +127,10 @@ class CoreExport User : public Extensible
*/
const std::string &GetIdent() const;
/** Get the full mask ( nick!ident@realhost ) of a user
*/
const std::string GetMask();
/** Updates the realname of the user record.
*/
void SetRealname(const std::string &realname);
@@ -137,10 +140,15 @@ class CoreExport User : public Extensible
* @param source Sender nick
* @param fmt Format of the Message
* @param ... any number of parameters
* @return void
*/
void SendMessage(const char *source, const char *fmt, ...);
void SendMessage(const char *source, const std::string &msg);
virtual void SendMessage(const std::string &source, const char *fmt, ...);
virtual void SendMessage(const std::string &source, const std::string &msg);
/** Collide a nick
* See the comment in users.cpp
* @param na The nick
*/
void Collide(NickAlias *na);
/** Check if the user should become identified because
* their svid matches the one stored in their nickcore
@@ -151,15 +159,105 @@ class CoreExport User : public Extensible
/** Auto identify the user to the given accountname.
* @param account Display nick of account
*/
void AutoID(const char *acc);
void AutoID(const std::string &account);
/** Login the user to a NickCore
* @param core The account the user is useing
*/
void Login(NickCore *core);
/** Logout the user
*/
void Logout();
/** Get the account the user is logged in using
* @reurn The account or NULL
*/
virtual NickCore *Account() const;
/** Check if the user is identified for their nick
* @param CheckNick True to check if the user is identified to the nickname they are on too
* @return true or false
*/
virtual const bool IsIdentified(bool CheckNick = false) const;
/** Check if the user is recognized for their nick (on the nicks access list)
* @return true or false
*/
const bool IsRecognized() const;
virtual const bool IsRecognized() const;
/** Update the last usermask stored for a user, and check to see if they are recognized
*/
void UpdateHost();
/** Check if the user has a mode
* @param Name Mode name
* @return true or false
*/
const bool HasMode(UserModeName Name) const;
/** Set a mode internally on the user, the IRCd is not informed
* @param um The user mode
* @param Param The param, if there is one
*/
void SetModeInternal(UserMode *um, const std::string &Param = "");
/** Remove a mode internally on the user, the IRCd is not informed
* @param um The user mode
*/
void RemoveModeInternal(UserMode *um);
/** Set a mode on the user
* @param bi The client setting the mode
* @param um The user mode
* @param Param Optional param for the mode
*/
void SetMode(BotInfo *bi, UserMode *um, const std::string &Param = "");
/** Set a mode on the user
* @param bi The client setting the mode
* @param Name The mode name
* @param Param Optional param for the mode
*/
void SetMode(BotInfo *bi, UserModeName Name, const std::string &Param = "");
/* Set a mode on the user
* @param bi The client setting the mode
* @param ModeChar The mode char
* @param param Optional param for the mode
*/
void SetMode(BotInfo *bi, char ModeChar, const std::string &Param = "");
/** Remove a mode on the user
* @param bi The client setting the mode
* @param um The user mode
*/
void RemoveMode(BotInfo *bi, UserMode *um);
/** Remove a mode from the user
* @param bi The client setting the mode
* @param Name The mode name
*/
void RemoveMode(BotInfo *bi, UserModeName Name);
/** Remove a mode from the user
* @param bi The client setting the mode
* @param ModeChar The mode char
*/
void RemoveMode(BotInfo *bi, char ModeChar);
/** Set a string of modes on a user
* @param bi The client setting the mode
* @param modes The modes
*/
void SetModes(BotInfo *bi, const char *modes, ...);
/** Find the channel container for Channel c that the user is on
* This is preferred over using FindUser in Channel, as there are usually more users in a channel
* than channels a user is in
* @param c The channel
* @return The channel container, or NULL
*/
ChannelContainer *FindChannel(Channel *c);
};
+1 -7
View File
@@ -32,7 +32,7 @@ fi
cat >$VERSIONH <<EOF
/* Version information for Services.
*
* (C) 2003-2008 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and CREDITS for further details.
@@ -67,12 +67,6 @@ cat >$VERSIONH <<EOF
# define VER_OS
#endif
#if defined(USE_MODULES)
# define VER_MODULE "M"
#else
# define VER_MODULE
#endif
#endif
EOF
+1 -1
View File
@@ -1,6 +1,6 @@
/* version file handler for win32.
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
View File
+1 -1
View File
@@ -1,7 +1,7 @@
//
// install.js - Windows Configuration
//
// (C) 2003-2008 Anope Team
// (C) 2003-2010 Anope Team
// Contact us at team@anope.org
//
// This program is free but copyrighted software; see the file COPYING for
+241 -181
View File
@@ -1,6 +1,6 @@
# Catalan Language File.
#
# (C) 2003-2008 Anope Team
# (C) 2003-2010 Anope Team
# Contact us at team@anope.org
#
# Please read COPYING and README for furhter details.
@@ -873,6 +873,24 @@ NICK_SENDPASS_LINE_5
NICK_SENDPASS_OK
La clau de %s ha estat enviada.
# RESETPASS responses
NICK_RESETPASS_SYNTAX
RESETPASS nickname
NICK_RESETPASS_SUBJECT
Reset password request for %s
NICK_RESETPASS_MESSAGE
Hi,
You have requested to have the password for %s reset.
To reset your password, type %R%s CONFIRM %s
If you don't know why this mail is sent to you, please ignore it silently.
PLEASE DON'T ANSWER TO THIS MAIL!
%s administrators.
NICK_RESETPASS_COMPLETE
Password reset email for %s has been sent.
# FORBID responses
NICK_SUSPEND_SYNTAX
SUSPEND nickname reason
@@ -916,10 +934,6 @@ NICK_IS_PREREG
This nick is awaiting an e-mail verification code before completing registration.
NICK_ENTER_REG_CODE
A passcode has been sent to %s, please type %R%s confirm <passcode> to complete registration
NICK_CONFIRM_NOT_FOUND
Registration step 1 may have expired, please use "%R%s register <password> <email>" first.
NICK_CONFIRM_INVALID
Invalid passcode has been entered, please check the e-mail again, and retry
NICK_REG_MAIL_SUBJECT
Nickname Registration (%s)
NICK_REG_MAIL_HEAD
@@ -939,6 +953,16 @@ NICK_GETPASS_PASSCODE_IS
NICK_FORCE_REG
Nickname %s confirmed
# Confirm responces
NICK_CONFIRM_NOT_FOUND
Registration step 1 may have expired, please use "%R%s register <password> <email>" first.
NICK_CONFIRM_INVALID
Invalid passcode has been entered, please check the e-mail again, and retry.
NICK_CONFIRM_EXPIRED
Your password reset request has expired.
NICK_CONFIRM_SUCCESS
You are now identified for your nick. Change your password using "%R%s SET PASSWORD newpassword" now.
###########################################################################
#
# ChanServ messages
@@ -1019,6 +1043,12 @@ CHAN_LEVEL_TOPIC
CHAN_LEVEL_INFO
Autoritzar a utilitzar La comanda INFO amb
l'opció ALL
CHAN_LEVEL_AUTOOWNER
Automatic mode +q
CHAN_LEVEL_OWNER
Allowed to use OWNER command
CHAN_LEVEL_OWNERME
Allowed to (de)owner him/herself
# Automatic responses
CHAN_IS_REGISTERED
@@ -1036,7 +1066,7 @@ CHAN_X_INVALID
# REGISTER responses
CHAN_REGISTER_SYNTAX
REGISTER canal clau descripció
REGISTER canal descripció
CHAN_REGISTER_DISABLED
Ho sento, el registre de canals esta temporalment inhabilitat.
CHAN_REGISTER_NOT_LOCAL
@@ -1055,36 +1085,11 @@ CHAN_REGISTRATION_FAILED
Ho sento, la registració ha fallat.
CHAN_REGISTERED
El canal %s esta registrat sota el teu nickname: %s
CHAN_PASSWORD_IS
La teva clau pel canal es %s - Recorda-la per un us futur.
CHAN_REGISTER_NONE_CHANNEL
You have attempted to register a nonexistent channel %s
CHAN_SYMBOL_REQUIRED
Please use the symbol of # when attempting to register
# IDENTIFY responses
CHAN_IDENTIFY_SYNTAX
IDENTIFY canal clau
CHAN_IDENTIFY_FAILED
Ho sento, la identificació ha fallat.
CHAN_IDENTIFY_SUCCEEDED
Clau aceptada - ara tens nivell de fundador a %s.
# LOGOUT responses
CHAN_LOGOUT_SYNTAX
LOGOUT canal nickname
CHAN_LOGOUT_SERVADMIN_SYNTAX
LOGOUT canal [nickname]
CHAN_LOGOUT_SUCCEEDED
L'usuari %s ha estat desconnectat del canal %s.
CHAN_LOGOUT_ALL_SUCCEEDED
Tots els usuaris identificats han estat desconnectats del canal %s (except the channel founder).
CHAN_LOGOUT_FOUNDER_FAILED
You may not log out of %s (you are founder).
CHAN_LOGOUT_NOT_LOGGEDIN
%s was not logged into %s.
# DROP responses
CHAN_DROP_SYNTAX
DROP canal
@@ -1115,14 +1120,6 @@ CHAN_SUCCESSOR_UNSET
CHAN_SUCCESSOR_IS_FOUNDER
%s no pot ser el sucessor en el canal %s ja que n'es el fundador.
# SET PASSWORD responses
CHAN_SET_PASSWORD_FAILED
Ho sento, l'establiment de la clau no ha estat possible.
CHAN_PASSWORD_CHANGED
Clau per a %s canviada.
CHAN_PASSWORD_CHANGED_TO
La clau per a %s canviada a %s.
# SET DESC responses
CHAN_DESC_CHANGED
La descripció de %s canviada a%s.
@@ -1256,6 +1253,14 @@ CHAN_SET_XOP_ON
CHAN_SET_XOP_OFF
xOP lists system for %s is now OFF.
# SET PERSISTANT responces
CHAN_SET_PERSIST_SYNTAX
SET channel PERSIST {ON | OFF}
CHAN_SET_PERSIST_ON
Channel %s is now persistant.
CHAN_SET_PERSIST_OFF
Channel %s is no longer persistant.
# SET NOEXPIRE responses
CHAN_SET_NOEXPIRE_SYNTAX
SET canal NOEXPIRE {ON | OFF}
@@ -1276,6 +1281,37 @@ CHAN_XOP_ACCESS
CHAN_XOP_NOT_AVAILABLE
xOP system is not available.
# QOP messages
CHAN_QOP_SYNTAX
QOP channel {ADD|DEL|LIST|CLEAR} [nick | entry-list]
CHAN_QOP_DISABLED
Sorry, channel QOP list modification is temporarily disabled.
CHAN_QOP_NICKS_ONLY
Channel QOP lists may only contain registered nicknames.
CHAN_QOP_ADDED
%s added to %s QOP list.
CHAN_QOP_MOVED
%s moved to %s QOP list.
CHAN_QOP_NO_SUCH_ENTRY
No such entry (#%d) on %s QOP list.
CHAN_QOP_NOT_FOUND
%s not found on %s QOP list.
CHAN_QOP_NO_MATCH
No matching entries on %s QOP list.
CHAN_QOP_DELETED
%s deleted from %s QOP list.
CHAN_QOP_DELETED_ONE
Deleted 1 entry from %s QOP list.
CHAN_QOP_DELETED_SEVERAL
Deleted %d entries from %s QOP list.
CHAN_QOP_LIST_EMPTY
%s QOP list is empty.
CHAN_QOP_LIST_HEADER
QOP list for %s:
Num Nick
CHAN_QOP_CLEAR
Channel %s QOP list has been cleared.
# AOP messages
CHAN_AOP_SYNTAX
AOP canal {ADD|DEL|LIST|CLEAR} [nick | instància]
@@ -1407,7 +1443,7 @@ CHAN_VOP_CLEAR
# ACCESS messages
CHAN_ACCESS_SYNTAX
ACCESS canal {ADD|DEL|LIST|CLEAR} [nick [nivell] | llista]
ACCESS canal {ADD|DEL|LIST|VIEW|CLEAR} [nick [nivell] | llista]
CHAN_ACCESS_XOP
No pots utilitzar aquest comanda.
Utilitza les comandes AOP, SOP i VOP.
@@ -1457,6 +1493,12 @@ CHAN_ACCESS_LIST_AXS_FORMAT
%3d %4d %s
CHAN_ACCESS_CLEAR
La llista d'accés pel canal %s ha estat netegada.
CHAN_ACCESS_VIEW_XOP_FORMAT
%3d %s %s
by %s, last seen %s
CHAN_ACCESS_VIEW_AXS_FORMAT
%3d %4d %s
by %s, last seen %s
# AKICK responses
CHAN_AKICK_SYNTAX
@@ -1511,6 +1553,8 @@ CHAN_LEVELS_RANGE
El nivell ha d'estar entre %d i %d inclosos.
CHAN_LEVELS_CHANGED
Nivell per a %s en el canal %s cambiat a %d.
CHAN_LEVELS_CHANGED_FOUNDER
Level for %s on channel %s changed to founder only.
CHAN_LEVELS_UNKNOWN
Opció %s no coneguda. Escriu %R%s HELP LEVELS DESC per a una llista de opcións valides.
CHAN_LEVELS_DISABLED
@@ -1593,6 +1637,8 @@ CHAN_INFO_OPT_TOPICLOCK
Lock de tòpic
CHAN_INFO_OPT_XOP
Sistema de llistes xOP
CHAN_INFO_OPT_PERSIST
Persistant
CHAN_INFO_OPT_NONE
Cap
CHAN_INFO_MODE_LOCK
@@ -1621,12 +1667,17 @@ CHAN_INVITE_ALREADY_IN
You are already in %s!
CHAN_INVITE_SUCCESS
You have been invited to %s.
CHAN_INVITE_OTHER_SUCCESS
%s has been invited to %s.
# UNBAN responses
CHAN_UNBAN_SYNTAX
UNBAN canal
UNBAN canal [nick]
CHAN_UNBANNED
Has estat desbanegat de %s.
CHAN_UNBANNED_OTHER
%s has been unbanned from %s.
# TOPIC responses
CHAN_TOPIC_SYNTAX
@@ -1651,16 +1702,8 @@ CHAN_CLEARED_USERS
Tots els usuaris han estat kickegats del canal %s.
CHAN_CLEARED_INVITES
All invites on channel %s have been removed.
# GETPASS responses
CHAN_GETPASS_SYNTAX
GETPASS canal
CHAN_GETPASS_UNAVAILABLE
Comanda GETPASS no permessa per que encriptació esta en ús.
CHAN_GETPASS_PASSWORD_IS
La clau pel canal %s es %s.
# SENDPASS responses
# GETKEY responses
CHAN_GETKEY_SYNTAX
GETKEY channel
CHAN_GETKEY_NOKEY
@@ -1668,28 +1711,6 @@ CHAN_GETKEY_NOKEY
CHAN_GETKEY_KEY
Key for channel %s is %s.
# SENDPASS responses
CHAN_SENDPASS_SYNTAX
SENDPASS canal
CHAN_SENDPASS_UNAVAILABLE
Comanda SENDPASS no permessa per que encriptació esta en ús.
CHAN_SENDPASS_SUBJECT
Clau del canal (%s)
CHAN_SENDPASS_HEAD
Hola,
CHAN_SENDPASS_LINE_1
Has sol.licitat rebre la clau del canal %s per e-mail.
CHAN_SENDPASS_LINE_2
La clau es %s. Per raons de seguretat hauries de cambiar-la quant rebis aquest mail.
CHAN_SENDPASS_LINE_3
Si no saps per que has rebut aquest mail, per favor ignora'l.
CHAN_SENDPASS_LINE_4
Per favor NO RESPONGUIS a aquest email!
CHAN_SENDPASS_LINE_5
Administradors de %s.
CHAN_SENDPASS_OK
La clau de %s ha estat enviada.
# FORBID responses
CHAN_FORBID_SYNTAX
FORBID canal [raó]
@@ -2162,6 +2183,8 @@ BOT_UNASSIGN_SYNTAX
UNASSIGN canal
BOT_UNASSIGN_UNASSIGNED
Ja no hi ha un bot assignat a %s.
BOT_UNASSIGN_PERSISTANT_CHAN
You can not unassign bots while persist is set on the channel.
# INFO responses
BOT_INFO_SYNTAX
@@ -2985,8 +3008,6 @@ OPER_DEFCON_SYNTAX
DEFCON [1|2|3|4|5]
OPER_DEFCON_DENIED
This service is temporarly disabled, please try again later
OPER_DEFCON_NO_CONF
The Defcon system must be enabled in the services.conf file
OPER_DEFCON_CHANGED
Services are now at DEFCON %d
OPER_DEFCON_WALL
@@ -3006,6 +3027,10 @@ OPER_MODULE_REMOVE_FAIL
Unable to remove module %s
OPER_MODULE_NO_UNLOAD
This module can not be unloaded.
OPER_MODULE_ALREADY_LOADED
Module %s is already loaded.
OPER_MODULE_ISNT_LOADED
Module %s isn't loaded.
OPER_MODULE_LOAD_SYNTAX
MODLOAD FileName
OPER_MODULE_UNLOAD_SYNTAX
@@ -3401,6 +3426,8 @@ NICK_HELP_CMD_RELEASE
RELEASE Repren possesió del teu nick després de RECOVER
NICK_HELP_CMD_SENDPASS
SENDPASS Vas oblidar la teva clau? Intenta això
NICK_HELP_CMD_RESETPASS
RESETPASS Helps you reset lost passwords.
NICK_HELP_CMD_GHOST
GHOST Disconnects a "ghost" IRC session using your nick
NICK_HELP_CMD_ALIST
@@ -3996,6 +4023,12 @@ NICK_HELP_SENDPASS
Pot ser limitat a operadors d'IRC en certes
xarxes.
NICK_HELP_RESETPASS
Syntax: RESETPASS nickname
Sends a code key to the nickname with instructions on how to
reset their password.
NICK_HELP_CONFIRM
Syntax: CONFIRM passcode
@@ -4005,6 +4038,14 @@ NICK_HELP_CONFIRM
is sent to your e-mail address in the first step of the
registration process. For more information about the first
stage of the registration process, type: %R%S HELP REGISTER
This is also used after the RESETPASS command has been used to
force identify you to your nick so you may change your password.
NICK_HELP_CONFIRM_OPER
Additionally, Services Operators with the nickserv/confirm permission can
replace passcode with a users nick to force validate them.
NICK_HELP_RESEND
Syntax: RESEND
@@ -4167,10 +4208,10 @@ CHAN_HELP_CMD_STATUS
on a channel
CHAN_HELP_CMD_REGISTER
REGISTER Registra un canal
CHAN_HELP_CMD_IDENTIFY
IDENTIFY T'identifica amb la teva clau
CHAN_HELP_CMD_SET
SET Establir opcions i informació d'un canal
CHAN_HELP_CMD_QOP
QOP Modify the list of QOP users
CHAN_HELP_CMD_AOP
AOP Modifica la llista d'usuaris AOP
CHAN_HELP_CMD_SOP
@@ -4183,8 +4224,6 @@ CHAN_HELP_CMD_AKICK
AKICK Manté la llista d'AutoKick
CHAN_HELP_CMD_DROP
DROP Cancel.la l'enregistrament d'un canal
CHAN_HELP_CMD_SENDPASS
SENDPASS Ajuda a recuperar claus perdudes
CHAN_HELP_CMD_BAN
BAN Bans a selected nick on a channel
CHAN_HELP_CMD_CLEAR
@@ -4201,14 +4240,12 @@ CHAN_HELP_CMD_KICK
KICK Kicks a selected nick from a channel
CHAN_HELP_CMD_LIST
LIST Lists all registered channels matching the given pattern
CHAN_HELP_CMD_LOGOUT
LOGOUT This command will logout the selected nickname
CHAN_HELP_CMD_OP
OP Gives Op status to a selected nick on a channel
CHAN_HELP_CMD_TOPIC
TOPIC Manipulate the topic of the specified channel
CHAN_HELP_CMD_UNBAN
UNBAN Remove all bans preventing you from entering a channel
UNBAN Remove all bans preventing a user from entering a channel
CHAN_HELP_CMD_VOICE
VOICE Voices a selected nick on a channel
CHAN_HELP_CMD_VOP
@@ -4227,10 +4264,6 @@ CHAN_HELP_CMD_OWNER
OWNER Gives you owner status on channel
CHAN_HELP_CMD_PROTECT
PROTECT Protects a selected nick on a channel
CHAN_HELP_CMD_ADMIN
ADMIN Protects a selected nick on a channel
CHAN_HELP_CMD_DEADMIN
DEADMIN Deprotects a selected nick on a channel
CHAN_HELP_CMD_DEOP
DEOP Deops a selected nick on a channel
@@ -4253,53 +4286,32 @@ CHAN_HELP_EXPIRES
automaticament eliminat.
CHAN_HELP_REGISTER
Sintaxis: REGISTER canal clau descripció
Sintaxis: REGISTER canal descripció
Registra un canal en la base de dades de %S. Per a
utilitzar aquesta comanda, has de ser un operador en el
canal que intentis registrar. La clau es utilitzada amb
la comanda IDENTIFY per a permetre a altres fer
canvis en les opcions del canal posteriorment.
L'últim parametre, el qual ha de ser inclòs, és
una descripció general del propòsit del canal.
Quant registres un canal, ets reconegut com el
"fundador" del canal. El fundador del canal pot
canviar tots els parametres pel canal;
%S també donarà al fundador privilegis d'operador
automaticamente quant l'usuari entri al canal.
Esbrina sobre la comanda ACCESS
(%R%S HELP ACCESS) Per més informació sobre
com donar aquests privilegis a altres usuaris del canal.
NOTA: Per registrar un canal has d'haver registrat
el teu nickname primer. Si encara no ho has fet, escriu
%R%s HELP per més informació de com fer-ho.
Registers a channel in the %S database. In order
to use this command, you must first be a channel operator
on the channel you're trying to register.
The description, which must be included, is a
general description of the channel's purpose.
CHAN_HELP_IDENTIFY
Sintaxis: IDENTIFY canal clau
T'identifica amb %S com el fundador del canal especificat.
Moltes comandes requereixen que utilitzis aquesta comanda abans
d'utilitzar-los. La clau hauria de ser la mateixa que
vas enviar amb la comanda REGISTER.
CHAN_HELP_LOGOUT
Sintaxis: LOGOUT canal nickname
Aquest comanda fa que el nickname donat ja no siguis identificat
en el canal especificat.
Si ets el fundador del canal, pots desconectar a
qui sigui, d'altra banda tan sols et pots desconnectar
a tu mateix.
When you register a channel, you are recorded as the
"founder" of the channel. The channel founder is allowed
to change all of the channel settings for the channel;
%S will also automatically give the founder
channel-operator privileges when s/he enters the channel.
See the ACCESS command (%R%S HELP ACCESS) for
information on giving a subset of these privileges to
other channel users.
NOTICE: In order to register a channel, you must have
first registered your nickname. If you haven't,
%R%s HELP for information on how to do so.
CHAN_HELP_DROP
Sintaxis: DROP canal
Desenregistra el canal especificat. Nomès pot ser utilitzat pel
fundador del canal, qui ha d'utilitzar primer la comanda
IDENTIFY.
fundador del canal.
CHAN_HELP_SET
Sintaxis: SET canal opció parametres
@@ -4311,7 +4323,6 @@ CHAN_HELP_SET
FOUNDER Estableix el fundador d'un canal
SUCCESSOR Estableix el successor d'un canal
PASSWORD Estableix el password del fundador
DESC Estableix la descripció del canal
URL Associa una URL amb el canal
EMAIL Associa un E-mail amb el canal
@@ -4335,6 +4346,7 @@ CHAN_HELP_SET
TOPICLOCK El topic sols pot ser canviat amb
TOPIC
XOP Canvia el sistema de privilegis d'usuari
PERSIST Set the channel as permanent
Escriu %R%S HELP opció per més informació
sobre una opció en particular.
@@ -4356,12 +4368,6 @@ CHAN_HELP_SET_SUCCESSOR
si no hi haguès un successor. El nou nickname ha de ser un
d'enregistrat.
CHAN_HELP_SET_PASSWORD
Sintaxis: SET canal PASSWORD clau
Estableix la clau utilitzada per identificar-se com el
fundador del canal.
CHAN_HELP_SET_DESC
Sintaxis: SET canal DESC descripció
@@ -4546,6 +4552,29 @@ CHAN_HELP_SET_XOP
Canviar de llistes xOP al sistema de llistes d'accés no causa cap
problema.
CHAN_HELP_SET_PERSIST
Syntax: SET channel PERSIST {ON | OFF}
Enables or disables the persistant channel setting.
When persistant is set, the service bot will remain
in the channel when it has emptied of users.
If your IRCd does not a permanent (persistant) channel
mode you must have a service bot in your channel to
set persist on, and it can not be unassigned while persist
is on.
If this network does not have BotServ enabled and does
not have a permanent channel mode, ChanServ will
join your channel when you set persist on (and leave when
it has been set off).
If your IRCd has a permanent (persistant) channel mode
and is is set or unset (for any reason, including MLOCK),
persist is automatically set and unset for the channel aswell.
Additionally, services will set or unset this mode when you
set persist on or off.
CHAN_HELP_SET_OPNOTICE
Sintàxi: SET canal OPNOTICE {ON | OFF}
@@ -4554,6 +4583,45 @@ CHAN_HELP_SET_OPNOTICE
a l'usuari del canal quan les comandes OP o DEOP siguin
utilitzades per a un usuari en el canal.
CHAN_HELP_QOP
Syntax: QOP channel ADD nick
QOP channel DEL {nick | entry-num | list}
QOP channel LIST [mask | list]
QOP channel CLEAR
Maintains the QOP (AutoOwner) list for a channel. The QOP
list gives users the right to be auto-owner on your channel,
which gives them almost (or potentially, total) access.
The QOP ADD command adds the given nickname to the
QOP list.
The QOP DEL command removes the given nick from the
QOP list. If a list of entry numbers is given, those
entries are deleted. (See the example for LIST below.)
The QOP LIST command displays the QOP list. If
a wildcard mask is given, only those entries matching the
mask are displayed. If a list of entry numbers is given,
only those entries are shown; for example:
QOP #channel LIST 2-5,7-9
Lists AOP entries numbered 2 through 5 and
7 through 9.
The QOP CLEAR command clears all entries of the
QOP list.
The QOP commands are limited to
founders (unless SECUREOPS is off). However, any user on the
QOP list may use the QOP LIST command.
This command may have been disabled for your channel, and
in that case you need to use the access list. See
%R%S HELP ACCESS for information about the access list,
and %R%S HELP SET XOP to know how to toggle between
the access list and xOP list systems.
CHAN_HELP_AOP
Sintàxi: AOP canal ADD nick
AOP canal DEL {nick | instancia | llista}
@@ -4727,6 +4795,7 @@ CHAN_HELP_ACCESS
Sintàxi: ACCESS canal ADD nick nivell
ACCESS canal DEL {nick | indices | llista}
ACCESS canal LIST [mascara | llista]
ACCESS canal VIEW [mascara | llista]
ACCESS canal CLEAR
Manté la llista d'accés per a un canal. La llista
@@ -4760,7 +4829,10 @@ CHAN_HELP_ACCESS
ACCESS #canal LIST 2-5,7-9
llista instàncies d'accés numerades 2 fins 5 i
7 fins a 9.
The ACCESS VIEW command displays the access list similar
to ACCESS LIST but shows the creator and last used time.
La comanda ACCESS CLEAR neteja totes les instàncies
de la llista d'accés.
@@ -4839,30 +4911,30 @@ CHAN_HELP_AKICK
de la llista de akicks.
CHAN_HELP_LEVELS
Sintàxi: LEVELS canal SET tipo nivell
Sintàxi: LEVELS canal SET tipo [nivell|FOUNDER]
LEVELS canal {DIS | DISABLE} tipo
LEVELS canal LIST
LEVELS canal RESET
La comanda LEVELS permet un control fin sobre el
significat dels nivellls d'accés numèrics per a
canals. Amb aquesta comanda, pots definir el nivelll d'accés
requerit per a la majoria de les funcions de %S.
(Les comandes SET FOUNDER i SET PASSWORD, així com
aquesta comanda estan sempre restringidws al fundador del
canal.)
The LEVELS command allows fine control over the meaning of
the numeric access levels used for channels. With this
command, you can define the access level required for most
of %S's functions. (The SET FOUNDER and this command
are always restricted to the channel founder.)
LEVELS SET permet canviar el nivelll d'accés per a una funció
o un grup de funcions. LEVELS DISABLE (o DIS abreviat)
deshabilita una característica automàtica o prohibeix accés a una
funció per a totss excepte el fundador del canal.
LEVELS LIST mostra els nivellls actuals per a cada funció o
grup de funcions. LEVELS RESET restableix els nivellls als
nivellls per defecte d'un canal acabat de crear (Veure
HELP ACCESS LEVELS).
LEVELS SET allows the access level for a function or group of
functions to be changed. LEVELS DISABLE (or DIS for short)
disables an automatic feature or disallows access to a
function by anyone, INCLUDING the founder (although, the founder
can always reenable it).
Per a una llista de les características i funcions a les que
se'ls pot canviar els nivellls, Veure HELP LEVELS DESC.
LEVELS LIST shows the current levels for each function or
group of functions. LEVELS RESET resets the levels to the
default levels of a newly-created channel (see
HELP ACCESS LEVELS).
For a list of the features and functions whose levels can be
set, see HELP LEVELS DESC.
CHAN_HELP_LEVELS_DESC
Els següents nombres de característiques/funcions són
@@ -4993,10 +5065,10 @@ CHAN_HELP_INVITE
i major en el canal.
CHAN_HELP_UNBAN
Sintàxi: UNBAN canal
Sintàxi: UNBAN canal [nick]
Li diu a %S que esborri tots els bans que no permeten que
entris al canal donat.
Tells %S to remove all bans preventing you or the given
user from entering the given channel.
Per defecte, limitat a AOPs o aquells amb nivell 5
i major en el canal.
@@ -5057,15 +5129,6 @@ CHAN_HELP_GETKEY
Sintàxi: GETKEY canal
Retorna la clau del canal donat.
CHAN_HELP_SENDPASS
Sintàxi: SENDPASS canal
Envia la clau del canal donat a l'adresa email establerta
en l'arxiu del nickname del fundador. Aquesta comanda
és sumament útil per a recuperar claus perdudes.
pot ser limitat a Operadors de IRC en certas xarxes.
CHAN_SERVADMIN_HELP
@@ -5082,22 +5145,6 @@ CHAN_SERVADMIN_HELP
Veure l'accés, AKICK, i paràmetres de les llistes de nivells per a
qualsevol canal.
CHAN_SERVADMIN_HELP_LOGOUT
Sintàxi: LOGOUT canal [nickname]
Aquesta comanda ha fa que el nick seleccionat no sigui identificat
pel canal donat.
Si tu ets el fundador del canal, pots desconectar a
qui sigui, sinó només et pots desconectar a
tu mateix.
Si ets un administrador de serveis, pots
desconectar a qui sigui d'un canal sense ser el fundador
del canal. A més, pots omitir el paràmetro nickname;
això desconectara a tots els usuaris identificados
del canal.
CHAN_SERVADMIN_HELP_DROP
Sintàxi: DROP canal
@@ -5123,8 +5170,8 @@ CHAN_SERVADMIN_HELP_SET_NOEXPIRE
CHAN_SERVADMIN_HELP_INFO
Administradors de serveis poden utilitzar el paràmetre
ALL amb qualsevol canal
Services Operators with the chanserv/auspex permission can
use the ALL parameter with any channel.
CHAN_SERVADMIN_HELP_LIST
Sintàxi: LIST patró [FORBIDDEN] [NOEXPIRE]
@@ -6605,3 +6652,16 @@ OPER_UMODE_UNSUPPORTED
OPER_SUPER_ADMIN_NOT_ENABLED
SuperAdmin setting not enabled in services.conf
OPER_HELP_SYNC
Syntax: SQLSYNC
This command syncs your databases with SQL. You should
only have to execute this command once, when you initially
import your databases into SQL.
OPER_HELP_CMD_SQLSYNC
SQLSYNC Import your databases to SQL
OPER_SYNC_UPDATING
Updating MySQL.
OPER_SYNC_UPDATED
Finished updating MySQL.
+242 -186
View File
@@ -1,6 +1,6 @@
# Deutsches Language file.
#
# (C) 2003-2008 Anope Team
# (C) 2003-2010 Anope Team
# Contact us at team@anope.org
#
# Please read COPYING and README for furhter details.
@@ -892,6 +892,24 @@ NICK_SENDPASS_LINE_5
NICK_SENDPASS_OK
Das Passwort von %s wurde per eMail verschickt.
# RESETPASS responces
NICK_RESETPASS_SYNTAX
RESETPASS nickname
NICK_RESETPASS_SUBJECT
Reset password request for %s
NICK_RESETPASS_MESSAGE
Hi,
You have requested to have the password for %s reset.
To reset your password, type %R%s CONFIRM %s
If you don't know why this mail is sent to you, please ignore it silently.
PLEASE DON'T ANSWER TO THIS MAIL!
%s administrators.
NICK_RESETPASS_COMPLETE
Password reset email for %s has been sent.
# FORBID responses
NICK_SUSPEND_SYNTAX
SUSPEND Nickname Grund
@@ -929,10 +947,6 @@ NICK_IS_PREREG
Dieser Nickname benötigt das Email Bestätigungs Passwort vor Abschluß der Registrierung.
NICK_ENTER_REG_CODE
Ein Password wurde zu %s gesendet, bitte tippe %R%s confirm <passcode> um die Registrierung abzuschließen.
NICK_CONFIRM_NOT_FOUND
Registrieungs Stufe 1 ist eventuell abgelaufen, bitte nutze zuerst "%R%s register <password> <email>".
NICK_CONFIRM_INVALID
Ein ungültiger Passcode wurde eingegeben, prüfe bitte deine Email und gib den Code erneut ein.
NICK_REG_MAIL_SUBJECT
Nickname Registrierung (%s)
NICK_REG_MAIL_HEAD
@@ -952,6 +966,16 @@ NICK_GETPASS_PASSCODE_IS
NICK_FORCE_REG
Nickname %s bestätigt
# Confirm responses
NICK_CONFIRM_NOT_FOUND
Registrieungs Stufe 1 ist eventuell abgelaufen, bitte nutze zuerst "%R%s register <password> <email>".
NICK_CONFIRM_INVALID
Ein ungültiger Passcode wurde eingegeben, prüfe bitte deine Email und gib den Code erneut ein.
NICK_CONFIRM_EXPIRED
Your password reset request has expired.
NICK_CONFIRM_SUCCESS
You are now identified for your nick. Change your password using "%R%s SET PASSWORD newpassword" now.
###########################################################################
#
# ChanServ messages
@@ -1023,6 +1047,18 @@ CHAN_LEVEL_KICK
KICK-Befehl erlaubt
CHAN_LEVEL_SIGNKICK
Kein signierter Kick wenn SIGNKICK LEVEL genutzt wird
CHAN_LEVEL_AUTOOWNER
Automatic mode +q
CHAN_LEVEL_OWNER
Allowed to use OWNER command
CHAN_LEVEL_OWNERME
Allowed to (de)owner him/herself
CHAN_ACCESS_VIEW_XOP_FORMAT
%3d %s %s
by %s, last seen %s
CHAN_ACCESS_VIEW_AXS_FORMAT
%3d %4d %s
by %s, last seen %s
# Automatic responses
CHAN_LEVEL_BANME
@@ -1050,7 +1086,7 @@ CHAN_X_INVALID
# REGISTER responses
CHAN_REGISTER_SYNTAX
REGISTER Channel Passwort Beschreibung
REGISTER Channel Beschreibung
CHAN_REGISTER_DISABLED
Die Registrierung von Channels ist derzeit deaktiviert.
CHAN_REGISTER_NOT_LOCAL
@@ -1069,34 +1105,12 @@ CHAN_REGISTRATION_FAILED
Registrierung fehlgeschlagen.
CHAN_REGISTERED
Der Channel %s ist registriert unter deinem Nicknamen: %s
CHAN_PASSWORD_IS
Dein Channel-Passwort ist %s - behalte es für spätere Benutzung.
CHAN_REGISTER_NONE_CHANNEL
Du hast versucht ein nicht existierender Channel %s zu registrieren.
CHAN_SYMBOL_REQUIRED
Verwende bitte nur das Symbol # wenn du versuchst ein
Channel zu registrieren.
# IDENTIFY responses
CHAN_IDENTIFY_SYNTAX
IDENTIFY Channel Passwort
CHAN_IDENTIFY_FAILED
Identifizierung ist fehlgeschlagen.
CHAN_IDENTIFY_SUCCEEDED
Passwort akzeptiert - du hast jetzt Founderlevel-Zugriff auf %s.
# LOGOUT responses
CHAN_LOGOUT_SYNTAX
LOGOUT Channel Nickname
CHAN_LOGOUT_SERVADMIN_SYNTAX
LOGOUT Channel [Nickname]
CHAN_LOGOUT_SUCCEEDED
Der User %s wurde vom Channel %s ausgeloggt.
CHAN_LOGOUT_ALL_SUCCEEDED
Alle identifizierten User wurden vom Channel ausgeloggt %s (except the channel founder).
CHAN_LOGOUT_NOT_LOGGEDIN
%s was not logged into %s.
# DROP responses
CHAN_DROP_SYNTAX
DROP Channel
@@ -1127,14 +1141,6 @@ CHAN_SUCCESSOR_UNSET
CHAN_SUCCESSOR_IS_FOUNDER
%s kann nicht gleichzeitig Gründer und Vertreter im Channel %s sein.
# SET PASSWORD responses
CHAN_SET_PASSWORD_FAILED
Konnte das Passwort nicht ändern.
CHAN_PASSWORD_CHANGED
%s Passwort wurde geändert.
CHAN_PASSWORD_CHANGED_TO
%s Passwort wurde geändert zu %s.
# SET DESC responses
CHAN_DESC_CHANGED
Beschreibung von %s wurde geändert zu %s.
@@ -1266,6 +1272,14 @@ CHAN_SET_XOP_ON
CHAN_SET_XOP_OFF
XOP System für %s ist jetzt OFF.
# SET PERSISTANT responces
CHAN_SET_PERSIST_SYNTAX
SET channel PERSIST {ON | OFF}
CHAN_SET_PERSIST_ON
Channel %s is now persistant.
CHAN_SET_PERSIST_OFF
Channel %s is no longer persistant.
# SET NOEXPIRE responses
CHAN_SET_NOEXPIRE_SYNTAX
SET channel NOEXPIRE {ON | OFF}
@@ -1285,6 +1299,37 @@ CHAN_XOP_ACCESS
CHAN_XOP_NOT_AVAILABLE
XOP System ist nicht verfügbar.
# QOP messages
CHAN_QOP_SYNTAX
QOP channel {ADD|DEL|LIST|CLEAR} [nick | entry-list]
CHAN_QOP_DISABLED
Sorry, channel QOP list modification is temporarily disabled.
CHAN_QOP_NICKS_ONLY
Channel QOP lists may only contain registered nicknames.
CHAN_QOP_ADDED
%s added to %s QOP list.
CHAN_QOP_MOVED
%s moved to %s QOP list.
CHAN_QOP_NO_SUCH_ENTRY
No such entry (#%d) on %s QOP list.
CHAN_QOP_NOT_FOUND
%s not found on %s QOP list.
CHAN_QOP_NO_MATCH
No matching entries on %s QOP list.
CHAN_QOP_DELETED
%s deleted from %s QOP list.
CHAN_QOP_DELETED_ONE
Deleted 1 entry from %s QOP list.
CHAN_QOP_DELETED_SEVERAL
Deleted %d entries from %s QOP list.
CHAN_QOP_LIST_EMPTY
%s QOP list is empty.
CHAN_QOP_LIST_HEADER
QOP list for %s:
Num Nick
CHAN_QOP_CLEAR
Channel %s QOP list has been cleared.
# AOP messages
CHAN_AOP_SYNTAX
AOP Channel {ADD|DEL|LIST|CLEAR} [Nickname | entry-liste]
@@ -1515,6 +1560,8 @@ CHAN_LEVELS_RANGE
Der Level kann nur zwischen %d und einschliesslich %d liegen.
CHAN_LEVELS_CHANGED
Der Level für %s für den Channel %s wurde geändert auf %d.
CHAN_LEVELS_CHANGED_FOUNDER
Level for %s on channel %s changed to founder only.
CHAN_LEVELS_UNKNOWN
Einstellung %s ist unbekannt. Tippe %R%s HELP LEVELS DESC für eine ausführliche Einstellungsliste.
CHAN_LEVELS_DISABLED
@@ -1597,6 +1644,8 @@ CHAN_INFO_OPT_TOPICLOCK
Topic-Sperre
CHAN_INFO_OPT_XOP
xOP Listen-System
CHAN_INFO_OPT_PERSIST
Persistant
CHAN_INFO_OPT_NONE
Keine
CHAN_INFO_MODE_LOCK
@@ -1625,12 +1674,17 @@ CHAN_INVITE_ALREADY_IN
You are already in %s!
CHAN_INVITE_SUCCESS
You have been invited to %s.
CHAN_INVITE_OTHER_SUCCESS
%s has been invited to %s.
# UNBAN responses
CHAN_UNBAN_SYNTAX
UNBAN Channel
UNBAN Channel [nick]
CHAN_UNBANNED
Dein Ban in %s wurde entfernt.
CHAN_UNBANNED_OTHER
%s has been unbanned from %s.
# CLEAR responses
CHAN_TOPIC_SYNTAX
@@ -1655,16 +1709,8 @@ CHAN_CLEARED_USERS
Alle User wurden aus Channel %s gekicked.
CHAN_CLEARED_INVITES
Alle Invites wurden im Channel %s entfernt.
# GETPASS responses
CHAN_GETPASS_SYNTAX
GETPASS Channel
CHAN_GETPASS_UNAVAILABLE
GETPASS Befehl nicht verfügbar, da die Datenbank verschlüsselt ist.
CHAN_GETPASS_PASSWORD_IS
Passwort für Channel %s ist %s.
# SENDPASS responses
# GETKEY responses
CHAN_GETKEY_SYNTAX
GETKEY Channel
CHAN_GETKEY_NOKEY
@@ -1672,28 +1718,6 @@ CHAN_GETKEY_NOKEY
CHAN_GETKEY_KEY
Key for channel %s is %s.
# SENDPASS responses
CHAN_SENDPASS_SYNTAX
SENDPASS Channel
CHAN_SENDPASS_UNAVAILABLE
SENDPASS Befehl nicht verfügbar, da die Datenbank verschlüsselt ist.
CHAN_SENDPASS_SUBJECT
Channel-Passwort (%s)
CHAN_SENDPASS_HEAD
Hi,
CHAN_SENDPASS_LINE_1
Du hast das Passwortes für deinen Channel %s angefordert.
CHAN_SENDPASS_LINE_2
Das Passwort ist %s. Aus Sicherheitsgründen solltest du das Passwort bei Erhalt dieser Nachricht ändern.
CHAN_SENDPASS_LINE_3
Wenn du nicht weisst, warum du diese Mail empfangen hast, ignoriere Sie bitte.
CHAN_SENDPASS_LINE_4
AUF DIESE MAIL BITTE NICHT ANTWORTEN!
CHAN_SENDPASS_LINE_5
%s, die Administration.
CHAN_SENDPASS_OK
Passwort von %s wurde per eMail versandt.
# FORBID responses
CHAN_FORBID_SYNTAX
FORBID Channel [Grund]
@@ -2139,6 +2163,8 @@ BOT_UNASSIGN_SYNTAX
UNASSIGN channel
BOT_UNASSIGN_UNASSIGNED
Der Bot von %s wurde entfernt.
BOT_UNASSIGN_PERSISTANT_CHAN
You can not unassign bots while persist is set on the channel.
# INFO responses
BOT_INFO_SYNTAX
@@ -2937,8 +2963,6 @@ OPER_DEFCON_SYNTAX
DEFCON [1|2|3|4|5]
OPER_DEFCON_DENIED
Dieser Service ist derzeit deaktiviert, bitte versuche es später nochmal
OPER_DEFCON_NO_CONF
Das Defcon-System muss in der services.conf aktiviert worden sein
OPER_DEFCON_CHANGED
Services sind jetzt beim DEFCON %d
OPER_DEFCON_WALL
@@ -2958,6 +2982,10 @@ OPER_MODULE_REMOVE_FAIL
Kann Modul %s nicht entfernen
OPER_MODULE_NO_UNLOAD
Modul KANN NICHT entfernt werden.
OPER_MODULE_ALREADY_LOADED
Module %s is already loaded.
OPER_MODULE_ISNT_LOADED
Module %s isn't loaded.
OPER_MODULE_LOAD_SYNTAX
MODLOAD Modul-Name
OPER_MODULE_UNLOAD_SYNTAX
@@ -3354,6 +3382,8 @@ NICK_HELP_CMD_RELEASE
verwendung des RECOVER Befehls
NICK_HELP_CMD_SENDPASS
SENDPASS Passwort vergessen? Versuch das hier.
NICK_HELP_CMD_RESETPASS
RESETPASS Helps you reset lost passwords
NICK_HELP_CMD_GHOST
GHOST Trennt eine "ghost" IRC-Verbindung mit deinen Nicknamen
NICK_HELP_CMD_ALIST
@@ -3926,7 +3956,7 @@ NICK_HELP_GHOST
wenn dein Computer abstürtzt oder deine Internet-
Verbindung zusammenbricht, wenn du im IRC bist.
Wenn du das GHOST Befehk benutzen willst,muss
Wenn du das GHOST Befehl benutzen willst,muss
deine aktuelle Hostmaske (siehe /WHOIS) in der
Zugriffsliste des entsprechenden Nicknamens oder
in der Gruppe des Nicknamens sein.Weiterhin musst
@@ -4027,6 +4057,12 @@ NICK_HELP_SENDPASS
Kann in manchen Netzen auf IRC Operatoren begrenzt
sein.
NICK_HELP_RESETPASS
Syntax: RESETPASS nickname
Sends a code key to the nickname with instructions on how to
reset their password.
NICK_HELP_CONFIRM
Syntax: CONFIRM passcode
@@ -4037,6 +4073,14 @@ NICK_HELP_CONFIRM
Registrationsprozesses. Für mehr Informationen über die erste
Stufe des Registrationsprozesses tippe: %R%S HELP REGISTER
This is also used after the RESETPASS command has been used to
force identify you to your nick so you may change your password.
NICK_HELP_CONFIRM_OPER
Additionally, Services Operators with the nickserv/confirm permission can
replace passcode with a users nick to force validate them.
NICK_HELP_RESEND
Syntax: RESEND
@@ -4195,12 +4239,11 @@ CHAN_HELP_CMD_STATUS
in dem Channel
CHAN_HELP_CMD_REGISTER
REGISTER Einen Channel registrieren
CHAN_HELP_CMD_IDENTIFY
IDENTIFY Sich mit Passwort als Founder (z.B.)
des Channels identifizieren
CHAN_HELP_CMD_SET
SET Bestimmte Channel-Optionen und
Informationen einstellen
CHAN_HELP_CMD_QOP
QOP Verwaltet die QOP-Liste von einem Channel
CHAN_HELP_CMD_AOP
AOP Verwaltet die AOP-Liste von einen Channel
CHAN_HELP_CMD_SOP
@@ -4215,8 +4258,6 @@ CHAN_HELP_CMD_AKICK
AKICK Die Autokick-Liste bearbeiten
CHAN_HELP_CMD_DROP
DROP Registrierung eines Channels aufheben
CHAN_HELP_CMD_SENDPASS
SENDPASS Hilft bei vergessenen Passwörtern
CHAN_HELP_CMD_BAN
BAN Bant den angegebenen Nicknamen aus einen Channel
CHAN_HELP_CMD_CLEAR
@@ -4234,14 +4275,12 @@ CHAN_HELP_CMD_KICK
KICK Kickt den angegebenen Nicknamen aus einen Channel
CHAN_HELP_CMD_LIST
LIST Listet alle registrieten Channels des angegebene Muster
CHAN_HELP_CMD_LOGOUT
LOGOUT Das Befehl wir den angegegenen Nickname abmelden
CHAN_HELP_CMD_OP
OP Gibt den angegebenen Nicknamen Op-Status in einen Channel
CHAN_HELP_CMD_TOPIC
TOPIC Ändert den Topic des angegebenen Channels
CHAN_HELP_CMD_UNBAN
UNBAN Enfernt ein ban(s) die dich betreffen aus einen Channel
UNBAN Remove all bans preventing a user from entering a channel
CHAN_HELP_CMD_VOICE
VOICE Gibt den angegebenen User Voice-Status in einen Channel
CHAN_HELP_CMD_VOP
@@ -4262,11 +4301,6 @@ CHAN_HELP_CMD_OWNER
OWNER Gibt dir Gründer Staus in einen Channel
CHAN_HELP_CMD_PROTECT
PROTECT Schützt den angegebenen Nicknamen in einen Channel
CHAN_HELP_CMD_ADMIN
ADMIN Schützt den angegebenen Nicknamen in einen Channel
CHAN_HELP_CMD_DEADMIN
DEADMIN Entfernt den Schutz des angegebenen Nicknamens
in einen Channel
CHAN_HELP_CMD_DEOP
DEOP Enfernt den OP-Status des angegebenen Nicknamens
in einen Channel
@@ -4288,49 +4322,26 @@ CHAN_HELP_EXPIRES
genutzt wird,automatisch auslaufen wird.
CHAN_HELP_REGISTER
Syntax: REGISTER Channel Password Beschreibung
Syntax: REGISTER Channel Beschreibung
Registriert einen Channel in der Datenbank von %S.
Wenn du dieses Befehl nutzen möchtest, musst du
Operator-Status in dem Channel besitzen. Das
Passwort, dass du mit dem IDENTIFY Befehl
einstellst, erlaubt es später anderen Änderungen
am Channel durchzuführen.Der letzte Parameter, der
angegeben werden MUSS,sollte eine allgemeine
Beschreibung des Channels bzw dessen Zweck beinhalten.
Wenn du einen Channel registrierst, wird dein Nickname
als Founder (Gründer) eingetragen. Der Channel-Founder
kann alle Einstellungen des Channels bearbeiten, und
wird automatisch beim Joinen des Channels durch %S mit
Founder/Operator Privilegien ausgestattet. Mit Hilfe
des ACCESS Befehls (%R%S HELP ACCESS) kann man
einen Teil dieser Privilegien anderen registrierten
Nicknamen ebenfalls erteilen.
Hinweis: Für das Registrieren eines Channels musst du
einen registrierten und identifizierten Nickname benutzen.
Hast du dies noch nicht getan, tippe %R%s HELP REGISTER
um weitere Informationen darüber zu erhalten.
Registers a channel in the %S database. In order
to use this command, you must first be a channel operator
on the channel you're trying to register.
The description, which must be included, is a
general description of the channel's purpose.
CHAN_HELP_IDENTIFY
Syntax: IDENTIFY Channel Passwort
Identifiziert ein Nickname gegenüber %S als
Gründer (Founder) des angegebenen Channels.
Das Passwort muss dasselbe wie bei der
registrierung des angegebenen Channels sein
und ist in der Regel von den Real-Founder des
Channels zu erhalten.
CHAN_HELP_LOGOUT
Syntax: LOGOUT Channel Nickname
Hebt die Identifizierung als Channel-Founder für
den angegebenen Channel wieder auf.
Wenn du der Channel-Founder bist, kannst du jeden
ausloggen, jeder andere nur sich selbst.
When you register a channel, you are recorded as the
"founder" of the channel. The channel founder is allowed
to change all of the channel settings for the channel;
%S will also automatically give the founder
channel-operator privileges when s/he enters the channel.
See the ACCESS command (%R%S HELP ACCESS) for
information on giving a subset of these privileges to
other channel users.
NOTICE: In order to register a channel, you must have
first registered your nickname. If you haven't,
%R%s HELP for information on how to do so.
CHAN_HELP_DROP
Syntax: DROP Channel
@@ -4348,7 +4359,6 @@ CHAN_HELP_SET
FOUNDER Stellt den Gründer des Channels ein
SUCCESSOR Stellt den Vertreter des Founders ein
PASSWORD Ändert das Passwort des Channel-Founders
DESC Ändert die Channel-Beschreibung
URL Verbindet eine URL mit dem Channel
EMAIL Verbindet eine eMail-Adresse mit dem
@@ -4372,6 +4382,7 @@ CHAN_HELP_SET
OPNOTICE Sendet eine Notice wenn Op/Deop-Befehl
benutzt werden
XOP Schaltet das Listen System ein oder aus
PERSIST Set the channel as permanent
Tippe %R%S HELP Option für weitere Informationen
zu einem bestimmten Befehl.
@@ -4394,12 +4405,6 @@ CHAN_HELP_SET_SUCCESSOR
Der Nickname des Vertreters muss registriert sein.
CHAN_HELP_SET_PASSWORD
Syntax: SET Channel PASSWORD Passwort
Ändert das Passwort, dass dich als Founder (Gründer)
des Channels identifiziert.
CHAN_HELP_SET_DESC
Syntax: SET Channel DESC Beschreibung
@@ -4585,6 +4590,29 @@ CHAN_HELP_SET_XOP
Der Wechsel vom xOP System zum Access System fuktioniert
jedoch fehlerfrei.
CHAN_HELP_SET_PERSIST
Syntax: SET channel PERSIST {ON | OFF}
Enables or disables the persistant channel setting.
When persistant is set, the service bot will remain
in the channel when it has emptied of users.
If your IRCd does not a permanent (persistant) channel
mode you must have a service bot in your channel to
set persist on, and it can not be unassigned while persist
is on.
If this network does not have BotServ enabled and does
not have a permanent channel mode, ChanServ will
join your channel when you set persist on (and leave when
it has been set off).
If your IRCd has a permanent (persistant) channel mode
and is is set or unset (for any reason, including MLOCK),
persist is automatically set and unset for the channel aswell.
Additionally, services will set or unset this mode when you
set persist on or off.
CHAN_HELP_SET_OPNOTICE
Syntax: SET Channel OPNOTICE {ON | OFF}
@@ -4594,6 +4622,45 @@ CHAN_HELP_SET_OPNOTICE
Notice an den Channel wenn OP oder DEOP Befehle
benutzt werden.
CHAN_HELP_QOP
Syntax: QOP channel ADD nick
QOP channel DEL {nick | entry-num | list}
QOP channel LIST [mask | list]
QOP channel CLEAR
Maintains the QOP (AutoOwner) list for a channel. The QOP
list gives users the right to be auto-owner on your channel,
which gives them almost (or potentially, total) access.
The QOP ADD command adds the given nickname to the
QOP list.
The QOP DEL command removes the given nick from the
QOP list. If a list of entry numbers is given, those
entries are deleted. (See the example for LIST below.)
The QOP LIST command displays the QOP list. If
a wildcard mask is given, only those entries matching the
mask are displayed. If a list of entry numbers is given,
only those entries are shown; for example:
QOP #channel LIST 2-5,7-9
Lists QOP entries numbered 2 through 5 and
7 through 9.
The QOP CLEAR command clears all entries of the
QOP list.
The QOP commands are limited to
founders (unless SECUREOPS is off). However, any user on the
QOP list may use the QOP LIST command.
This command may have been disabled for your channel, and
in that case you need to use the access list. See
%R%S HELP ACCESS for information about the access list,
and %R%S HELP SET XOP to know how to toggle between
the access list and xOP list systems.
CHAN_HELP_AOP
Syntax: AOP Channel ADD Nickname
AOP Channel DEL {Nickname | entry-num | Liste}
@@ -4751,6 +4818,7 @@ CHAN_HELP_ACCESS
Syntax: ACCESS Channel ADD Nickname Level
ACCESS Channel DEL {Nickname | entry-num | Liste}
ACCESS Channel LIST [Maske | Liste]
ACCESS Channel VIEW [Maske | Liste]
ACCESS Channel CLEAR
Verwaltet die Zugriffsliste für einen Channel. Diese
@@ -4786,6 +4854,9 @@ CHAN_HELP_ACCESS
Zeigt Einträge mit den Nummern 2 bis 5 und
7 bis 9 an.
The ACCESS VIEW command displays the access list similar
to ACCESS LIST but shows the creator and last used time.
Durch ACCESS CLEAR werden alle Einträge der
Zugriffsliste entfernt.
@@ -4870,32 +4941,30 @@ CHAN_HELP_AKICK
Der AutoKick-Liste.
CHAN_HELP_LEVELS
Syntax: LEVELS channel SET Typ Level
Syntax: LEVELS channel SET Typ [Level|FOUNDER]
LEVELS channel {DIS | DISABLE} Typ
LEVELS channel LIST
LEVELS channel RESET
The LEVELS command allows fine control over the meaning of
the numeric access levels used for channels. With this
command, you can define the access level required for most
of %S's functions. (The SET FOUNDER and this command
are always restricted to the channel founder.)
Der LEVELS Befehl erlaubt eine feinere Regelung
der Zugriffslevel eines Channels. Mit diesem Befehl
kann man Zugriffslevel definieren, die die meisten
Funktionen von %S abdecken. (SET FOUNDER und SET PASSWORD,
genau wie dieser Befehl, sind beschränkt auf den Channel-
Founder.)
LEVELS SET allows the access level for a function or group of
functions to be changed. LEVELS DISABLE (or DIS for short)
disables an automatic feature or disallows access to a
function by anyone, INCLUDING the founder (although, the founder
can always reenable it).
LEVELS SET erlaubt einem Zugriffslevel eine Änderung seiner
Funktion bzw Gruppe von Funktionen. LEVELS DISABLE (oder
DIS als Abkürzung) deaktiviert eine automatische Funktion
oder verweigert den Zugriff auf jeden anderen ausser den
Channel-Founder.
Durch LEVELS LIST werden die aktuellen Levels und ihre
Funktionen aufgelistet. LEVELS RESET setzt alle Level auf
die Standardwerte eines neu erzeugten Channels zurück
(siehe HELP ACCESS LEVELS).
Für eine Auflistung der Funktionen, die diese Parameter
haben, siehe HELP LEVELS DESC.
LEVELS LIST shows the current levels for each function or
group of functions. LEVELS RESET resets the levels to the
default levels of a newly-created channel (see
HELP ACCESS LEVELS).
For a list of the features and functions whose levels can be
set, see HELP LEVELS DESC.
CHAN_HELP_LEVELS_DESC
Die folgenden Befehle/Funktionen werden unterstützt.
@@ -5035,13 +5104,14 @@ CHAN_HELP_INVITE
(oder INVITE) hat.
CHAN_HELP_UNBAN
Syntax: UNBAN Channel
Syntax: UNBAN Channel [nick]
Durch %S werden alle Bans entfernt, die dich am joinen
des Channels hindern. Eine Vorraussetzung dafür ist
allerdings, dass dein Level in dem Channel grösser als
5 (oder UNBAN)ist.
Tells %S to remove all bans preventing you or the given
user from entering the given channel.
By default, limited to AOPs or those with level 5 and above
on the channel.
CHAN_HELP_KICK
Syntax: KICK Channel Nickname [Grund]
@@ -5097,39 +5167,12 @@ CHAN_HELP_GETKEY
Syntax: GETKEY Channel
Liefert den Key des angegebenen Channels zurück.
CHAN_HELP_SENDPASS
Syntax: SENDPASS Channel
Sendet das Passwort des angegebenen Channels an die
eMail-Adresse, die dem Founder in der Datenbank
assoziiert ist. Dieser Befehl ist sehr nützlich,
wenn man mit dem Problem des vergessenen Passwortes
konfrontiert wird.
Kann in einigen Netzen auf IRC Operatoren beschränkt
sein.
CHAN_SERVADMIN_HELP
Services Administratoren können weiterhin beliebige Channels
DROPEN (löschen), Zugriffslisten oder Channel-Einstellungen
ansehen ohne sich vorher für den Channel identifizieren zu müssen.
CHAN_SERVADMIN_HELP_LOGOUT
Syntax: LOGOUT Channel [Nickname]
Durch dieser Befehl wird dich ChanServ nicht mehr als
identifiziert für den angegebenen Channel betrachten.
Wenn du der Founder (Gründer) dieses Channels bist, kannst
du jeden ausloggen, ansonsten nur dich selbst.
Bist du ein Services Administrator, kannst du jeden des
angegebenen Channels ausloggen, ohne Founder-Rechte
des Channels zu besitzen. Weiterhin musst du den
Parameter Nickname nicht unbedingt angeben, dies hat zur
Folge, dass jeder Nickname aus dem Channel ausgeloggt wird.
CHAN_SERVADMIN_HELP_DROP
Syntax: DROP Channel
@@ -5161,8 +5204,8 @@ CHAN_SERVADMIN_HELP_SET_NOEXPIRE
CHAN_SERVADMIN_HELP_INFO
Services Administratoren können den ALL Parameter bei jedem
Channel benutzen.
Services Operators with the chanserv/auspex permission can
use the ALL parameter with any channel.
CHAN_SERVADMIN_HELP_LIST
Syntax: LIST Muster [FORBIDDEN] [NOEXPIRE]
@@ -6599,3 +6642,16 @@ OPER_UMODE_UNSUPPORTED
OPER_SUPER_ADMIN_NOT_ENABLED
SuperAdmin muss in der services.conf eingeschaltet werden.
OPER_HELP_SYNC
Syntax: SQLSYNC
This command syncs your databases with SQL. You should
only have to execute this command once, when you initially
import your databases into SQL.
OPER_HELP_CMD_SQLSYNC
SQLSYNC Import your databases to SQL
OPER_SYNC_UPDATING
Updating MySQL.
OPER_SYNC_UPDATED
Finished updating MySQL.
+225 -163
View File
@@ -1,6 +1,6 @@
# United States English language file.
#
# (C) 2003-2008 Anope Team
# (C) 2003-2010 Anope Team
# Contact us at team@anope.org
#
# Please read COPYING and README for further details.
@@ -857,6 +857,23 @@ NICK_SENDPASS_LINE_5
NICK_SENDPASS_OK
Password of %s has been sent.
# RESETPASS responses
NICK_RESETPASS_SYNTAX
RESETPASS nickname
NICK_RESETPASS_SUBJECT
Reset password request for %s
NICK_RESETPASS_MESSAGE
Hi,
You have requested to have the password for %s reset.
To reset your password, type %R%s CONFIRM %s
If you don't know why this mail is sent to you, please ignore it silently.
PLEASE DON'T ANSWER TO THIS MAIL!
%s administrators.
NICK_RESETPASS_COMPLETE
Password reset email for %s has been sent.
# SUSPEND responses
NICK_SUSPEND_SYNTAX
SUSPEND nickname reason
@@ -894,10 +911,6 @@ NICK_IS_PREREG
This nick is awaiting an e-mail verification code before completing registration.
NICK_ENTER_REG_CODE
A passcode has been sent to %s, please type %R%s confirm <passcode> to complete registration
NICK_CONFIRM_NOT_FOUND
Registration step 1 may have expired, please use "%R%s register <password> <email>" first.
NICK_CONFIRM_INVALID
Invalid passcode has been entered, please check the e-mail again, and retry
NICK_REG_MAIL_SUBJECT
Nickname Registration (%s)
NICK_REG_MAIL_HEAD
@@ -917,6 +930,15 @@ NICK_GETPASS_PASSCODE_IS
NICK_FORCE_REG
Nickname %s confirmed
# Confirm responses
NICK_CONFIRM_NOT_FOUND
Registration step 1 may have expired, please use "%R%s register <password> <email>" first.
NICK_CONFIRM_INVALID
Invalid passcode has been entered, please check the e-mail again, and retry
NICK_CONFIRM_EXPIRED
Your password reset request has expired.
NICK_CONFIRM_SUCCESS
You are now identified for your nick. Change your password using "%R%s SET PASSWORD newpassword" now.
###########################################################################
@@ -998,6 +1020,12 @@ CHAN_LEVEL_TOPIC
Allowed to use TOPIC command
CHAN_LEVEL_INFO
Allowed to use INFO command with ALL option
CHAN_LEVEL_AUTOOWNER
Automatic mode +q
CHAN_LEVEL_OWNER
Allowed to use OWNER command
CHAN_LEVEL_OWNERME
Allowed to (de)owner him/herself
# Automatic responses
CHAN_IS_REGISTERED
@@ -1013,7 +1041,7 @@ CHAN_X_INVALID
# REGISTER responses
CHAN_REGISTER_SYNTAX
REGISTER channel password description
REGISTER channel description
CHAN_REGISTER_DISABLED
Sorry, channel registration is temporarily disabled.
CHAN_REGISTER_NOT_LOCAL
@@ -1032,37 +1060,11 @@ CHAN_REGISTRATION_FAILED
Sorry, registration failed.
CHAN_REGISTERED
Channel %s registered under your nickname: %s
CHAN_PASSWORD_IS
Your channel password is %s - remember it for later use.
CHAN_REGISTER_NONE_CHANNEL
You have attempted to register a nonexistent channel %s
CHAN_SYMBOL_REQUIRED
Please use the symbol of # when attempting to register
# IDENTIFY responses
CHAN_IDENTIFY_SYNTAX
IDENTIFY channel password
CHAN_IDENTIFY_FAILED
Sorry, identification failed.
CHAN_IDENTIFY_SUCCEEDED
Password accepted - you now have founder-level access to %s.
# LOGOUT responses
CHAN_LOGOUT_SYNTAX
LOGOUT channel nickname
CHAN_LOGOUT_SERVADMIN_SYNTAX
LOGOUT channel [nickname]
CHAN_LOGOUT_SUCCEEDED
User %s has been logged out of channel %s.
CHAN_LOGOUT_ALL_SUCCEEDED
All users identified have been logged out of channel %s (except the channel founder).
CHAN_LOGOUT_FOUNDER_FAILED
You may not log out of %s (you are founder).
CHAN_LOGOUT_NOT_LOGGEDIN
%s was not logged into %s.
# DROP responses
CHAN_DROP_SYNTAX
DROP channel
@@ -1093,14 +1095,6 @@ CHAN_SUCCESSOR_UNSET
CHAN_SUCCESSOR_IS_FOUNDER
%s cannot be the successor on channel %s because he is its founder.
# SET PASSWORD responses
CHAN_SET_PASSWORD_FAILED
Sorry, couldn't set password.
CHAN_PASSWORD_CHANGED
%s password changed.
CHAN_PASSWORD_CHANGED_TO
%s password changed to %s.
# SET DESC responses
CHAN_DESC_CHANGED
Description of %s changed to %s.
@@ -1232,6 +1226,14 @@ CHAN_SET_XOP_ON
CHAN_SET_XOP_OFF
xOP lists system for %s is now OFF.
# SET PERSISTANT responces
CHAN_SET_PERSIST_SYNTAX
SET channel PERSIST {ON | OFF}
CHAN_SET_PERSIST_ON
Channel %s is now persistant.
CHAN_SET_PERSIST_OFF
Channel %s is no longer persistant.
# SET NOEXPIRE responses
CHAN_SET_NOEXPIRE_SYNTAX
SET channel NOEXPIRE {ON | OFF}
@@ -1251,6 +1253,37 @@ CHAN_XOP_ACCESS
CHAN_XOP_NOT_AVAILABLE
xOP system is not available.
# QOP messages
CHAN_QOP_SYNTAX
QOP channel {ADD|DEL|LIST|CLEAR} [nick | entry-list]
CHAN_QOP_DISABLED
Sorry, channel QOP list modification is temporarily disabled.
CHAN_QOP_NICKS_ONLY
Channel QOP lists may only contain registered nicknames.
CHAN_QOP_ADDED
%s added to %s QOP list.
CHAN_QOP_MOVED
%s moved to %s QOP list.
CHAN_QOP_NO_SUCH_ENTRY
No such entry (#%d) on %s QOP list.
CHAN_QOP_NOT_FOUND
%s not found on %s QOP list.
CHAN_QOP_NO_MATCH
No matching entries on %s QOP list.
CHAN_QOP_DELETED
%s deleted from %s QOP list.
CHAN_QOP_DELETED_ONE
Deleted 1 entry from %s QOP list.
CHAN_QOP_DELETED_SEVERAL
Deleted %d entries from %s QOP list.
CHAN_QOP_LIST_EMPTY
%s QOP list is empty.
CHAN_QOP_LIST_HEADER
QOP list for %s:
Num Nick
CHAN_QOP_CLEAR
Channel %s QOP list has been cleared.
# AOP messages
CHAN_AOP_SYNTAX
AOP channel {ADD|DEL|LIST|CLEAR} [nick | entry-list]
@@ -1377,7 +1410,7 @@ CHAN_VOP_CLEAR
# ACCESS messages
CHAN_ACCESS_SYNTAX
ACCESS channel {ADD|DEL|LIST|CLEAR} [nick [level] | entry-list]
ACCESS channel {ADD|DEL|LIST|VIEW|CLEAR} [nick [level] | entry-list]
CHAN_ACCESS_XOP
You can't use this command.
Use the AOP, SOP and VOP commands instead.
@@ -1427,6 +1460,12 @@ CHAN_ACCESS_LIST_AXS_FORMAT
%3d %4d %s
CHAN_ACCESS_CLEAR
Channel %s access list has been cleared.
CHAN_ACCESS_VIEW_XOP_FORMAT
%3d %s %s
by %s, last seen %s
CHAN_ACCESS_VIEW_AXS_FORMAT
%3d %4d %s
by %s, last seen %s
# AKICK responses
CHAN_AKICK_SYNTAX
@@ -1467,6 +1506,8 @@ CHAN_AKICK_VIEW_FORMAT
CHAN_AKICK_VIEW_FORMAT_STUCK
%3d %s (stuck) (by %s on %s)
%s
CHAN_AKICK_LAST_USED
Last used %s
CHAN_AKICK_ENFORCE_DONE
AKICK ENFORCE for %s complete; %d users were affected.
CHAN_AKICK_CLEAR
@@ -1481,6 +1522,8 @@ CHAN_LEVELS_RANGE
Level must be between %d and %d inclusive.
CHAN_LEVELS_CHANGED
Level for %s on channel %s changed to %d.
CHAN_LEVELS_CHANGED_FOUNDER
Level for %s on channel %s changed to founder only.
CHAN_LEVELS_UNKNOWN
Setting %s not known. Type %R%s HELP LEVELS DESC for a list of valid settings.
CHAN_LEVELS_DISABLED
@@ -1563,6 +1606,8 @@ CHAN_INFO_OPT_TOPICLOCK
Topic Lock
CHAN_INFO_OPT_XOP
xOP lists system
CHAN_INFO_OPT_PERSIST
Persistant
CHAN_INFO_OPT_NONE
None
CHAN_INFO_MODE_LOCK
@@ -1591,13 +1636,16 @@ CHAN_INVITE_ALREADY_IN
You are already in %s!
CHAN_INVITE_SUCCESS
You have been invited to %s.
CHAN_INVITE_OTHER_SUCCESS
%s has been invited to %s.
# UNBAN responses
CHAN_UNBAN_SYNTAX
UNBAN channel
UNBAN channel [nick]
CHAN_UNBANNED
You have been unbanned from %s.
CHAN_UNBANNED_OTHER
%s has been unbanned from %s.
# TOPIC responses
CHAN_TOPIC_SYNTAX
@@ -1623,14 +1671,6 @@ CHAN_CLEARED_USERS
CHAN_CLEARED_INVITES
All invites on channel %s have been removed.
# GETPASS responses
CHAN_GETPASS_SYNTAX
GETPASS channel
CHAN_GETPASS_UNAVAILABLE
GETPASS command unavailable because encryption is in use.
CHAN_GETPASS_PASSWORD_IS
Password for channel %s is %s.
# GETKEY responses
CHAN_GETKEY_SYNTAX
GETKEY channel
@@ -1639,28 +1679,6 @@ CHAN_GETKEY_NOKEY
CHAN_GETKEY_KEY
Key for channel %s is %s.
# SENDPASS responses
CHAN_SENDPASS_SYNTAX
SENDPASS channel
CHAN_SENDPASS_UNAVAILABLE
SENDPASS command unavailable because encryption is in use.
CHAN_SENDPASS_SUBJECT
Channel password (%s)
CHAN_SENDPASS_HEAD
Hi,
CHAN_SENDPASS_LINE_1
You have requested to receive the password of channel %s by e-mail.
CHAN_SENDPASS_LINE_2
The password is %s. For security reasons, you should change it as soon as you receive this mail.
CHAN_SENDPASS_LINE_3
If you don't know why this mail is sent to you, please ignore it silently.
CHAN_SENDPASS_LINE_4
PLEASE DON'T ANSWER TO THIS MAIL!
CHAN_SENDPASS_LINE_5
%s administrators.
CHAN_SENDPASS_OK
Password of %s has been sent.
# FORBID responses
CHAN_FORBID_SYNTAX
FORBID channel [reason]
@@ -2099,7 +2117,9 @@ BOT_UNASSIGN_SYNTAX
UNASSIGN chan
BOT_UNASSIGN_UNASSIGNED
There is no bot assigned to %s anymore.
BOT_UNASSIGN_PERSISTANT_CHAN
You can not unassign bots while persist is set on the channel.
# INFO responses
BOT_INFO_SYNTAX
INFO {chan | nick}
@@ -2879,8 +2899,6 @@ OPER_DEFCON_SYNTAX
DEFCON [1|2|3|4|5]
OPER_DEFCON_DENIED
Services are in Defcon mode, Please try again later.
OPER_DEFCON_NO_CONF
The Defcon system must be enabled in the services.conf file
OPER_DEFCON_CHANGED
Services are now at DEFCON %d
OPER_DEFCON_WALL
@@ -2900,6 +2918,10 @@ OPER_MODULE_REMOVE_FAIL
Unable to remove module %s
OPER_MODULE_NO_UNLOAD
This module can not be unloaded.
OPER_MODULE_ALREADY_LOADED
Module %s is already loaded.
OPER_MODULE_ISNT_LOADED
Module %s isn't loaded.
OPER_MODULE_LOAD_SYNTAX
MODLOAD FileName
OPER_MODULE_UNLOAD_SYNTAX
@@ -3265,6 +3287,8 @@ NICK_HELP_CMD_RELEASE
RELEASE Regain custody of your nick after RECOVER
NICK_HELP_CMD_SENDPASS
SENDPASS Forgot your password? Try this
NICK_HELP_CMD_RESETPASS
RESETPASS Helps you reset lost passwords
NICK_HELP_CMD_GHOST
GHOST Disconnects a "ghost" IRC session using your nick
NICK_HELP_CMD_ALIST
@@ -3862,6 +3886,12 @@ NICK_HELP_SENDPASS
May be limited to IRC operators on certain networks.
NICK_HELP_RESETPASS
Syntax: RESETPASS nickname
Sends a code key to the nickname with instructions on how to
reset their password.
NICK_HELP_CONFIRM
Syntax: CONFIRM passcode
@@ -3871,6 +3901,14 @@ NICK_HELP_CONFIRM
is sent to your e-mail address in the first step of the
registration process. For more information about the first
stage of the registration process, type: %R%S HELP REGISTER
This is also used after the RESETPASS command has been used to
force identify you to your nick so you may change your password.
NICK_HELP_CONFIRM_OPER
Additionally, Services Operators with the nickserv/confirm permission can
replace passcode with a users nick to force validate them.
NICK_HELP_RESEND
Syntax: RESEND
@@ -4015,10 +4053,10 @@ CHAN_HELP_CMD_STATUS
on a channel
CHAN_HELP_CMD_REGISTER
REGISTER Register a channel
CHAN_HELP_CMD_IDENTIFY
IDENTIFY Identify yourself with your password
CHAN_HELP_CMD_SET
SET Set channel options and information
CHAN_HELP_CMD_QOP
QOP Modify the list of QOP users
CHAN_HELP_CMD_AOP
AOP Modify the list of AOP users
CHAN_HELP_CMD_SOP
@@ -4031,8 +4069,6 @@ CHAN_HELP_CMD_AKICK
AKICK Maintain the AutoKick list
CHAN_HELP_CMD_DROP
DROP Cancel the registration of a channel
CHAN_HELP_CMD_SENDPASS
SENDPASS Help retrieve lost passwords
CHAN_HELP_CMD_BAN
BAN Bans a selected nick on a channel
CHAN_HELP_CMD_CLEAR
@@ -4049,14 +4085,12 @@ CHAN_HELP_CMD_KICK
KICK Kicks a selected nick from a channel
CHAN_HELP_CMD_LIST
LIST Lists all registered channels matching the given pattern
CHAN_HELP_CMD_LOGOUT
LOGOUT This command will logout the selected nickname
CHAN_HELP_CMD_OP
OP Gives Op status to a selected nick on a channel
CHAN_HELP_CMD_TOPIC
TOPIC Manipulate the topic of the specified channel
CHAN_HELP_CMD_UNBAN
UNBAN Remove all bans preventing you from entering a channel
UNBAN Remove all bans preventing a user from entering a channel
CHAN_HELP_CMD_VOICE
VOICE Voices a selected nick on a channel
CHAN_HELP_CMD_VOP
@@ -4075,10 +4109,6 @@ CHAN_HELP_CMD_OWNER
OWNER Gives you owner status on channel
CHAN_HELP_CMD_PROTECT
PROTECT Protects a selected nick on a channel
CHAN_HELP_CMD_ADMIN
ADMIN Protects a selected nick on a channel
CHAN_HELP_CMD_DEADMIN
DEADMIN Deprotects a selected nick on a channel
CHAN_HELP_CMD_DEOP
DEOP Deops a selected nick on a channel
@@ -4099,14 +4129,12 @@ CHAN_HELP_EXPIRES
for that period of time) will be automatically dropped.
CHAN_HELP_REGISTER
Syntax: REGISTER channel password description
Syntax: REGISTER channel description
Registers a channel in the %S database. In order
to use this command, you must first be a channel operator
on the channel you're trying to register. The password
is used with the IDENTIFY command to allow others to
make changes to the channel settings at a later time.
The last parameter, which must be included, is a
on the channel you're trying to register.
The description, which must be included, is a
general description of the channel's purpose.
When you register a channel, you are recorded as the
@@ -4122,28 +4150,11 @@ CHAN_HELP_REGISTER
first registered your nickname. If you haven't,
%R%s HELP for information on how to do so.
CHAN_HELP_IDENTIFY
Syntax: IDENTIFY channel password
Authenticates you to %S as the founder of the given
channel. Many commands require you to use this command
before using them. The password should be the same one
you sent with the REGISTER command.
CHAN_HELP_LOGOUT
Syntax: LOGOUT channel nickname
This command will log the selected nickname out meaning they
would have to reidentify themselves to regain their access.
If you are the founder of the channel, you can log out anybody,
else you can only log out yourself.
CHAN_HELP_DROP
Syntax: DROP channel
Unregisters the named channel. Can only be used by
channel founder, who must use the IDENTIFY command first.
channel founder.
CHAN_HELP_SET
Syntax: SET channel option parameters
@@ -4155,7 +4166,6 @@ CHAN_HELP_SET
FOUNDER Set the founder of a channel
SUCCESSOR Set the successor for a channel
PASSWORD Set the founder password
DESC Set the channel description
URL Associate a URL with the channel
EMAIL Associate an E-mail address with the channel
@@ -4174,6 +4184,7 @@ CHAN_HELP_SET
SIGNKICK Sign kicks that are done with KICK command
TOPICLOCK Topic can only be changed with TOPIC
XOP Toggle the user privilege system
PERSIST Set the channel as permanent
Type %R%S HELP SET option for more information on a
particular option.
@@ -4195,12 +4206,6 @@ CHAN_HELP_SET_SUCCESSOR
instead, just as if no successor had been set. The new
nickname must be a registered one.
CHAN_HELP_SET_PASSWORD
Syntax: SET channel PASSWORD password
Sets the password used to identify as the founder of the
channel.
CHAN_HELP_SET_DESC
Syntax: SET channel DESC description
@@ -4299,8 +4304,8 @@ CHAN_HELP_SET_PEACE
Syntax: SET channel PEACE {ON | OFF}
Enables or disables the peace option for a channel.
When peace is set, an user won't be able to kick,
ban or remove a channel status of an user that has
When peace is set, a user won't be able to kick,
ban or remove a channel status of a user that has
a level superior or equal to his via %S commands.
CHAN_HELP_SET_PRIVATE
@@ -4375,6 +4380,29 @@ CHAN_HELP_SET_XOP
Switching from xOP lists system to access list system
causes no problem though.
CHAN_HELP_SET_PERSIST
Syntax: SET channel PERSIST {ON | OFF}
Enables or disables the persistant channel setting.
When persistant is set, the service bot will remain
in the channel when it has emptied of users.
If your IRCd does not a permanent (persistant) channel
mode you must have a service bot in your channel to
set persist on, and it can not be unassigned while persist
is on.
If this network does not have BotServ enabled and does
not have a permanent channel mode, ChanServ will
join your channel when you set persist on (and leave when
it has been set off).
If your IRCd has a permanent (persistant) channel mode
and is is set or unset (for any reason, including MLOCK),
persist is automatically set and unset for the channel aswell.
Additionally, services will set or unset this mode when you
set persist on or off.
CHAN_HELP_SET_OPNOTICE
Syntax: SET channel OPNOTICE {ON | OFF}
@@ -4383,6 +4411,45 @@ CHAN_HELP_SET_OPNOTICE
channel whenever the OP or DEOP commands are used for a user
in the channel.
CHAN_HELP_QOP
Syntax: QOP channel ADD nick
QOP channel DEL {nick | entry-num | list}
QOP channel LIST [mask | list]
QOP channel CLEAR
Maintains the QOP (AutoOwner) list for a channel. The QOP
list gives users the right to be auto-owner on your channel,
which gives them almost (or potentially, total) access.
The QOP ADD command adds the given nickname to the
QOP list.
The QOP DEL command removes the given nick from the
QOP list. If a list of entry numbers is given, those
entries are deleted. (See the example for LIST below.)
The QOP LIST command displays the QOP list. If
a wildcard mask is given, only those entries matching the
mask are displayed. If a list of entry numbers is given,
only those entries are shown; for example:
QOP #channel LIST 2-5,7-9
Lists QOP entries numbered 2 through 5 and
7 through 9.
The QOP CLEAR command clears all entries of the
QOP list.
The QOP commands are limited to
founders (unless SECUREOPS is off). However, any user on the
QOP list may use the QOP LIST command.
This command may have been disabled for your channel, and
in that case you need to use the access list. See
%R%S HELP ACCESS for information about the access list,
and %R%S HELP SET XOP to know how to toggle between
the access list and xOP list systems.
CHAN_HELP_AOP
Syntax: AOP channel ADD nick
AOP channel DEL {nick | entry-num | list}
@@ -4546,6 +4613,7 @@ CHAN_HELP_ACCESS
Syntax: ACCESS channel ADD nick level
ACCESS channel DEL {nick | entry-num | list}
ACCESS channel LIST [mask | list]
ACCESS channel VIEW [mask | list]
ACCESS channel CLEAR
Maintains the access list for a channel. The access
@@ -4577,7 +4645,10 @@ CHAN_HELP_ACCESS
ACCESS #channel LIST 2-5,7-9
Lists access entries numbered 2 through 5 and
7 through 9.
The ACCESS VIEW command displays the access list similar
to ACCESS LIST but shows the creator and last used time.
The ACCESS CLEAR command clears all entries of the
access list.
@@ -4663,14 +4734,15 @@ CHAN_HELP_LEVELS
The LEVELS command allows fine control over the meaning of
the numeric access levels used for channels. With this
command, you can define the access level required for most
of %S's functions. (The SET FOUNDER and SET PASSWORD
commands, as well as this command, are always restricted to
the channel founder.)
of %S's functions. (The SET FOUNDER and this command
are always restricted to the channel founder.)
LEVELS SET allows the access level for a function or group of
functions to be changed. LEVELS DISABLE (or DIS for short)
disables an automatic feature or disallows access to a
function by anyone other than the channel founder.
function by anyone, INCLUDING the founder (although, the founder
can always reenable it).
LEVELS LIST shows the current levels for each function or
group of functions. LEVELS RESET resets the levels to the
default levels of a newly-created channel (see
@@ -4806,10 +4878,10 @@ CHAN_HELP_INVITE
on the channel.
CHAN_HELP_UNBAN
Syntax: UNBAN channel
Syntax: UNBAN channel [nick]
Tells %S to remove all bans preventing you from
entering the given channel.
Tells %S to remove all bans preventing you or the given
user from entering the given channel.
By default, limited to AOPs or those with level 5 and above
on the channel.
@@ -4870,35 +4942,12 @@ CHAN_HELP_GETKEY
Syntax: GETKEY channel
Returns the key of the given channel.
CHAN_HELP_SENDPASS
Syntax: SENDPASS channel
Send the password of the given channel to the e-mail address
set in the founder's nickname record. This command is really
useful to deal with lost passwords.
May be limited to IRC operators on certain networks.
CHAN_SERVADMIN_HELP
Services Operators can also drop any channel without needing
to identify via password, and may view the access, AKICK,
and level setting lists for any channel.
CHAN_SERVADMIN_HELP_LOGOUT
Syntax: LOGOUT channel [nickname]
This command will log the selected nickname out meaning they
would have to reidentify themselves to regain their access.
If you are the founder of the channel, you can log out anybody,
else you can only log out yourself.
If you are a Services Operators, you can log out
anybody of any channel without having to be the founder
of the channel. Also, you can omit the nickname parameter;
this will log out all identified users from the channel.
CHAN_SERVADMIN_HELP_DROP
Syntax: DROP channel
@@ -4921,7 +4970,8 @@ CHAN_SERVADMIN_HELP_SET_NOEXPIRE
CHAN_SERVADMIN_HELP_INFO
Services Operators can use the ALL parameter with any channel.
Services Operators with the chanserv/auspex permission can
use the ALL parameter with any channel.
CHAN_SERVADMIN_HELP_LIST
Syntax: LIST pattern [FORBIDDEN] [SUSPENDED] [NOEXPIRE]
@@ -5909,7 +5959,7 @@ BOT_HELP_KICK_BOLDS
Sets the bolds kicker on or off. When enabled, this
option tells the bot to kick users who use bolds.
ttb is the number of times an user can be kicked
ttb is the number of times a user can be kicked
before it get banned. Don't give ttb to disable
the ban system once activated.
@@ -5919,7 +5969,7 @@ BOT_HELP_KICK_COLORS
Sets the colors kicker on or off. When enabled, this
option tells the bot to kick users who use colors.
ttb is the number of times an user can be kicked
ttb is the number of times a user can be kicked
before it get banned. Don't give ttb to disable
the ban system once activated.
@@ -5929,7 +5979,7 @@ BOT_HELP_KICK_REVERSES
Sets the reverses kicker on or off. When enabled, this
option tells the bot to kick users who use reverses.
ttb is the number of times an user can be kicked
ttb is the number of times a user can be kicked
before it get banned. Don't give ttb to disable
the ban system once activated.
@@ -5939,7 +5989,7 @@ BOT_HELP_KICK_UNDERLINES
Sets the underlines kicker on or off. When enabled, this
option tells the bot to kick users who use underlines.
ttb is the number of times an user can be kicked
ttb is the number of times a user can be kicked
before it get banned. Don't give ttb to disable
the ban system once activated.
@@ -5955,7 +6005,7 @@ BOT_HELP_KICK_CAPS
text line (if not given, it defaults to 10 characters
and 25%%).
ttb is the number of times an user can be kicked
ttb is the number of times a user can be kicked
before it get banned. Don't give ttb to disable
the ban system once activated.
@@ -5967,7 +6017,7 @@ BOT_HELP_KICK_FLOOD
the channel using at least ln lines in secs seconds
(if not given, it defaults to 6 lines in 10 seconds).
ttb is the number of times an user can be kicked
ttb is the number of times a user can be kicked
before it get banned. Don't give ttb to disable
the ban system once activated.
@@ -5979,7 +6029,7 @@ BOT_HELP_KICK_REPEAT
themselves num times (if num is not given, it
defaults to 3).
ttb is the number of times an user can be kicked
ttb is the number of times a user can be kicked
before it get banned. Don't give ttb to disable
the ban system once activated.
@@ -5994,7 +6044,7 @@ BOT_HELP_KICK_BADWORDS
BADWORDS command. Type %R%S HELP BADWORDS for
more information.
ttb is the number of times an user can be kicked
ttb is the number of times a user can be kicked
before it get banned. Don't give ttb to disable
the ban system once activated.
@@ -6011,12 +6061,12 @@ BOT_HELP_BADWORDS
The BADWORDS ADD command adds the given word to the
badword list. If SINGLE is specified, a kick will be
done only if an user says the entire word. If START is
specified, a kick will be done if an user says a word
done only if a user says the entire word. If START is
specified, a kick will be done if a user says a word
that starts with word. If END is specified, a kick
will be done if an user says a word that ends with
will be done if a user says a word that ends with
word. If you don't specify anything, a kick will
be issued every time word is said by an user.
be issued every time word is said by a user.
The BADWORDS DEL command removes the given word from the
bad words list. If a list of entry numbers is given, those
@@ -6274,3 +6324,15 @@ OPER_UMODE_UNSUPPORTED
OPER_SUPER_ADMIN_NOT_ENABLED
SuperAdmin setting not enabled in services.conf
OPER_HELP_SYNC
Syntax: SQLSYNC
This command syncs your databases with SQL. You should
only have to execute this command once, when you initially
import your databases into SQL.
OPER_HELP_CMD_SQLSYNC
SQLSYNC Import your databases to SQL
OPER_SYNC_UPDATING
Updating MySQL.
OPER_SYNC_UPDATED
Finished updating MySQL.
+240 -181
View File
@@ -1,6 +1,6 @@
# Spanish Language File.
#
# (C) 2003-2008 Anope Team
# (C) 2003-2010 Anope Team
# Contact us at team@anope.org
#
# Please read COPYING and README for furhter details.
@@ -877,6 +877,24 @@ NICK_SENDPASS_LINE_5
NICK_SENDPASS_OK
La clave de %s ha sido enviada.
# RESERTPASS responses
NICK_RESETPASS_SYNTAX
RESETPASS nickname
NICK_RESETPASS_SUBJECT
Reset password request for %s
NICK_RESETPASS_MESSAGE
Hi,
You have requested to have the password for %s reset.
To reset your password, type %R%s CONFIRM %s
If you don't know why this mail is sent to you, please ignore it silently.
PLEASE DON'T ANSWER TO THIS MAIL!
%s administrators.
NICK_RESETPASS_COMPLETE
Password reset email for %s has been sent.
# FORBID responses
NICK_SUSPEND_SYNTAX
SUSPEND nickname reason
@@ -914,10 +932,6 @@ NICK_IS_PREREG
Este nick esta esperando una verificacion por e-mail antes de poder completar el registro.
NICK_ENTER_REG_CODE
El password ha sido enviado a %s, tipea %R%s confirm <password> para completar el registro.
NICK_CONFIRM_NOT_FOUND
El paso de registro 1 puede haber expirado. Usa "%R%s register <password> <email>" primero.
NICK_CONFIRM_INVALID
Password invalido. Chequea el e-mail e intenta nuevamente.
NICK_REG_MAIL_SUBJECT
Registro de Nick (%s)
NICK_REG_MAIL_HEAD
@@ -937,6 +951,16 @@ NICK_GETPASS_PASSCODE_IS
NICK_FORCE_REG
Nick %s confirmado.
# Confirm responses
NICK_CONFIRM_NOT_FOUND
El paso de registro 1 puede haber expirado. Usa "%R%s register <password> <email>" primero.
NICK_CONFIRM_INVALID
Password invalido. Chequea el e-mail e intenta nuevamente.
NICK_CONFIRM_EXPIRED
Your password reset request has expired.
NICK_CONFIRM_SUCCESS
You are now identified for your nick. Change your password using "%R%s SET PASSWORD newpassword" now.
###########################################################################
#
# ChanServ messages
@@ -1017,6 +1041,12 @@ CHAN_LEVEL_TOPIC
CHAN_LEVEL_INFO
Permitido usar el comando INFO con
la opcion ALL
CHAN_LEVEL_AUTOOWNER
Automatic mode +q
CHAN_LEVEL_OWNER
Allowed to use OWNER command
CHAN_LEVEL_OWNERME
Allowed to (de)owner him/herself
# Automatic responses
CHAN_IS_REGISTERED
@@ -1034,7 +1064,7 @@ CHAN_X_INVALID
# REGISTER responses
CHAN_REGISTER_SYNTAX
REGISTER canal clave descripcion
REGISTER canal descripcion
CHAN_REGISTER_DISABLED
Lo siento, el registro de canales esta temporalmente deshabilitado.
CHAN_REGISTER_NOT_LOCAL
@@ -1053,36 +1083,11 @@ CHAN_REGISTRATION_FAILED
Lo siento, el registro ha fallado.
CHAN_REGISTERED
El canal %s esta registrado bajo tu nickname: %s
CHAN_PASSWORD_IS
Tu clave para el canal es %s - Recuerdala para uso futuro.
CHAN_REGISTER_NONE_CHANNEL
Has intentado registrar el canal %s, el cual no existe.
CHAN_SYMBOL_REQUIRED
Por favor usar el simbolo # cuando intentes registrar un canal.
# IDENTIFY responses
CHAN_IDENTIFY_SYNTAX
IDENTIFY canal clave
CHAN_IDENTIFY_FAILED
Lo siento, la identificacion ha fallado.
CHAN_IDENTIFY_SUCCEEDED
Clave aceptada - ahora tienes nivel de fundador en %s.
# LOGOUT responses
CHAN_LOGOUT_SYNTAX
LOGOUT canal nickname
CHAN_LOGOUT_SERVADMIN_SYNTAX
LOGOUT canal [nickname]
CHAN_LOGOUT_SUCCEEDED
El usuario %s ha sido desconectado del canal %s.
CHAN_LOGOUT_ALL_SUCCEEDED
Todos los usuarios identificados han sido desconectados del canal %s (except the channel founder).
CHAN_LOGOUT_FOUNDER_FAILED
You may not log out of %s (you are founder).
CHAN_LOGOUT_NOT_LOGGEDIN
%s was not logged into %s.
# DROP responses
CHAN_DROP_SYNTAX
DROP canal
@@ -1113,14 +1118,6 @@ CHAN_SUCCESSOR_UNSET
CHAN_SUCCESSOR_IS_FOUNDER
%s no puede ser el sucesor en el canal %s ya que el es el fundador.
# SET PASSWORD responses
CHAN_SET_PASSWORD_FAILED
Lo siento, el seteo de la clave no fue posible.
CHAN_PASSWORD_CHANGED
Clave para %s cambiada.
CHAN_PASSWORD_CHANGED_TO
La clave para %s cambiado a %s.
# SET DESC responses
CHAN_DESC_CHANGED
La descripcion de %s cambiada a%s.
@@ -1254,6 +1251,14 @@ CHAN_SET_XOP_ON
CHAN_SET_XOP_OFF
El sistema de listas xOP para %s esta ahora Apagado.
# SET PERSISTANT responces
CHAN_SET_PERSIST_SYNTAX
SET channel PERSIST {ON | OFF}
CHAN_SET_PERSIST_ON
Channel %s is now persistant.
CHAN_SET_PERSIST_OFF
Channel %s is no longer persistant.
# SET NOEXPIRE responses
CHAN_SET_NOEXPIRE_SYNTAX
SET canal NOEXPIRE {ON | OFF}
@@ -1274,6 +1279,37 @@ CHAN_XOP_ACCESS
CHAN_XOP_NOT_AVAILABLE
El sistema xOP no esta disponible.
# QOP messages
CHAN_QOP_SYNTAX
QOP channel {ADD|DEL|LIST|CLEAR} [nick | entry-list]
CHAN_QOP_DISABLED
Sorry, channel QOP list modification is temporarily disabled.
CHAN_QOP_NICKS_ONLY
Channel QOP lists may only contain registered nicknames.
CHAN_QOP_ADDED
%s added to %s QOP list.
CHAN_QOP_MOVED
%s moved to %s QOP list.
CHAN_QOP_NO_SUCH_ENTRY
No such entry (#%d) on %s QOP list.
CHAN_QOP_NOT_FOUND
%s not found on %s QOP list.
CHAN_QOP_NO_MATCH
No matching entries on %s QOP list.
CHAN_QOP_DELETED
%s deleted from %s QOP list.
CHAN_QOP_DELETED_ONE
Deleted 1 entry from %s QOP list.
CHAN_QOP_DELETED_SEVERAL
Deleted %d entries from %s QOP list.
CHAN_QOP_LIST_EMPTY
%s QOP list is empty.
CHAN_QOP_LIST_HEADER
QOP list for %s:
Num Nick
CHAN_QOP_CLEAR
Channel %s QOP list has been cleared.
# AOP messages
CHAN_AOP_SYNTAX
AOP canal {ADD|DEL|LIST|CLEAR} [nick | instancia]
@@ -1405,7 +1441,7 @@ CHAN_VOP_CLEAR
# ACCESS messages
CHAN_ACCESS_SYNTAX
ACCESS canal {ADD|DEL|LIST|CLEAR} [nick [nivel] | lista]
ACCESS canal {ADD|DEL|LIST|VIEW|CLEAR} [nick [nivel] | lista]
CHAN_ACCESS_XOP
No puedes usar este comando.
Usa los comandos AOP, SOP y VOP en vez.
@@ -1455,6 +1491,12 @@ CHAN_ACCESS_LIST_AXS_FORMAT
%3d %4d %s
CHAN_ACCESS_CLEAR
La lista de acceso para el canal %s ha sido limpiada.
CHAN_ACCESS_VIEW_XOP_FORMAT
%3d %s %s
by %s, last seen %s
CHAN_ACCESS_VIEW_AXS_FORMAT
%3d %4d %s
by %s, last seen %s
# AKICK responses
CHAN_AKICK_SYNTAX
@@ -1509,6 +1551,8 @@ CHAN_LEVELS_RANGE
El nivel debe ser entre %d a %d inclusive.
CHAN_LEVELS_CHANGED
Nivel para %s en el canal %s cambiado a %d.
CHAN_LEVELS_CHANGED_FOUNDER
Level for %s on channel %s changed to founder only.
CHAN_LEVELS_UNKNOWN
Opcion %s no conocida. Tipea %R%s HELP LEVELS DESC para una lista de opciones validas.
CHAN_LEVELS_DISABLED
@@ -1591,6 +1635,8 @@ CHAN_INFO_OPT_TOPICLOCK
Lock de topic
CHAN_INFO_OPT_XOP
Sistema de listas xOP
CHAN_INFO_OPT_PERSIST
Persistant
CHAN_INFO_OPT_NONE
Ninguno
CHAN_INFO_MODE_LOCK
@@ -1619,12 +1665,17 @@ CHAN_INVITE_ALREADY_IN
You are already in %s!
CHAN_INVITE_SUCCESS
You have been invited to %s.
CHAN_INVITE_OTHER_SUCCESS
%s has been invited to %s.
# UNBAN responses
CHAN_UNBAN_SYNTAX
UNBAN canal
UNBAN canal [nick]
CHAN_UNBANNED
Has sido desbaneado de %s.
CHAN_UNBANNED_OTHER
%s has been unbanned from %s.
# TOPIC responses
CHAN_TOPIC_SYNTAX
@@ -1650,14 +1701,6 @@ CHAN_CLEARED_USERS
CHAN_CLEARED_INVITES
Todos los invites en el canal %s han sido removidos.
# GETPASS responses
CHAN_GETPASS_SYNTAX
GETPASS canal
CHAN_GETPASS_UNAVAILABLE
Comando GETPASS no permitido porque encriptacion esta en uso.
CHAN_GETPASS_PASSWORD_IS
La clave para el canal %s es %s.
# GETKEY responses
CHAN_GETKEY_SYNTAX
GETKEY canal
@@ -1666,28 +1709,6 @@ CHAN_GETKEY_NOKEY
CHAN_GETKEY_KEY
Key for channel %s is %s.
# SENDPASS responses
CHAN_SENDPASS_SYNTAX
SENDPASS canal
CHAN_SENDPASS_UNAVAILABLE
Comando SENDPASS no permitido porque encriptacion esta en uso.
CHAN_SENDPASS_SUBJECT
Clave del canal (%s)
CHAN_SENDPASS_HEAD
Hola,
CHAN_SENDPASS_LINE_1
Has solicitado recibir la clave del canal %s por e-mail.
CHAN_SENDPASS_LINE_2
La clave es %s. Por razones de seguridad deberas cambiarla en cuanto recibas este mail.
CHAN_SENDPASS_LINE_3
Si no sabes porque recibiste este mail, por favor ignoralo.
CHAN_SENDPASS_LINE_4
POR FAVOR NO RESPONDER A ESTE EMAIL!
CHAN_SENDPASS_LINE_5
Administradores de %s.
CHAN_SENDPASS_OK
La clave de %s ha sido enviada.
# FORBID responses
CHAN_FORBID_SYNTAX
FORBID canal [razon]
@@ -2133,6 +2154,8 @@ BOT_UNASSIGN_SYNTAX
UNASSIGN canal
BOT_UNASSIGN_UNASSIGNED
Ya no hay un bot asignado a %s.
BOT_UNASSIGN_PERSISTANT_CHAN
You can not unassign bots while persist is set on the channel.
# INFO responses
BOT_INFO_SYNTAX
@@ -2957,8 +2980,6 @@ OPER_DEFCON_SYNTAX
DEFCON [1|2|3|4|5]
OPER_DEFCON_DENIED
Los servicios estan deshabilitados temporalmente, por favor intenta mas tarde
OPER_DEFCON_NO_CONF
El sistema Defcon debe ser habilitado en el archivo services.conf
OPER_DEFCON_CHANGED
Servicios estan ahora en DEFCON %d
OPER_DEFCON_WALL
@@ -2978,6 +2999,10 @@ OPER_MODULE_REMOVE_FAIL
Imposible quitar modulo %s
OPER_MODULE_NO_UNLOAD
This module can not be unloaded.
OPER_MODULE_ALREADY_LOADED
Module %s is already loaded.
OPER_MODULE_ISNT_LOADED
Module %s isn't loaded.
OPER_MODULE_LOAD_SYNTAX
MODLOAD NombreArchivo
OPER_MODULE_UNLOAD_SYNTAX
@@ -3373,6 +3398,8 @@ NICK_HELP_CMD_RELEASE
RELEASE Retoma custodia de tu nick luego de RECOVER
NICK_HELP_CMD_SENDPASS
SENDPASS Olvidaste tu clave? Intenta esto
NICK_HELP_CMD_RESETPASS
RESETPASS Helps you reset lost passwords.
NICK_HELP_CMD_GHOST
GHOST Disconnects a "ghost" IRC session using your nick
NICK_HELP_CMD_ALIST
@@ -3968,6 +3995,12 @@ NICK_HELP_SENDPASS
Puede ser limitado a operadores de IRC en ciertas
redes.
NICK_HELP_RESETPASS
Syntax: RESETPASS nickname
Sends a code key to the nickname with instructions on how to
reset their password.
NICK_HELP_CONFIRM
Sintaxis: CONFIRM passcode
@@ -3977,6 +4010,14 @@ NICK_HELP_CONFIRM
enviado a tu direccion e-mail en el primer paso del proceso de
registo. Para mas informacion sobre la primera etpa del proceso
de registro, escribe: %R%S HELP REGISTER
This is also used after the RESETPASS command has been used to
force identify you to your nick so you may change your password.
NICK_HELP_CONFIRM_OPER
Additionally, Services Operators with the nickserv/confirm permission can
replace passcode with a users nick to force validate them.
NICK_HELP_RESEND
Sintaxis: RESEND
@@ -4138,10 +4179,10 @@ CHAN_HELP_CMD_STATUS
usuario en un canal
CHAN_HELP_CMD_REGISTER
REGISTER Registra un canal
CHAN_HELP_CMD_IDENTIFY
IDENTIFY Te identifica con tu clave
CHAN_HELP_CMD_SET
SET Setea opciones e informacion de un canal
CHAN_HELP_CMD_QOP
QOP Modify the list of QOP users
CHAN_HELP_CMD_AOP
AOP Modifica la lista de usuarios AOP
CHAN_HELP_CMD_SOP
@@ -4154,8 +4195,6 @@ CHAN_HELP_CMD_AKICK
AKICK Mantiene la lista de AutoKick
CHAN_HELP_CMD_DROP
DROP Cancela la registracion de un canal
CHAN_HELP_CMD_SENDPASS
SENDPASS Ayuda a recuperar claves perdidas
CHAN_HELP_CMD_BAN
BAN Bans a selected nick on a channel
CHAN_HELP_CMD_CLEAR
@@ -4172,14 +4211,12 @@ CHAN_HELP_CMD_KICK
KICK Kicks a selected nick from a channel
CHAN_HELP_CMD_LIST
LIST Lists all registered channels matching the given pattern
CHAN_HELP_CMD_LOGOUT
LOGOUT This command will logout the selected nickname
CHAN_HELP_CMD_OP
OP Gives Op status to a selected nick on a channel
CHAN_HELP_CMD_TOPIC
TOPIC Manipulate the topic of the specified channel
CHAN_HELP_CMD_UNBAN
UNBAN Remove all bans preventing you from entering a channel
UNBAN Remove all bans preventing a user from entering a channel
CHAN_HELP_CMD_VOICE
VOICE Voices a selected nick on a channel
CHAN_HELP_CMD_VOP
@@ -4198,10 +4235,6 @@ CHAN_HELP_CMD_OWNER
OWNER Gives you owner status on channel
CHAN_HELP_CMD_PROTECT
PROTECT Protects a selected nick on a channel
CHAN_HELP_CMD_ADMIN
ADMIN Protects a selected nick on a channel
CHAN_HELP_CMD_DEADMIN
DEADMIN Deprotects a selected nick on a channel
CHAN_HELP_CMD_DEOP
DEOP Deops a selected nick on a channel
@@ -4224,53 +4257,32 @@ CHAN_HELP_EXPIRES
automaticamente botado.
CHAN_HELP_REGISTER
Sintaxis: REGISTER canal clave descripcion
Registra un canal en la base de datos de %S. Para
usar este comando, debes primero ser un operador en el
canal que intentas registrar. La clave es usada con
el comando IDENTIFY para permitir a otros hacer
cambios al seteo del canal posteriormente.
El ultimo parametro, el cual debe ser incluido, es
una descripcion general del proposito del canal.
Cuando registras un canal, eres reconocido como el
"fundador" del canal. El fundador del canal puede
cambiar todos los seteos para el canal;
%S tambien dara al fundador prvilegios de operador
automaticamente cuando el usuario entre al canal.
Averigua sobre el comando ACCESS
(%R%S HELP ACCESS) para informacion sobre
como dar estos privilegios a otros usuarios del canal.
NOTESE: Para registrar un canal debes haber registrado
tu nickname primero. Si aun no lo haz hecho, tipea
%R%s HELP para mayor informacion en como hacerlo.
Sintaxis: REGISTER canal descripcion
CHAN_HELP_IDENTIFY
Sintaxis: IDENTIFY canal clave
Te identifica con %S como el fundador del canal dado.
Muchos comandos requieren que uses este comando antes
de usarlos. La clave deberia ser la misma que
enviaste con el comando REGISTER.
CHAN_HELP_LOGOUT
Sintaxis: LOGOUT canal nickname
Este comando hace al nickname dado ya no identificado
en el canal dado.
Si eres el fundador del canal, puedes desconectar a
quien sea, de otra forma solo te puedes desconectar
a ti mismo.
Registers a channel in the %S database. In order
to use this command, you must first be a channel operator
on the channel you're trying to register.
The description, which must be included, is a
general description of the channel's purpose.
When you register a channel, you are recorded as the
"founder" of the channel. The channel founder is allowed
to change all of the channel settings for the channel;
%S will also automatically give the founder
channel-operator privileges when s/he enters the channel.
See the ACCESS command (%R%S HELP ACCESS) for
information on giving a subset of these privileges to
other channel users.
NOTICE: In order to register a channel, you must have
first registered your nickname. If you haven't,
%R%s HELP for information on how to do so.
CHAN_HELP_DROP
Sintaxis: DROP canal
Desregistra el canal dado. Solo puede ser usado por el
fundador del canal, quien debe primero usar el comando
IDENTIFY.
fundador del canal.
CHAN_HELP_SET
Sintaxis: SET canal opcion parametros
@@ -4282,7 +4294,6 @@ CHAN_HELP_SET
FOUNDER Setea el fundador de un canal
SUCCESSOR Setea el sucesor de un canal
PASSWORD Setea el pasword del fundador
DESC Setea la descripcion del canal
URL Asocia una URL con el canal
EMAIL Asocia un E-mail con el canal
@@ -4307,6 +4318,7 @@ CHAN_HELP_SET
TOPIC
XOP Cambia el sistema de privilegios de
usuario
PERSIST Set the channel as permanent
Tipea %R%S HELP opcion para mayor informacion
acerca de una opcion en particular.
@@ -4328,12 +4340,6 @@ CHAN_HELP_SET_SUCCESSOR
si no hubiese un sucesor. El nuevo nickname debe ser uno
registrado.
CHAN_HELP_SET_PASSWORD
Sintaxis: SET canal PASSWORD clave
Setea la clave usado para identificarse como el
fundador del canal.
CHAN_HELP_SET_DESC
Sintaxis: SET canal DESC descripcion
@@ -4518,6 +4524,29 @@ CHAN_HELP_SET_XOP
Cambiar de listas xOP al sistema de listas de acceso no causa
problema alguno.
CHAN_HELP_SET_PERSIST
Syntax: SET channel PERSIST {ON | OFF}
Enables or disables the persistant channel setting.
When persistant is set, the service bot will remain
in the channel when it has emptied of users.
If your IRCd does not a permanent (persistant) channel
mode you must have a service bot in your channel to
set persist on, and it can not be unassigned while persist
is on.
If this network does not have BotServ enabled and does
not have a permanent channel mode, ChanServ will
join your channel when you set persist on (and leave when
it has been set off).
If your IRCd has a permanent (persistant) channel mode
and is is set or unset (for any reason, including MLOCK),
persist is automatically set and unset for the channel aswell.
Additionally, services will set or unset this mode when you
set persist on or off.
CHAN_HELP_SET_OPNOTICE
Sintaxis: SET canal OPNOTICE {ON | OFF}
@@ -4526,6 +4555,45 @@ CHAN_HELP_SET_OPNOTICE
al usuario del canal cuando los comandos OP o DEOP sean
usados para un usuario en el canal.
CHAN_HELP_QOP
Syntax: QOP channel ADD nick
QOP channel DEL {nick | entry-num | list}
QOP channel LIST [mask | list]
QOP channel CLEAR
Maintains the QOP (AutoOwner) list for a channel. The QOP
list gives users the right to be auto-owner on your channel,
which gives them almost (or potentially, total) access.
The QOP ADD command adds the given nickname to the
QOP list.
The QOP DEL command removes the given nick from the
QOP list. If a list of entry numbers is given, those
entries are deleted. (See the example for LIST below.)
The QOP LIST command displays the QOP list. If
a wildcard mask is given, only those entries matching the
mask are displayed. If a list of entry numbers is given,
only those entries are shown; for example:
QOP #channel LIST 2-5,7-9
Lists QOP entries numbered 2 through 5 and
7 through 9.
The QOP CLEAR command clears all entries of the
QOP list.
The QOP commands are limited to
founders (unless SECUREOPS is off). However, any user on the
QOP list may use the QOP LIST command.
This command may have been disabled for your channel, and
in that case you need to use the access list. See
%R%S HELP ACCESS for information about the access list,
and %R%S HELP SET XOP to know how to toggle between
the access list and xOP list systems.
CHAN_HELP_AOP
Sintaxis: AOP canal ADD nick
AOP canal DEL {nick | instancia | lista}
@@ -4699,6 +4767,7 @@ CHAN_HELP_ACCESS
Sintaxis: ACCESS canal ADD nick nivel
ACCESS canal DEL {nick | indices | lista}
ACCESS canal LIST [mascara | lista]
ACCESS canal VIEW [mascara | lista]
ACCESS canal CLEAR
Mantiene la lista de acceso para un canal. La lista
@@ -4732,7 +4801,10 @@ CHAN_HELP_ACCESS
ACCESS #canal LIST 2-5,7-9
Lista instancias de acceso numeradas 2 hasta 5 y
7 hasta 9.
The ACCESS VIEW command displays the access list similar
to ACCESS LIST but shows the creator and last used time.
El comando ACCESS CLEAR limpia todas las instancias
de la lista de acceso.
@@ -4811,30 +4883,30 @@ CHAN_HELP_AKICK
de ka lista de akicks.
CHAN_HELP_LEVELS
Sintaxis: LEVELS canal SET tipo nivel
Sintaxis: LEVELS canal SET tipo [nivel|FOUNDER]
LEVELS canal {DIS | DISABLE} tipo
LEVELS canal LIST
LEVELS canal RESET
El comando LEVELS permite un control fino sobre el
significado de los niveles de acceso numericos usados para
canales. Con este comando, puedes definir el nivel de acceso
requerido para la mayoria de las funciones de %S.
(Los comandos SET FOUNDER y SET PASSWORD, asi como
este comando estan siempre restringidos al fundador del
canal.)
The LEVELS command allows fine control over the meaning of
the numeric access levels used for channels. With this
command, you can define the access level required for most
of %S's functions. (The SET FOUNDER and this command
are always restricted to the channel founder.)
LEVELS SET permite cambiar el nivel de acceso para una funcion
o un grupo de funciones. LEVELS DISABLE (o DIS para corto)
desabilita una caracteristica automatica o prohibe acceso a una
funcion para todos excepto el fundador del canal.
LEVELS LIST muestra los niveles actuales para cada funcion o
grupo de funciones. LEVELS RESET resetea los niveles a los
niveles por defecto de un canal recien creado (ver
HELP ACCESS LEVELS).
LEVELS SET allows the access level for a function or group of
functions to be changed. LEVELS DISABLE (or DIS for short)
disables an automatic feature or disallows access to a
function by anyone, INCLUDING the founder (although, the founder
can always reenable it).
LEVELS LIST shows the current levels for each function or
group of functions. LEVELS RESET resets the levels to the
default levels of a newly-created channel (see
HELP ACCESS LEVELS).
Para una lista de las caracteristicas y funciones a los que
se les puede cambiar los niveles, ver HELP LEVELS DESC.
For a list of the features and functions whose levels can be
set, see HELP LEVELS DESC.
CHAN_HELP_LEVELS_DESC
Los siguientes nombres de decaracteristicas/funciones son
@@ -4966,10 +5038,10 @@ CHAN_HELP_INVITE
y mayor en el canal.
CHAN_HELP_UNBAN
Sintaxis: UNBAN canal
Sintaxis: UNBAN canal [nick]
Le dice a %S que remueva todos los bans previeniendo
que entres al canal dado.
Tells %S to remove all bans preventing you or the given
user from entering the given channel.
Por defecto, limitado a AOPs o aquellos con nivel 5
y mayor en el canal.
@@ -5030,15 +5102,6 @@ CHAN_HELP_GETKEY
Sintaxis: GETKEY canal
Retorna la key del canal dado.
CHAN_HELP_SENDPASS
Sintaxis: SENDPASS canal
Envia la clave del canal dado a la direccion email seteada
en el archivo del nickname del fundador. Este comando
es sumamente util para lidiar con claves perdidas.
Puede ser limitado a Operadores de IRC en ciertas redes.
CHAN_SERVADMIN_HELP
@@ -5047,22 +5110,6 @@ CHAN_SERVADMIN_HELP
ver el acceso, AKICK, y seteos de las listas de niveles para
cualquier canal.
CHAN_SERVADMIN_HELP_LOGOUT
Sintaxis: LOGOUT canal [nickname]
Este comando hace al nick seleccionado ya no identificado
para el canal dado.
Si tu eres el fundador del canal, puedes desconectar a
quien sea, de otra manera solo te puedes desconectar a
ti mismo.
Si eres un administrador de Servicios, puedes
desconectar a quien sea de un canal sin ser el fundador
del canal. Ademas, puedes omitir el parametro nickname;
esto desconectara a todos los usuarios identificados
del canal.
CHAN_SERVADMIN_HELP_DROP
Sintaxis: DROP canal
@@ -5088,8 +5135,8 @@ CHAN_SERVADMIN_HELP_SET_NOEXPIRE
CHAN_SERVADMIN_HELP_INFO
Administradores de Servicios pueden usar el parametro
ALL con cualquier canal.
Services Operators with the chanserv/auspex permission can
use the ALL parameter with any channel.
CHAN_SERVADMIN_HELP_LIST
Sintaxis: LIST patron [FORBIDDEN] [SUSPENDED] [NOEXPIRE]
@@ -6571,3 +6618,15 @@ OPER_UMODE_UNSUPPORTED
OPER_SUPER_ADMIN_NOT_ENABLED
SuperAdmin setting not enabled in services.conf
OPER_HELP_SYNC
Syntax: SQLSYNC
This command syncs your databases with SQL. You should
only have to execute this command once, when you initially
import your databases into SQL.
OPER_HELP_CMD_SQLSYNC
SQLSYNC Import your databases to SQL
OPER_SYNC_UPDATING
Updating MySQL.
OPER_SYNC_UPDATED
Finished updating MySQL.
+1076 -1019
View File
File diff suppressed because it is too large Load Diff
+249 -185
View File
@@ -1,6 +1,6 @@
# Greek language file.
#
# (C) 2003-2008 Anope Team
# (C) 2003-2010 Anope Team
# Contact us at team@anope.org
#
# Please read COPYING and README for furhter details.
@@ -236,7 +236,7 @@ MAIL_X_INVALID
MAIL_LATER
Äåí ìðïñåß íá óôáëåß óôç äéåýèõíóç ôï ìÞíõìá ãéá ôçí þñá; ðáñáêáëþ ðñïóðÜèçóå ëßãï áñãüôåñá.
MAIL_DELAYED
Ðáñáêáëþ ðåñßìåíå ^B%d^B äåõôåñüëåðôá êáé îáíáðñïóðÜèçóå.
Ðáñáêáëþ ðåñßìåíå %d äåõôåñüëåðôá êáé îáíáðñïóðÜèçóå.
NO_REASON
×ùñßò ëüãïò
@@ -366,7 +366,7 @@ NICK_GROUP_SAME
Åßóáé Þäç ìÝëïò ôçò ïìÜäáò ôïõ %s.
NICK_GROUP_TOO_MANY
Åßíáé ðÜñá ðïëëÜ øåõäþíõìá ìÝóá %s's ïìÜäá; êñÜôá ìåñéêÜ êáé âãÜëå êÜðïéá.
ÃñÜøå ^B%R%s HELP GLIST^B êáé %R%s HELP DROP
ÃñÜøå %R%s HELP GLIST êáé %R%s HELP DROP
ãéá ðåñéóóüôåñåò ðëçñïöïñßåò.
NICK_GROUP_JOINED
Åßóáé ôþñá ìÝóá óôçí ïìÜäá ôïõ %s.
@@ -872,6 +872,24 @@ NICK_SENDPASS_LINE_5
NICK_SENDPASS_OK
Ï êùäéêüò ôïõ %s Ý÷åé óôáëèåß.
# RESETPASS responses
NICK_RESETPASS_SYNTAX
RESETPASS nickname
NICK_RESETPASS_SUBJECT
Reset password request for %s
NICK_RESETPASS_MESSAGE
Hi,
You have requested to have the pasword for %s reset.
To reset your password, type %R%s CONFIRM %s
If you don't know why this mail is sent to you, please ignore it silently.
PLEASE DON'T ANSWER TO THIS MAIL!
%s administrators.
NICK_RESETPASS_COMPLETE
Password reset email for %s has been sent.
# FORBID responses
NICK_SUSPEND_SYNTAX
SUSPEND nickname reason
@@ -915,10 +933,6 @@ NICK_IS_PREREG
This nick is awaiting an e-mail verification code before completing registration.
NICK_ENTER_REG_CODE
A passcode has been sent to %s, please type %R%s confirm <passcode> to complete registration
NICK_CONFIRM_NOT_FOUND
Registration step 1 may have expired, please use "%R%s register <password> <email>" first.
NICK_CONFIRM_INVALID
Invalid passcode has been entered, please check the e-mail again, and retry
NICK_REG_MAIL_SUBJECT
Nickname Registration (%s)
NICK_REG_MAIL_HEAD
@@ -938,6 +952,16 @@ NICK_GETPASS_PASSCODE_IS
NICK_FORCE_REG
Nickname %s confirmed
# Confirm responses
NICK_CONFIRM_NOT_FOUND
Registration step 1 may have expired, please use "%R%s register <password> <email>" first.
NICK_CONFIRM_INVALID
Invalid passcode has been entered, please check the e-mail again, and retry.
NICK_CONFIRM_EXPIRED
Your password reset request has expired.
NICK_CONFIRM_SUCCESS
You are now identified for your nick. Change your password using "%R%s SET PASSWORD newpassword" now.
###########################################################################
#
# ChanServ messages
@@ -1017,6 +1041,12 @@ CHAN_LEVEL_TOPIC
ÅðéôñÝðåôáé íá ÷ñçóéìïðïéÞóåéò ôçí TOPIC åíôïëÞ
CHAN_LEVEL_INFO
ÅðéôñÝðåôáé íá ÷ñçóéìïðïéÞóåéò ôçí INFO åíôïëÞ ìå ôçí ALL åðéëïãÞ
CHAN_LEVEL_AUTOOWNER
Automatic mode +q
CHAN_LEVEL_OWNER
Allowed to use OWNER command
CHAN_LEVEL_OWNERME
Allowed to (de)owner him/herself
# Automatic responses
CHAN_IS_REGISTERED
@@ -1034,7 +1064,7 @@ CHAN_X_INVALID
# REGISTER responses
CHAN_REGISTER_SYNTAX
REGISTER channel password description
REGISTER channel description
CHAN_REGISTER_DISABLED
Óõãíþìç, ç õðçñåóßá êáôï÷ýñùóåéò êáíáëéþí äåí ëåéôïõñãåß ãéá ôçí þñá.
CHAN_REGISTER_NOT_LOCAL
@@ -1053,36 +1083,11 @@ CHAN_REGISTRATION_FAILED
Óõãíþìç, ç êáôï÷ýñùóç áðÝôõ÷å.
CHAN_REGISTERED
Ôï êáíÜëé %s åßíáé êáôï÷õñùìÝíï áðü ôï øåõäþíõìü óïõ: %s
CHAN_PASSWORD_IS
Ï êùäéêüò ôïõ êáíáëéïý åßíáé %s - èõìÞóïõ ôïí ãéáôß èá ôïí ÷ñåéáóôåßò ìåôÜ.
CHAN_REGISTER_NONE_CHANNEL
You have attempted to register a nonexistent channel %s
CHAN_SYMBOL_REQUIRED
Please use the symbol of # when attempting to register
# IDENTIFY responses
CHAN_IDENTIFY_SYNTAX
IDENTIFY channel password
CHAN_IDENTIFY_FAILED
Óõãíþìç, ç áíáãíþñéóç ãéá ôï êáíÜëé áðÝôõ÷å.
CHAN_IDENTIFY_SUCCEEDED
Ï êùäéêüò Ýãéíå äåêôüò - ôþñá Ý÷åéò founder-level ðñüóâáóç óôï %s.
# LOGOUT responses
CHAN_LOGOUT_SYNTAX
LOGOUT channel nickname
CHAN_LOGOUT_SERVADMIN_SYNTAX
LOGOUT channel [nickname]
CHAN_LOGOUT_SUCCEEDED
Ï ÷ñÞóôçò %s Ýãéíå logged out áðü ôï êáíÜëé %s.
CHAN_LOGOUT_ALL_SUCCEEDED
¼ëïé ïé ÷ñÞóôåò logged out áðü ôï êáíÜëé %s (except the channel founder).
CHAN_LOGOUT_FOUNDER_FAILED
You may not log out of %s (you are founder).
CHAN_LOGOUT_NOT_LOGGEDIN
%s was not logged into %s.
# DROP responses
CHAN_DROP_SYNTAX
DROP channel
@@ -1113,14 +1118,6 @@ CHAN_SUCCESSOR_UNSET
CHAN_SUCCESSOR_IS_FOUNDER
%s äåí ìðïñåß íá åßíáé successor óôï êáíÜëé %s ãéáôß åßíáé founder óå áõôü.
# SET PASSWORD responses
CHAN_SET_PASSWORD_FAILED
Óõãíþìç, äåí ìðüñåóå íá ãßíåé äåêôüò ï êùäéêüò.
CHAN_PASSWORD_CHANGED
%s ï êùäéêüò Üëëáîå.
CHAN_PASSWORD_CHANGED_TO
%s ï êùäéêüò Üëëáîå óå %s.
# SET DESC responses
CHAN_DESC_CHANGED
ÐåñéãñáöÞ ôïõ %s Üëëáîå óå %s.
@@ -1252,6 +1249,14 @@ CHAN_SET_XOP_ON
CHAN_SET_XOP_OFF
xOP lists system for %s is now OFF.
# SET PERSISTANT responces
CHAN_SET_PERSIST_SYNTAX
SET channel PERSIST {ON | OFF}
CHAN_SET_PERSIST_ON
Channel %s is now persistant.
CHAN_SET_PERSIST_OFF
Channel %s is no longer persistant.
# SET NOEXPIRE responses
CHAN_SET_NOEXPIRE_SYNTAX
SET channel NOEXPIRE {ON | OFF}
@@ -1271,6 +1276,37 @@ CHAN_XOP_ACCESS
CHAN_XOP_NOT_AVAILABLE
xOP system is not available.
# QOP messages
CHAN_QOP_SYNTAX
QOP channel {ADD|DEL|LIST|CLEAR} [nick | entry-list]
CHAN_QOP_DISABLED
Sorry, channel QOP list modification is temporarily disabled.
CHAN_QOP_NICKS_ONLY
Channel QOP lists may only contain registered nicknames.
CHAN_QOP_ADDED
%s added to %s QOP list.
CHAN_QOP_MOVED
%s moved to %s QOP list.
CHAN_QOP_NO_SUCH_ENTRY
No such entry (#%d) on %s QOP list.
CHAN_QOP_NOT_FOUND
%s not found on %s QOP list.
CHAN_QOP_NO_MATCH
No matching entries on %s QOP list.
CHAN_QOP_DELETED
%s deleted from %s QOP list.
CHAN_QOP_DELETED_ONE
Deleted 1 entry from %s QOP list.
CHAN_QOP_DELETED_SEVERAL
Deleted %d entries from %s QOP list.
CHAN_QOP_LIST_EMPTY
%s QOP list is empty.
CHAN_QOP_LIST_HEADER
QOP list for %s:
Num Nick
CHAN_QOP_CLEAR
Channel %s QOP list has been cleared.
# AOP messages
CHAN_AOP_SYNTAX
AOP channel {ADD|DEL|LIST|CLEAR} [nick | entry-list]
@@ -1405,7 +1441,7 @@ CHAN_VOP_CLEAR
# ACCESS messages
CHAN_ACCESS_SYNTAX
ACCESS channel {ADD|DEL|LIST|CLEAR} [nick [level] | entry-list]
ACCESS channel {ADD|DEL|LIST|VIEW|CLEAR} [nick [level] | entry-list]
CHAN_ACCESS_XOP
Äåí ìðïñåßò íá ÷ñçóéìïðïéÞóåéò áõôÞ ôçí åíôïëÞ.
×ñçóéìïðïßçóå AOP, SOP êáé VOP åíôïëÝò áíôß ãéá ôçí access.
@@ -1453,6 +1489,12 @@ CHAN_ACCESS_LIST_XOP_FORMAT
%3d %s %s
CHAN_ACCESS_LIST_AXS_FORMAT
%3d %4d %s
CHAN_ACCESS_VIEW_XOP_FORMAT
%3d %s %s
by %s, last seen %s
CHAN_ACCESS_VIEW_AXS_FORMAT
%3d %4d %s
by %s, last seen %s
# AKICK responses
CHAN_ACCESS_CLEAR
@@ -1513,6 +1555,8 @@ CHAN_LEVELS_RANGE
Ï âáèìüò ðñÝðåé íá åßíáé ìåôáîý %d êáé %d.
CHAN_LEVELS_CHANGED
Ï âáèìüò ãéá ôïí %s óôï êáíÜëé %s Üëëîå óå %d.
CHAN_LEVELS_CHANGED_FOUNDER
Level for %s on channel %s changed to founder only.
CHAN_LEVELS_UNKNOWN
Ç åðéëïãÞ %s äåí åßíáé ãíùóôÞ. ÃñÜøå %R%s HELP LEVELS DESC ãéá ôç ëßóôá ìå ôéó áíáëõôéêÝò åðéëïãÝò.
CHAN_LEVELS_DISABLED
@@ -1595,6 +1639,8 @@ CHAN_INFO_OPT_TOPICLOCK
Êëåßäùìá ôïõ Topic
CHAN_INFO_OPT_XOP
xOP ëßóôá óõóôÞìáôïò
CHAN_INFO_OPT_PERSIST
Persistant
CHAN_INFO_OPT_NONE
ÊáíÝíá
CHAN_INFO_MODE_LOCK
@@ -1623,12 +1669,17 @@ CHAN_INVITE_ALREADY_IN
You are already in %s!
CHAN_INVITE_SUCCESS
You have been invited to %s.
CHAN_INVITE_OTHER_SUCCESS
%s has been invited to %s.
# UNBAN responses
CHAN_UNBAN_SYNTAX
UNBAN êáíÜëé
UNBAN êáíÜëé [nick]
CHAN_UNBANNED
ãéíåò unban áðü ôï %s.
CHAN_UNBANNED_OTHER
%s has been unbanned from %s.
# TOPIC responses
CHAN_TOPIC_SYNTAX
@@ -1653,16 +1704,8 @@ CHAN_CLEARED_USERS
¼ëïé ïé ÷ñÞóôåò Ýãéíáí kick áðü ôï êáíÜëé %s.
CHAN_CLEARED_INVITES
All invites on channel %s have been removed.
# GETPASS responses
CHAN_GETPASS_SYNTAX
GETPASS êáíÜëé
CHAN_GETPASS_UNAVAILABLE
Ç åíôïëÞ GETPASS äåí åßíáé äéáèÝóéìç ãéáôß ç êùäéêïðïßçóç åßíáé óå ëåéôïõñãßá.
CHAN_GETPASS_PASSWORD_IS
Ï êùäéêüò ãéá ôï êáíÜëé %s åßíáé %s.
# SENDPASS responses
# GETKEY responses
CHAN_GETKEY_SYNTAX
GETKEY channel
CHAN_GETKEY_NOKEY
@@ -1670,28 +1713,6 @@ CHAN_GETKEY_NOKEY
CHAN_GETKEY_KEY
Key for channel %s is %s.
# SENDPASS responses
CHAN_SENDPASS_SYNTAX
SENDPASS êáíÜëé
CHAN_SENDPASS_UNAVAILABLE
Ç åíôïëÞ SENDPASS äåí åßíáé äéáèÝóéìç ãéáôß ç êùäéêïðïßçóç åßíáé óå ëåéôïõñãßá.
CHAN_SENDPASS_SUBJECT
Ï êùäéêüò ôïõ êáíáëéïý (%s)
CHAN_SENDPASS_HEAD
Ãåéá,
CHAN_SENDPASS_LINE_1
Ìáò åéäïðïßçóåò íá óïõ óôåßëïõìå ôïí êùäéêü ôïõ êáíáëéïý %s ìÝóù e-mail.
CHAN_SENDPASS_LINE_2
Ï êùäéêüò åßíáé %s. Ãéá ðåñéóóüôåñç áóöÜëåéá, èá ðñÝðåé íá ôï áëëÜîåéò ôï ãñçãïñüñôåñï áðü ôç óôéãìÞ ðïõ Ýëáâåò áõôü ôï e-mail.
CHAN_SENDPASS_LINE_3
Áí äåí îÝñåéò ãéáôß óïõ óôÜëèçêå áõôü ôï mail, ðáñáêáëþ áãíïçóÝ ôï.
CHAN_SENDPASS_LINE_4
ÐÁÑÁÊÁËÙ ÌÇÍ ÁÐÁÍÔÇÓÅÉÓ ÓÅ ÁÕÔÏ ÔÏ MAIL!
CHAN_SENDPASS_LINE_5
%s administrators.
CHAN_SENDPASS_OK
Ï êùäéêüò ôïõ %s óôÜëèçêå åðéôõ÷þò.
# FORBID responses
CHAN_FORBID_SYNTAX
FORBID êáíÜëé [ëüãïò]
@@ -2164,6 +2185,8 @@ BOT_UNASSIGN_SYNTAX
UNASSIGN chan
BOT_UNASSIGN_UNASSIGNED
Äåí õðÜñ÷åé bot ðïõ íá åßíáé óôï %s ôþñá ðéá.
BOT_UNASSIGN_PERSISTANT_CHAN
You can not unassign bots while persist is set on the channel.
# INFO responses
BOT_INFO_SYNTAX
@@ -2988,8 +3011,6 @@ OPER_DEFCON_SYNTAX
DEFCON [1|2|3|4|5]
OPER_DEFCON_DENIED
This service is temporarly disabled, please try again later
OPER_DEFCON_NO_CONF
The Defcon system must be enabled in the services.conf file
OPER_DEFCON_CHANGED
Services are now at DEFCON %d
OPER_DEFCON_WALL
@@ -3009,6 +3030,10 @@ OPER_MODULE_REMOVE_FAIL
Unable to remove module %s
OPER_MODULE_NO_UNLOAD
This module can not be unloaded.
OPER_MODULE_ALREADY_LOADED
Module %s is already loaded.
OPER_MODULE_ISNT_LOADED
Module %s isn't loaded.
OPER_MODULE_LOAD_SYNTAX
MODLOAD FileName
OPER_MODULE_UNLOAD_SYNTAX
@@ -3393,6 +3418,8 @@ NICK_HELP_CMD_RELEASE
RELEASE ÁíÜêôçóç ôçò êáôáêñÜôçóçò ôïõ øåõäùíýìïõ,ìåôÜ áðü RECOVER
NICK_HELP_CMD_SENDPASS
SENDPASS ÎÝ÷áóåò ôïí êùäéêü? Äïêßìáóå áõôü êáé èá óôï óôåßëïõìå åìåßò
NICK_HELP_CMD_RESETPASS
RESETPASS Helps you reset lost passwords.
NICK_HELP_CMD_GHOST
GHOST Disconnects a "ghost" IRC session using your nick
NICK_HELP_CMD_ALIST
@@ -3999,6 +4026,12 @@ NICK_HELP_SENDPASS
Ìüíï ïé IRC operators óôá äßêôõá ðïõ åßíáé ìðïñïýí íá ôï êÜíïõí.
NICK_HELP_RESETPASS
Syntax: RESETPASS nickname
Sends a code key to the nickname which instructions on how to
reset their password.
NICK_HELP_CONFIRM
Syntax: CONFIRM passcode
@@ -4009,6 +4042,14 @@ NICK_HELP_CONFIRM
registration process. For more information about the first
stage of the registration process, type: %R%S HELP REGISTER
This is also used after the RESETPASS command has been used to
force identify you to your nick so you may change your password.
NICK_HELP_CONFIRM_OPER
Additionally, Services Operators with the nickserv/confirm permission can
replace passcode with a users nick to force validate them.
NICK_HELP_RESEND
Syntax: RESEND
@@ -4156,11 +4197,11 @@ CHAN_HELP_CMD_STATUS
êáíÜëé
CHAN_HELP_CMD_REGISTER
REGISTER Êáôï÷õñþíåé Ýíá êáíÜëé
CHAN_HELP_CMD_IDENTIFY
IDENTIFY Óáò áíáãíùñßæåé ìå êùäéêü
CHAN_HELP_CMD_SET
SET Ñõèìßæåé ôéò åðéëïãÝò êáé ôéò ðëçñïöïñßåò
ôïõ êáíáëéïý
CHAN_HELP_CMD_QOP
QOP Modify the list of QOP users
CHAN_HELP_CMD_AOP
AOP ÁëëÜæåé ôçí ëßóôá ôùí AOP ÷ñçóôþí
CHAN_HELP_CMD_SOP
@@ -4173,8 +4214,6 @@ CHAN_HELP_CMD_AKICK
AKICK Óõíôçñåß ôç ëßóôá áõôüìáôçò áðüññéøçò
CHAN_HELP_CMD_DROP
DROP Áêõñþíåé ôçí êáôï÷ýñùóç åíüò êáíáëéïý
CHAN_HELP_CMD_SENDPASS
SENDPASS ÓôÝëíåé ôïí ÷áìÝíï êùäéêü ôïõ êáíáëéïý
CHAN_HELP_CMD_BAN
BAN Bans a selected nick on a channel
CHAN_HELP_CMD_CLEAR
@@ -4191,14 +4230,12 @@ CHAN_HELP_CMD_KICK
KICK Kicks a selected nick from a channel
CHAN_HELP_CMD_LIST
LIST Lists all registered channels matching the given pattern
CHAN_HELP_CMD_LOGOUT
LOGOUT This command will logout the selected nickname
CHAN_HELP_CMD_OP
OP Gives Op status to a selected nick on a channel
CHAN_HELP_CMD_TOPIC
TOPIC Manipulate the topic of the specified channel
CHAN_HELP_CMD_UNBAN
UNBAN Remove all bans preventing you from entering a channel
UNBAN Remove all bans preventing a user from entering a channel
CHAN_HELP_CMD_VOICE
VOICE Voices a selected nick on a channel
CHAN_HELP_CMD_VOP
@@ -4217,10 +4254,6 @@ CHAN_HELP_CMD_OWNER
OWNER Gives you owner status on channel
CHAN_HELP_CMD_PROTECT
PROTECT Protects a selected nick on a channel
CHAN_HELP_CMD_ADMIN
ADMIN Protects a selected nick on a channel
CHAN_HELP_CMD_DEADMIN
DEADMIN Deprotects a selected nick on a channel
CHAN_HELP_CMD_DEOP
DEOP Deops a selected nick on a channel
@@ -4242,51 +4275,32 @@ CHAN_HELP_EXPIRES
ãéá åêåßíç ôçí ðåñßïäï ôùí çìåñþí) èá äéáãñáöåß áõôüìáôá.
CHAN_HELP_REGISTER
Óýíôáîç: REGISTER êáíÜëé êùäéêüò ðåñéãñáöÞ
Óýíôáîç: REGISTER êáíÜëé ðåñéãñáöÞ
Êáôï÷õñþíåé Ýíá êáíÜëé óôç âÜóç äåäïìÝíùí ôïõ %S. Ãéá
íá ÷ñçóéìïðïéÞóåôå áõôÞ ôçí åíôïëÞ, ðñÝðåé ðñþôá íá åßóôå
äéá÷åéñéóôÞò êáíáëéïý ìÝóá óôï êáíÜëé ðïõ ðñïóðáèåßôå íá
êáôï÷õñþóåôå. Ï êùäéêüò ÷ñçóéìïðïéåßôáé ìå ôçí åíôïëÞ
IDENTIFY ãéá íá óáò åðéôñÝðåé íá êÜíåôå áëëáãÝò óôéò
ñõèìßóåéò ôïõ êáíáëéïý áñãüôåñá. Ç ôåëåõôáßá ðáñÜìåôñïò,
ç ïðïßá êáé ðñÝðåé íá óõìðåñéëçöèåß, åßíáé ìßá ãåíéêÞ
ðåñéãñáöÞ ãéá ôï óêïðü ýðáñîçò ôïõ êáíáëéïý.
¼ôáí êáôï÷õñþíåôå Ýíá êáíÜëé, ïñßæåóôå óáí "éäñõôÞò" ôïõ.
Ï éäñõôÞò åíüò êáíáëéïý, åðéôñÝðåôáé íá áëëÜîåé üëåò ôéò
ñõèìßóåéò ôïõ; Ï %S åðßóçò èá ôïõ äþóåé áõôüìáôá
áñìïäéüôçôåò éäñõôÞ êáé äéá÷åéñéóôÞ êáíáëéïý, ìå ôçí åßóïäü
ôïõ óôï êáíÜëé.Äåßôå ôçí åíôïëÞ ACCESS command.
(%R%S HELP ACCESS) ãéá ðëçñïöïñßåò ó÷åôéêÜ ìå ôçí ðáñï÷Þ ìÝñïõò ôùí
áñìïäéïôÞôùí áõôþí, óå Üëëïõò ÷ñÞóôåò ôïõ êáíáëéïý.
ÓÇÌÅÉÙÓÇ: Ãéá íá êáôï÷õñþóåôå Ýíá êáíÜëé, ðñÝðåé íá Ý÷åôå
ðñþôá êáôï÷õñþóåé ôï øåõäþíõìü óáò. Áí äåí ôï Ý÷åôå êÜíåé,
%R%s HELP ãéá ðåñéóóüôåñåò ðëçñïöïñßåò ó÷åôéêÜ.
Registers a channel in the %S database. In order
to use this command, you must first be a channel operator
on the channel you're trying to register.
The description, which must be included, is a
general description of the channel's purpose.
CHAN_HELP_IDENTIFY
Óýíôáîç: IDENTIFY êáíÜëé êùäéêüò
Óå áíáãíùñßæåé ï %S ùò founder ôïõ æçôïýìåíïõ êáíáëéïý.
ÐïëëÝò åðéëïãÝò áðáéôïýí áõôÞ ôçí åíôïëÞ ðñéí óõíå÷ßóåôå ìå ôéò
Üëëåò. Ï êùäéêüò èá ðñÝðåé íá åßíáé ï ßäéïò ìå áõôüí ðïõ êÜíáôå
ôçí åíôïëÞ êáôï÷ýñùóçò.
CHAN_HELP_LOGOUT
Óýíôáîç: LOGOUT êáíÜëé øåõäþíõìï
ÁõôÞ ç åíôïëÞ åßíáé ãéá øåõäþíõìá ðïõ äåí êÜíïõí åíôïëÞ áíáãíþñéóçò
ãéá ôï æçôïýìåíï êáíÜëé.
Áí åßóáé ï founder ôïõ êáíáëéïý, ìðïñåßò íá êÜíåéò log out ïðïéïäÞðïôå,
åêôüò êáé áí êÜíåéò ìüíï log out ôïí åáõôü óïõ.
When you register a channel, you are recorded as the
"founder" of the channel. The channel founder is allowed
to change all of the channel settings for the channel;
%S will also automatically give the founder
channel-operator privileges when s/he enters the channel.
See the ACCESS command (%R%S HELP ACCESS) for
information on giving a subset of these privileges to
other channel users.
NOTICE: In order to register a channel, you must have
first registered your nickname. If you haven't,
%R%s HELP for information on how to do so.
CHAN_HELP_DROP
Óýíôáîç: DROP êáíÜëé
ÊÜíåé ôï êáíÜëé îåêáôï÷õñþóçìï,ôï áöÞíåé åëåýèåñï ÷ùñßò founder. Ãéá íá
ãßíåé áõôü ðñÝðåé ï founder, íá êÜíåé IDENTIFY ðñþôá êáé ýóôåñá drop.
ãßíåé áõôü ðñÝðåé ï founder.
CHAN_HELP_SET
Óýíôáîç: SET êáíÜëé åðéëïãÞ ðáñÜìåôñïé
@@ -4298,7 +4312,6 @@ CHAN_HELP_SET
FOUNDER ÁëëÜæåé ôïí founder ôïõ êáíáëéïý
SUCCESSOR ÁëëÜæåé ôïí successor ôïõ êáíáëéïý
PASSWORD ÁëëÜæåé ôïí êùäéêü ôïõ founder
DESC ÁëëÜæåé ôçí ðåñéãñáöÞ ôïõ êáíáëéïý
URL Óõó÷åôßæåé Ýíá URL ìå ôï êáíÜëé
EMAIL Óõó÷åôßæåé Ýíá E-mail ìå ôï êáíÜëé
@@ -4318,6 +4331,7 @@ CHAN_HELP_SET
SIGNKICK Åìöáí. kicks ôá ïðïßá ãßíïíôáé ìå ôçí åíôïëÞ KICK
TOPICLOCK Ôï Topic ìðïñåß íá áëëÜîåé ìå ôçí åíôïëÞ TOPIC
XOP Áí åßíáé ON äïõëåýåé ìå AOP/SOP,áí åßíáé off ìå access
PERSIST Set the channel as permanent
ÃñÜøå %R%S HELP åðéëïãÞ ãéá ðåñéóóüôåñåò ðëçñïöïñßåò
ãéá ôçí êÜèå åíôïëÞ.
@@ -4337,12 +4351,6 @@ CHAN_HELP_SET_SUCCESSOR
Áí üìùò, ï successor Ý÷åé êáôï÷õñþóåé ðïëëÜ êáíÜëéá,
áí äçë Ý÷åé (%d), ôï êáíÜëé èá óâçóôåß,óáí íá ìçí åß÷å ïñéóôåß
successor. Ôï íÝï øåõäþíõìï èá ðñÝðåé íá åßíáé êáôï÷õñùìÝíï.
CHAN_HELP_SET_PASSWORD
Óýíôáîç: SET êáíÜëé PASSWORD êùäéêü
ÁëëÜæåôå ôïí êùäéêü ðïõ êÜíåôå åíôïëÞ áíáãíþñéóçò ùò founder ôïõ
êáíáëéïý.
CHAN_HELP_SET_DESC
Óýíôáîç: SET êáíÜëé DESC ðåñéãñáöÞ
@@ -4514,6 +4522,29 @@ CHAN_HELP_SET_XOP
Áí áðü xOP system ôï ãõñßóåôå óå access system
äåí èá õðÜñîåé êáíÝíá ðñüâëçìá.
CHAN_HELP_SET_PERSIST
Syntax: SET channel PERSIST {ON | OFF}
Enables or disables the persistant channel setting.
When persistant is set, the service bot will remain
in the channel when it has emptied of users.
If your IRCd does not a permanent (persistant) channel
mode you must have a service bot in your channel to
set persist on, and it can not be unassigned while persist
is on.
If this network does not have BotServ enabled and does
not have a permanent channel mode, ChanServ will
join your channel when you set persist on (and leave when
it has been set off).
If your IRCd has a permanent (persistant) channel mode
and is is set or unset (for any reason, including MLOCK),
persist is automatically set and unset for the channel aswell.
Additionally, services will set or unset this mode when you
set persist on or off.
CHAN_HELP_SET_OPNOTICE
Óýíôáîç: SET êáíÜëé OPNOTICE {ON | OFF}
@@ -4521,6 +4552,45 @@ CHAN_HELP_SET_OPNOTICE
¼ôáí åíåñãïðïéåßôáé ç åíçìÝñùóç op, ï %S óôÝëíåé Ýíá notice óôïõò ops
ôïõ êáíáëéïý, êÜèå öïñÜ ðïõ ÷ñçóéìïðïéïýíôáé ïé åíôïëÝò OP, DEOP, AKICK êáé
ACCESS áðü êÜðïéï ÷ñÞóôç ãéá ôï êáíÜëé.
CHAN_HELP_QOP
Syntax: QOP channel ADD nick
QOP channel DEL {nick | entry-num | list}
QOP channel LIST [mask | list]
QOP channel CLEAR
Maintains the QOP (AutoOwner) list for a channel. The QOP
list gives users the right to be auto-owner on your channel,
which gives them almost (or potentially, total) access.
The QOP ADD command adds the given nickname to the
QOP list.
The QOP DEL command removes the given nick from the
QOP list. If a list of entry numbers is given, those
entries are deleted. (See the example for LIST below.)
The QOP LIST command displays the QOP list. If
a wildcard mask is given, only those entries matching the
mask are displayed. If a list of entry numbers is given,
only those entries are shown; for example:
QOP #channel LIST 2-5,7-9
Lists QOP entries numbered 2 through 5 and
7 through 9.
The QOP CLEAR command clears all entries of the
QOP list.
The QOP commands are limited to
founders (unless SECUREOPS is off). However, any user on the
QOP list may use the QOP LIST command.
This command may have been disabled for your channel, and
in that case you need to use the access list. See
%R%S HELP ACCESS for information about the access list,
and %R%S HELP SET XOP to know how to toggle between
the access list and xOP list systems.
CHAN_HELP_AOP
Óýíôáîç: AOP êáíÜëé ADD øåõäþíõìï
@@ -4683,9 +4753,10 @@ CHAN_HELP_VOP
CHAN_HELP_ACCESS
Óýíôáîç: ACCESS êáíÜëé ADD øåõäþíõìï âáèìüò
ACCESS êáíÜëé DEL {øåõäþíõìï | èÝóåéò-íïõ | list}
ACCESS êáíÜëé LIST [ìÜóêá | list]
ACCESS êáíÜëé CLEAR
ACCESS êáíÜëé DEL {øåõäþíõìï | èÝóåéò-íïõ | list}
ACCESS êáíÜëé LIST [ìÜóêá | list]
ACCESS êáíÜëé VIEW [ìÜóêá | list]
ACCESS êáíÜëé CLEAR
ÁëëÜæåé ôçí access ëßóôá ôïõ êáíáëéïý. Ç ëßóôá access
êáèïñßæåé ðïéïé ÷ñÞóôåò èá Ý÷ïõí op óôï êáíÜëé Þ
@@ -4714,7 +4785,10 @@ CHAN_HELP_ACCESS
ACCESS #êáíÜëé LIST 2-5,7-9
Åìöáíßæåé áðü ôçí ëßóôá access ôéò èÝóåéò ìå ôá
íïýìåñá 2 Ýùò 5 êáé 7 Ýùò 9.
The ACCESS VIEW command displays the access list similar
to ACCESS LIST but shows the creator and last used time.
Ç åíôïëÞ ACCESS CLEAR äéáãñÜöåé üëåò ôéó èÝóåéò ôçò ëßóôáò access.
CHAN_HELP_ACCESS_LEVELS
@@ -4788,29 +4862,30 @@ CHAN_HELP_AKICK
ëßóôá akick.
CHAN_HELP_LEVELS
Óýíôáîç: LEVELS êáíÜëé SET ôýðïò âáèìüò
LEVELS êáíÜëé {DIS | DISABLE} ôýðïò
LEVELS êáíÜëé LIST
LEVELS êáíÜëé RESET
Óýíôáîç: LEVELS êáíÜëé SET ôýðïò [âáèìüò|FOUNDER]
LEVELS êáíÜëé {DIS | DISABLE} ôýðïò
LEVELS êáíÜëé LIST
LEVELS êáíÜëé RESET
Ç åíôïëÞ LEVELS åðéôñÝðåé ôï êáëü ÷åéñéóìü üóïí áöïñÜ
ôçí ñýèìéóç ôçò access levels ðïõ ÷ñçóéìïðïéåßôáé óôï êáíÜëé.
Ìå áõôÞ ôçí åíôïëÞ, ìðïñåßôå íá ÷åéñßæåóôå ôçí access level ðïõ
ðïõ åêôåëåß ï %S. (Ôéò åíôïëÝò SET FOUNDER êáé SET PASSWORD
ôéò ÷åéñßæåôáé ìüíï ï founder.)
Ç åíôïëÞ LEVELS SET åðéôñÝðåé ôçí áëëáãÞ ôùí access level (âáèìþí).
Ç åíôïëÞ LEVELS DISABLEDIS ãéá óõíôïìßá)
áðåíåñãïðïéåß áõôüìáôá ìåëëïíôéêÜ Þ äåí äßíåé äéêáéþìáôá óå üóïõò Ý÷ïõí access
åêôüò ôïõ founder êáíáëéïý áõôïý.
Ç åíôïëÞ áõôÞ LEVELS LIST äåß÷íåé ôá levels (âáèìïýò) ðïõ Ý÷åé ç êÜèå
åíôïëÞ.
Ç åíôïëÞ LEVELS RESET óâÞíåé ôá levels (âáèìïýò) êáé åðáíáöÝñåé ôá
default levels (âáèìïýò), äçë áõôÜ ôá levels ðïõ Ý÷åé Ýíá íÝï êáíÜëé (äåò
ôçí åíôïëÞ HELP ACCESS LEVELS).
The LEVELS command allows fine control over the meaning of
the numeric access levels used for channels. With this
command, you can define the access level required for most
of %S's functions. (The SET FOUNDER and this command
are always restricted to the channel founder.)
Ãéá íá äåßò ôçí ëßóôá ìå ôéò åíôïëÝò ðïõ ìðïñåßò íá áëëÜîåéò ôá levels, äåò
ôçí åíôïëÞ HELP LEVELS DESC.
LEVELS SET allows the access level for a function or group of
functions to be changed. LEVELS DISABLE (or DIS for short)
disables an automatic feature or disallows access to a
function by anyone, INCLUDING the founder (although, the founder
can always reenable it).
LEVELS LIST shows the current levels for each function or
group of functions. LEVELS RESET resets the levels to the
default levels of a newly-created channel (see
HELP ACCESS LEVELS).
For a list of the features and functions whose levels can be
set, see HELP LEVELS DESC.
CHAN_HELP_LEVELS_DESC
Ôá áêüëïõèá feature/function êáôáëáâáßíïíôáé. Óçìåßùóç,
@@ -4938,9 +5013,10 @@ CHAN_HELP_INVITE
ðáñáðÜíù óôï êáíÜëé.
CHAN_HELP_UNBAN
Óýíôáîç: UNBAN êáíÜëé
Óýíôáîç: UNBAN êáíÜëé [nick]
ÆçôÜåé áðü ôïí %S íá áöáéñÝóåé üëá ôá bans áíÜëïãá ãéá ðïéï êáíÜëé ôïõ æçôÜò.
Tells %S to remove all bans preventing you or the given
user from entering the given channel.
Áðü default, ÷ñçóéìïðïéåßôáé áðü ôïõò AOPs Þ áõôïýò ðïõ Ý÷ïõí level 5 êáé
ðáñáðÜíù óôï êáíÜëé.
@@ -5000,15 +5076,6 @@ CHAN_HELP_GETKEY
Óýíôáîç: GETKEY êáíÜëé
Óáò äåß÷íåé ôï êëåéäß ôïõ óõãêåêñéìÝíïõ êáíáëéïý.
CHAN_HELP_SENDPASS
Óýíôáîç: SENDPASS êáíÜëé
ÓôÝëíåé ôïí êùäéêü ôïõ áíÜëïãïõ êáíáëéïý ìÝóù e-mail address
óôïí founder ôïõ. ÁõôÞ ç åíôïëÞ åßíáé ÷ñÞóéìç
ãéá üóïõò Ý÷ïõí ÷Üóåé ôïí êùäéêü.
×ñçóéìïðïéåßôáé ìüíï áðü IRC operators óå óõãêåêñéìÝíá äßêôõá.
CHAN_SERVADMIN_HELP
@@ -5016,21 +5083,6 @@ CHAN_SERVADMIN_HELP
åíôïëÞ áíáãíþñéóçò ìÝóù êùäéêïý, ìðïñïýí íá äïýí ôçí access, AKICK,
êáé ôá level ïðïéïõäÞðïôå êáíáëéïý.
CHAN_SERVADMIN_HELP_LOGOUT
Óýíôáîç: LOGOUT êáíÜëé [øåõäþíõìï]
Ìå áõôÞ ôçí åíôïëÞ, Ýíáò founder Þ êÜðïéïò ðïõ Ý÷åé âáèìü founder êÜíåé ôï
áíôßèåôï áðü ôçí åíôïëÞ áíáãíþñéóçò (no-identify).
Ìðïñåß Ýíáò founder åíüò êáíáëéïý, íá êÜíåé log out ïðïéïäÞðïôå,
áêüìá êáé ôïí åáõôü ôïõ.
Áí åßóáé Services Operator, ìðïñåßò íá êÜíåéò log out
ïðïéïäÞðïå áðü ôï êáíÜëé ÷ùñßò íá åßóáé ï founder Þ íá ãßíåéò ï founder
ôïõ êáíáëéïý. Åðßóçò, ìðïñåßò íá ÷ñçóéìïðïéÞóåéò áõôÞ ôçí ðáñÜìåôñï ãéá
øåõäþíõìï; ìå áõôü èá êÜíåéò log out üëïõò ôïõò áíáãíùñéóìÝíïõò (identified)
÷ñÞóôåò ôïõ êáíáëéïý.
CHAN_SERVADMIN_HELP_DROP
Óýíôáîç: DROP êáíÜëé
@@ -5056,8 +5108,8 @@ CHAN_SERVADMIN_HELP_SET_NOEXPIRE
CHAN_SERVADMIN_HELP_INFO
Ïé Services Operators ìðïñïýí íá ÷ñçóéìïðïéÞóïõí ôçí ðáñÜìåôñï ALL ãéá êÜèå
êáíÜëé.
Services Operators with the chanserv/auspex permission can
use the ALL parameter with any channel.
CHAN_SERVADMIN_HELP_LIST
Óýíôáîç: LIST pattern [FORBIDDEN] [NOEXPIRE]
@@ -6484,3 +6536,15 @@ OPER_UMODE_UNSUPPORTED
OPER_SUPER_ADMIN_NOT_ENABLED
SuperAdmin setting not enabled in services.conf
OPER_HELP_SYNC
Syntax: SQLSYNC
This command syncs your databases with SQL. You should
only have to execute this command once, when you initially
import your databases into SQL.
OPER_HELP_CMD_SQLSYNC
SQLSYNC Import your databases to SQL
OPER_SYNC_UPDATING
Updating MySQL.
OPER_SYNC_UPDATED
Finished updating MySQL.
+242 -183
View File
@@ -1,6 +1,6 @@
# Hungarian (magyar) language file.
#
# (C) 2003-2008 Anope Team
# (C) 2003-2010 Anope Team
# Contact us at team@anope.org
#
# Translated by:
@@ -869,6 +869,24 @@ NICK_SENDPASS_LINE_5
NICK_SENDPASS_OK
%s nick jelszava elküldve.
# RESETPASS responces
NICK_RESETPASS_SYNTAX
RESETPASS nickname
NICK_RESETPASS_SUBJECT
Reset password request for %s
NICK_RESETPASS_MESSAGE
Hi,
You have requested to have the password for %s reset.
To reset your password, type %R%s CONFIRM %s
If you don't know why this mail is sent to you, please ignore it silently.
PLEASE DON'T ANSWER TO THIS MAIL
%s administrators.
NICK_RESETPASS_COMPLETE
Password reset email for %s has been sent.
# FORBID válaszok
NICK_SUSPEND_SYNTAX
SUSPEND nickname reason
@@ -906,10 +924,6 @@ NICK_IS_PREREG
A nick az emailben elküldött kóddal való aktíválásra vár a regisztráció befejezéséhez.
NICK_ENTER_REG_CODE
A kód a %s címre lett küldve, írd be %R%s confirm <kód> a regisztráció befejezéséhez.
NICK_CONFIRM_NOT_FOUND
Regisztráció 1 lépése lehet, hogy elévült, írd be: "%R%s register <jelszó> <email>".
NICK_CONFIRM_INVALID
Érvénytelen kód, ellenõrizze az e-mailben, majd próbálja újra.
NICK_REG_MAIL_SUBJECT
Nicknév Regisztráció (%s)
NICK_REG_MAIL_HEAD
@@ -929,6 +943,16 @@ NICK_GETPASS_PASSCODE_IS
NICK_FORCE_REG
A %s nicknév érvényesítve.
# CONFIRM responces
NICK_CONFIRM_NOT_FOUND
Regisztráció 1 lépése lehet, hogy elévült, írd be: "%R%s register <jelszó> <email>".
NICK_CONFIRM_INVALID
Érvénytelen kód, ellenõrizze az e-mailben, majd próbálja újra.
NICK_CONFIRM_EXPIRED
Your password request has expired.
NICK_CONFIRM_SUCCESS
You are now identified for your nick. Change your password using "%R%s SET PASSWORD newpassword" now.
###########################################################
#
# ChanServ üzenetek
@@ -1008,6 +1032,12 @@ CHAN_LEVEL_TOPIC
Használhatja a TOPIC parancsot
CHAN_LEVEL_INFO
Használhatja az INFO parancsot az ALL opcióval
CHAN_LEVEL_AUTOOWNER
Automatic mode +q
CHAN_LEVEL_OWNER
Allowed to use OWNER command
CHAN_LEVEL_OWNERME
Allowed to (de)owner him/herself
# Automatikus válaszok
CHAN_IS_REGISTERED
@@ -1025,7 +1055,7 @@ CHAN_X_INVALID
# REGISTER responses
CHAN_REGISTER_SYNTAX
REGISTER #szoba jelszó leírás
REGISTER #szoba leírás
CHAN_REGISTER_DISABLED
Sajnálom, a csatorna regisztráció jelenleg szünetel.
CHAN_REGISTER_NOT_LOCAL
@@ -1044,36 +1074,11 @@ CHAN_REGISTRATION_FAILED
Sajnálom, regisztráció sikertelen.
CHAN_REGISTERED
Regisztráltam a %s csatornát a (%s) nickre.
CHAN_PASSWORD_IS
Csatorna jelszava: %s - Jegyezd fel a késõbbi használathoz.
CHAN_REGISTER_NONE_CHANNEL
You have attempted to register a nonexistent channel %s
CHAN_SYMBOL_REQUIRED
Please use the symbol of # when attempting to register
# IDENTIFY válaszok
CHAN_IDENTIFY_SYNTAX
IDENTIFY #szoba jelszó
CHAN_IDENTIFY_FAILED
Sajnálom, azonosítás sikertelen.
CHAN_IDENTIFY_SUCCEEDED
Jelszavad elfogadva - founder szintû a hozzáférésed a %s csatornán.
# LOGOUT válaszok
CHAN_LOGOUT_SYNTAX
LOGOUT #szoba nicknév
CHAN_LOGOUT_SERVADMIN_SYNTAX
LOGOUT #szoba [nicknév]
CHAN_LOGOUT_SUCCEEDED
%s felhasználó kijelentkezett a %s csatornáról.
CHAN_LOGOUT_ALL_SUCCEEDED
Minden felhasználó kijelentkezett a %s csatornáról (except the channel founder).
CHAN_LOGOUT_FOUNDER_FAILED
You may not log out of %s (you are founder).
CHAN_LOGOUT_NOT_LOGGEDIN
%s was not logged into %s.
# DROP válaszok
CHAN_DROP_SYNTAX
DROP #szoba
@@ -1104,14 +1109,6 @@ CHAN_SUCCESSOR_UNSET
CHAN_SUCCESSOR_IS_FOUNDER
%s nem lehet a %s csatorna successora, mert õ a founder is.
# SET PASSWORD válaszok
CHAN_SET_PASSWORD_FAILED
A jelszó beállítása sikertelen.
CHAN_PASSWORD_CHANGED
%s csatorna jelszava megváltozott.
CHAN_PASSWORD_CHANGED_TO
%s csatorna új jelszava: %s.
# SET DESC válaszok
CHAN_DESC_CHANGED
%s csatorna leírás megváltoztatva: %s.
@@ -1243,6 +1240,14 @@ CHAN_SET_XOP_ON
CHAN_SET_XOP_OFF
xOP lists system for %s is now OFF.
# SET PERSISTANT responces
CHAN_SET_PERSIST_SYNTAX
SET channel PERSIST {ON | OFF}
CHAN_SET_PERSIST_ON
Channel %s is now persistant.
CHAN_SET_PERSIST_OFF
Channel %s is no longer persistant.
# SET NOEXPIRE válaszok
CHAN_SET_NOEXPIRE_SYNTAX
SET #szoba NOEXPIRE {ON | OFF}
@@ -1262,6 +1267,37 @@ CHAN_XOP_ACCESS
CHAN_XOP_NOT_AVAILABLE
xOP system is not available.
# QOP messages
CHAN_QOP_SYNTAX
QOP channel {ADD|DEL|LIST|CLEAR} [nick | entry-list]
CHAN_QOP_DISABLED
Sorry, channel QOP list modification is temporarily disabled.
CHAN_QOP_NICKS_ONLY
Channel QOP lists may only contain registered nicknames.
CHAN_QOP_ADDED
%s added to %s QOP list.
CHAN_QOP_MOVED
%s moved to %s QOP list.
CHAN_QOP_NO_SUCH_ENTRY
No such entry (#%d) on %s QOP list.
CHAN_QOP_NOT_FOUND
%s not found on %s QOP list.
CHAN_QOP_NO_MATCH
No matching entries on %s QOP list.
CHAN_QOP_DELETED
%s deleted from %s QOP list.
CHAN_QOP_DELETED_ONE
Deleted 1 entry from %s QOP list.
CHAN_QOP_DELETED_SEVERAL
Deleted %d entries from %s QOP list.
CHAN_QOP_LIST_EMPTY
%s QOP list is empty.
CHAN_QOP_LIST_HEADER
QOP list for %s:
Num Nick
CHAN_QOP_CLEAR
Channel %s QOP list has been cleared.
# AOP üzenetek
CHAN_AOP_SYNTAX
AOP #szoba { ADD | DEL | LIST | CLEAR } [ nick | sorszám ]
@@ -1396,7 +1432,7 @@ CHAN_VOP_CLEAR
# ACCESS messages
CHAN_ACCESS_SYNTAX
ACCESS#szoba{ ADD | DEL | LIST | CLEAR } [ nick [ szint ] | sorszám ]
ACCESS #szoba { ADD | DEL | LIST | VIEW | CLEAR } [ nick [ szint ] | sorszám ]
CHAN_ACCESS_XOP
Nem használhatod ezt a parancsot.
Használd az AOP, SOP és VOP parancsokat helyette.
@@ -1445,6 +1481,12 @@ CHAN_ACCESS_LIST_XOP_FORMAT
%3d %s %s
CHAN_ACCESS_LIST_AXS_FORMAT
%3d %4d %s
CHAN_ACCESS_VIEW_XOP_FORMAT
%3d %s %s
by %s, last seen %s
CHAN_ACCESS_VIEW_AXS_FORMAT
%3d %4d %s
by %s, last seen %s
# AKICK válaszok
CHAN_ACCESS_CLEAR
@@ -1506,6 +1548,8 @@ CHAN_LEVELS_RANGE
A szintnek kizárólag %d és %d között kell lennie.
CHAN_LEVELS_CHANGED
%s szintjének új értéke a (%s) csatornán: %d.
CHAN_LEVELS_CHANGED_FOUNDER
Level for %s on channel %s changed to founder only.
CHAN_LEVELS_UNKNOWN
%s beállítás nem ismert. Írd be %R%s HELP LEVELS DESC
az érvényes beállítások listájának megtekintéséhez.
@@ -1589,6 +1633,8 @@ CHAN_INFO_OPT_TOPICLOCK
Témaváltás lezárása
CHAN_INFO_OPT_XOP
xOP lista rendszer
CHAN_INFO_OPT_PERSIST
Persistant
CHAN_INFO_OPT_NONE
Nincs
CHAN_INFO_MODE_LOCK
@@ -1617,12 +1663,17 @@ CHAN_INVITE_ALREADY_IN
You are already in %s!
CHAN_INVITE_SUCCESS
You have been invited to %s.
CHAN_INVITE_OTHER_SUCCESS
%s has been invited to %s.
# UNBAN válaszok
CHAN_UNBAN_SYNTAX
UNBAN #szoba
UNBAN #szoba [nick]
CHAN_UNBANNED
%s csatornán a tiltást levetetted magadról.
CHAN_UNBANNED_OTHER
%s has been unbanned from %s.
# TOPIC válaszok
CHAN_TOPIC_SYNTAX
@@ -1648,43 +1699,13 @@ CHAN_CLEARED_USERS
CHAN_CLEARED_INVITES
All invites on channel %s have been removed.
# GETPASS válaszok
CHAN_GETPASS_SYNTAX
GETPASS #szoba
CHAN_GETPASS_UNAVAILABLE
GETPASS elérhetetlen, mig az encryption használatban van.
CHAN_GETPASS_PASSWORD_IS
A (%s) csatorna jelszava: %s.
# SENDPASS válaszok
# GETKEY válaszok
CHAN_GETKEY_SYNTAX
GETKEY channel
CHAN_GETKEY_NOKEY
The channel %s has no key.
CHAN_GETKEY_KEY
Key for channel %s is %s.
# SENDPASS responses
CHAN_SENDPASS_SYNTAX
SENDPASS #szoba
CHAN_SENDPASS_UNAVAILABLE
SENDPASS elérhetetlen, amíg az encryption használatban van
CHAN_SENDPASS_SUBJECT
Csatorna jelszava: (%s)
CHAN_SENDPASS_HEAD
Hi,
CHAN_SENDPASS_LINE_1
Kérted a szoba jelszavának megküldését %s címre.
CHAN_SENDPASS_LINE_2
%s a szobajeszó.Biztonság kedvéért váltóztasd meg olvasás után
CHAN_SENDPASS_LINE_3
Ha nem te kérted a levelet akkor töréld és feljts el
CHAN_SENDPASS_LINE_4
KÉRLEN NE VÁLASZOLJ A LEVÉLRE!
CHAN_SENDPASS_LINE_5
%s administrators.
CHAN_SENDPASS_OK
Jelszó %s elküldve.
# FORBID válaszok
CHAN_FORBID_SYNTAX
@@ -2138,6 +2159,8 @@ BOT_UNASSIGN_SYNTAX
UNASSIGN #szoba
BOT_UNASSIGN_UNASSIGNED
Nincsen bot kijelölve %s szobában többet.
BOT_UNASSIGN_PERSISTANT_CHAN
You can not unassign bots while persist is set on the channel.
# INFO válaszok
BOT_INFO_SYNTAX
@@ -2930,8 +2953,6 @@ OPER_DEFCON_SYNTAX
DEFCON [1|2|3|4|5]
OPER_DEFCON_DENIED
Szervíz Defcon módban fut, próbáld késõbb.
OPER_DEFCON_NO_CONF
A Defcon rendszert engedélyezni kell a services.conf-ban
OPER_DEFCON_CHANGED
Szervíz új DEFCON szintje %d
OPER_DEFCON_WALL
@@ -2950,6 +2971,10 @@ OPER_MODULE_REMOVE_FAIL
Nem sikerült eltávolítani a %s modult
OPER_MODULE_NO_UNLOAD
This module can not be unloaded.
OPER_MODULE_ALREADY_LOADED
Module %s is already loaded.
OPER_MODULE_ISNT_LOADED
Module %s isn't loaded.
OPER_MODULE_LOAD_SYNTAX
MODLOAD Fájlnév
OPER_MODULE_UNLOAD_SYNTAX
@@ -3327,6 +3352,8 @@ NICK_HELP_CMD_RELEASE
RELEASE Visszaadja a neved a RECOVER után
NICK_HELP_CMD_SENDPASS
SENDPASS Elfelejtetted a jelszavad? Próbáld ezt
NICK_HELP_CMD_RESETPASS
RESETPASS Helps you reset lost passwords.
NICK_HELP_CMD_GHOST
GHOST Disconnects a "ghost" IRC session using your nick
NICK_HELP_CMD_ALIST
@@ -3908,6 +3935,12 @@ NICK_HELP_SENDPASS
Korlátozni lehet IRC operátorokra egyes hálózatokon.
NICK_HELP_RESETPASS
Syntax: RESETPASS nickname
Sends a code key to the nickname with instructions on how to
reset their password.
NICK_HELP_CONFIRM
Syntax: CONFIRM passcodE
@@ -3917,6 +3950,14 @@ NICK_HELP_CONFIRM
is sent to your e-mail address in the first step of the
registration process. For more information about the first
stage of the registration process, type: %R%S HELP REGISTER
This is also used after the RESETPASS command has been used to
force identify you to your nick so you may change your password.
NICK_HELP_CONFIRM_OPER
Additionally, Services Operators with the nickserv/confirm permission can
replace passcode with a users nick to force validate them.
NICK_HELP_RESEND
Syntax: RESEND
@@ -4079,10 +4120,10 @@ CHAN_HELP_CMD_STATUS
szintjét a megadott csatornán
CHAN_HELP_CMD_REGISTER
REGISTER Szoba regisztrálása
CHAN_HELP_CMD_IDENTIFY
IDENTIFY Azonosíthatod magad a jelszavaddal
CHAN_HELP_CMD_SET
SET Beállíthatod a csatornád opcióit
CHAN_HELP_CMD_QOP
QOP Modify the list of QOP users
CHAN_HELP_CMD_AOP
AOP AutoOperátor lista beállítása
CHAN_HELP_CMD_SOP
@@ -4095,8 +4136,6 @@ CHAN_HELP_CMD_AKICK
AKICK AutoKirúgás listára teheted a "rossz" usereket
CHAN_HELP_CMD_DROP
DROP Törölheted a csatornád regisztrációját
CHAN_HELP_CMD_SENDPASS
SENDPASS Elveszett a jelszavad? Jelszó küldés.
CHAN_HELP_CMD_BAN
BAN Bans a selected nick on a channel
CHAN_HELP_CMD_CLEAR
@@ -4113,14 +4152,12 @@ CHAN_HELP_CMD_KICK
KICK Kicks a selected nick from a channel
CHAN_HELP_CMD_LIST
LIST Lists all registered channels matching the given pattern
CHAN_HELP_CMD_LOGOUT
LOGOUT This command will logout the selected nickname
CHAN_HELP_CMD_OP
OP Gives Op status to a selected nick on a channel
CHAN_HELP_CMD_TOPIC
TOPIC Manipulate the topic of the specified channel
CHAN_HELP_CMD_UNBAN
UNBAN Remove all bans preventing you from entering a channel
UNBAN Remove all bans preventing a user from entering a channel
CHAN_HELP_CMD_VOICE
VOICE Voices a selected nick on a channel
CHAN_HELP_CMD_VOP
@@ -4139,10 +4176,6 @@ CHAN_HELP_CMD_OWNER
OWNER Gives you owner status on channel
CHAN_HELP_CMD_PROTECT
PROTECT Protects a selected nick on a channel
CHAN_HELP_CMD_ADMIN
ADMIN Protects a selected nick on a channel
CHAN_HELP_CMD_DEADMIN
DEADMIN Deprotects a selected nick on a channel
CHAN_HELP_CMD_DEOP
DEOP Deops a selected nick on a channel
@@ -4164,54 +4197,32 @@ CHAN_HELP_EXPIRES
Automatikusan dropolásra kerülnek.
CHAN_HELP_REGISTER
Syntax: REGISTER #szoba jelszó leírás
Syntax: REGISTER #szoba leírás
A csatornádat regisztrálja a %S adatbázisába.
Hogy kiadhasd ezt a paracsot operátornak kell lenned
az adott csatornán.
A jelszót használhatod az IDENTIFY parancs segitségével
azonosításra, mielõtt beállításokat eszközölsz a
késöbbiekben az adott csatonán.
Az utolsó paraméternek, tartalmaznia kell
a szoba általános leírását.
Amikor regisztrálsz egy csatornát, te leszel a "founder".
szoba founderjének van lehetõsége a szoba beállításait,
a hozzáférési listáját, az autókirúgás listát, az infókat
megváltoztatni; a %S automatikusan megadja belépéskor a
founder hozzáférési jogot és szoba operátori jogokat.
Nézd meg az ACCESS parancsot (%R%S HELP ACCESS),
hogy infomálódj a különbözõ szintû kiváltságok adásáról
(a szoba többi felhasználója részére).
Megjegyzés: Ha regisztrálsz egy csatornát, elõször
regisztrálnod kell a nickneved és azonosítanod kell
magad. (NickServ identify jelszó)
Ha még nem nézted meg, akkor lásd még: %R%s HELP.
CHAN_HELP_IDENTIFY
Syntax: IDENTIFY #szoba jelszó
%S a parancs beírása után founder szintet ad a csatornán.
Több parancs kiadása elõtt szükséges, hogy használd ezt.
A jelszónak egyeznie kell a megadott jelszóval.
CHAN_HELP_LOGOUT
Syntax: LOGOUT #szoba nicknév
Ez a parancs kijelentkezésre birja a nicket, vagyis újra
kell azonosítania, hogy újra megkapja a hozzáférést.
Ha te vagy a szoba founderje, akkor bárkit ki tudsz
jelentkeztetni, vagy ki tudsz jelentkezni akár te is.
Registers a channel in the %S database. In order
to use this command, you must first be a channel operator
on the channel you're trying to register.
The description, which must be included, is a
general description of the channel's purpose.
When you register a channel, you are recorded as the
"founder" of the channel. The channel founder is allowed
to change all of the channel settings for the channel;
%S will also automatically give the founder
channel-operator privileges when s/he enters the channel.
See the ACCESS command (%R%S HELP ACCESS) for
information on giving a subset of these privileges to
other channel users.
NOTICE: In order to register a channel, you must have
first registered your nickname. If you haven't,
%R%s HELP for information on how to do so.
CHAN_HELP_DROP
Syntax: DROP #szoba
Törli a megnevezett szoba regisztrációját.
Csak a szoba founder használhatja, akinek
elõbb használnia kell az IDENTIFY parancsot.
Csak a szoba founder használhatja.
CHAN_HELP_SET
Syntax: SET #szoba opció paraméterek
@@ -4241,6 +4252,7 @@ CHAN_HELP_SET
SIGNKICK Sign kickek, melyek a KICK paranccsal történnek
TOPICLOCK Témaváltás letiltása
XOP Xop (Sop, Aop, Hop, Vop) lista rendszer bekapcsolása
PERSIST Set the channel as permanent
Írd be: %R%S HELP SET opció bõvebb információért az
adott opcióról.
@@ -4262,12 +4274,6 @@ CHAN_HELP_SET_SUCCESSOR
is ez történik, ha nem volt megadva successor.
A nicknek regisztrálnak kell lennie.
CHAN_HELP_SET_PASSWORD
Syntax: SET #szoba PASSWORD jelszó
Beállítja a founder jelszót a csatornára, amivel
a founder azonosíthatja magát.
CHAN_HELP_SET_DESC
Syntax: SET #szoba DESC leírás
@@ -4430,6 +4436,29 @@ CHAN_HELP_SET_XOP
Az xOP lista rendszerrõl az access lista rendszerre való
áttérés nem okoz gondot.
CHAN_HELP_SET_PERSIST
Syntax: SET channel PERSIST {ON | OFF}
Enables or disables the persistant channel setting.
When persistant is set, the service bot will remain
in the channel when it has emptied of users.
If your IRCd does not a permanent (persistant) channel
mode you must have a service bot in your channel to
set persist on, and it can not be unassigned while persist
is on.
If this network does not have BotServ enabled and does
not have a permanent channel mode, ChanServ will
join your channel when you set persist on (and leave when
it has been set off).
If your IRCd has a permanent (persistant) channel mode
and is is set or unset (for any reason, including MLOCK),
persist is automatically set and unset for the channel aswell.
Additionally, services will set or unset this mode when you
set persist on or off.
CHAN_HELP_SET_OPNOTICE
Syntax: SET #szoba OPNOTICE {ON | OFF}
@@ -4439,6 +4468,45 @@ CHAN_HELP_SET_OPNOTICE
fog küldeni a csatornára, amikor a felhasználók használják
az OP, VOICE, vagy a hozzájuk kapcsolódó parancsokat a
szoban.
CHAN_HELP_QOP
Syntax: QOP channel ADD nick
QOP channel DEL {nick | entry-num | list}
QOP channel LIST [mask | list]
QOP channel CLEAR
Maintains the QOP (AutoOwner) list for a channel. The QOP
list gives users the right to be auto-owner on your channel,
which gives them almost (or potentially, total) access.
The QOP ADD command adds the given nickname to the
QOP list.
The QOP DEL command removes the given nick from the
QOP list. If a list of entry numbers is given, those
entries are deleted. (See the example for LIST below.)
The QOP LIST command displays the QOP list. If
a wildcard mask is given, only those entries matching the
mask are displayed. If a list of entry numbers is given,
only those entries are shown; for example:
QOP #channel LIST 2-5,7-9
Lists QOP entries numbered 2 through 5 and
7 through 9.
The QOP CLEAR command clears all entries of the
QOP list.
The QOP commands are limited to
founders (unless SECUREOPS is off). However, any user on the
QOP list may use the QOP LIST command.
This command may have been disabled for your channel, and
in that case you need to use the access list. See
%R%S HELP ACCESS for information about the access list,
and %R%S HELP SET XOP to know how to toggle between
the access list and xOP list systems.
CHAN_HELP_AOP
Syntax: AOP #szoba ADD nick
@@ -4618,6 +4686,7 @@ CHAN_HELP_ACCESS
Syntax: ACCESS #szoba ADD nick szint
ACCESS #szoba DEL {nick | sorszám | lista}
ACCESS #szoba LIST [maszk | lista]
ACCESS #szoba VIEW [maszk | lista]
ACCESS #szoba CLEAR
Access lista a csatornán. A hozzáférési lista (access)
@@ -4646,6 +4715,9 @@ CHAN_HELP_ACCESS
Listázza azokat a usereket, akik 2 és 5 között illetve
7-tõl 9-ig szerepelnek a listán.
The ACCESS VIEW command displays the access list similar
to ACCESS LIST but shows the creator and last used time.
Az ACCESS CLEAR parancs töröl minden bejegyzés a szoba
hozzáférési listájáról.
@@ -4720,33 +4792,31 @@ CHAN_HELP_AKICK
törölhetõ.
CHAN_HELP_LEVELS
Syntax: LEVELS #szoba SET típus szint
Syntax: LEVELS #szoba SET típus [szint|FOUNDER]
LEVELS #szoba {DIS | DISABLE} típus
LEVELS #szoba LIST
LEVELS #szoba RESET
A LEVELS segítségével a számokkal definiált hozzáférési
szintek módosíthatók.
Ezzel a paranccsal, definiálhatsz hozzáférési szinteket,
melyek szükségesek a %S funkcióihoz.
Ezt a parancsot csak a founder használhatja.
The LEVELS command allows fine control over the meaning of
the numeric access levels used for channels. With this
command, you can define the access level required for most
of %S's functions. (The SET FOUNDER and this command
are always restricted to the channel founder.)
LEVELS SET biztosítja, hogy megváltoztasd a hozzáférési
szintjét egy adott funkciónak vagy funkciók csoportjának.
LEVELS SET allows the access level for a function or group of
functions to be changed. LEVELS DISABLE (or DIS for short)
disables an automatic feature or disallows access to a
function by anyone, INCLUDING the founder (although, the founder
can always reenable it).
A LEVELS DISABLE (vagy DIS röviden) letiltja
az automatikus lehetõségeket, vagy megtiltja a hozzáférést
bizonyos funkciókhoz, ezeket csak a founder változtathatja
LEVELS LIST kiírja a jelenlegi hozzáférési szintjeit
a különbözõ funkcióknak.
LEVELS RESET visszaállítja az alapértelmezett értékeket.
Lásd még: HELP ACCESS LEVELS.
Ha szeretnéd megnézni a funkciók és lehetõségek listáját.
akkor lesd meg a HELP LEVELS DESC leírást is.
LEVELS LIST shows the current levels for each function or
group of functions. LEVELS RESET resets the levels to the
default levels of a newly-created channel (see
HELP ACCESS LEVELS).
For a list of the features and functions whose levels can be
set, see HELP LEVELS DESC.
CHAN_HELP_LEVELS_DESC
A következõ lehetõségek/funkciók elérthetõek.
Megjegyzés: az AUTODEOP és NOJOIN esetén maximum szintrõl
@@ -4879,10 +4949,10 @@ CHAN_HELP_INVITE
kell rendelkezned a csatornán, hogy használhasd.
CHAN_HELP_UNBAN
Syntax: UNBAN #szoba
Syntax: UNBAN #szoba [nick]
A %S leveszi rólad a kitiltást és szabadon
beléphetsz a csatonára.
Tells %S to remove all bans preventing you or the given
user from entering the given channel.
Alapbeállítás szerint, min. AOP vagy 5-ös access szinttel
kell rendelkezned, hogy használhasd.
@@ -4940,35 +5010,12 @@ CHAN_HELP_GETKEY
Syntax: GETKEY #szoba 
Megadja a szoba kulcsot.
CHAN_HELP_SENDPASS
Syntax: SENDPASS #szoba
Elküldi E-mailben a csatornádra beállított jelszót. Neked
a szoba founderjének kell lenned, hogy használhasd ezt
a parancsot és elõször azonosítanod kell magadat.
Lehet korlátozni IRC operatorok részére a hálózaton.
CHAN_SERVADMIN_HELP
Szervíz adminok tudják droppolni a csatornákat anélkül,
hogy a szoba jelszót használnának, és megnézhetika az
access, AKICK, és beállitási szint listát a csatornán.
CHAN_SERVADMIN_HELP_LOGOUT
Syntax: LOGOUT #szoba [nicknév]
A parancs naplózza a kijelentekeztetést, neki ójra kell
azonosítani magukat,hogy visszakapják a hozzáféréseiket.
Ha ta vagy a csatörna alpító, képes vagy kijelentkeztetni
mást, te képes vagy magad is.
Ha szervíz admin vagy akkor kijelentekeztethetsz valakit a
csatornáról anélkül, hogy te lenneél a founder.Elhagyhatod
a nincnév paramétert, és akkor az összes bejelentkezett
felhasználót kijelentkezteted a csatornáról.
CHAN_SERVADMIN_HELP_DROP
Syntax: DROP #szoba
@@ -4992,11 +5039,11 @@ CHAN_SERVADMIN_HELP_SET_NOEXPIRE
Korlátozva Szervíz adminnak.
CHAN_SERVADMIN_HELP_INFO
Szervíz adminok használhatják az ALL paramétert.
Services Operators with the chanserv/auspex permission can
use the ALL parameter with any channel.
CHAN_SERVADMIN_HELP_LIST
Syntax: LIST pattern[FORBIDDEN] [SUSPENDED] [NOEXPIRE]
@@ -6378,3 +6425,15 @@ OPER_UMODE_UNSUPPORTED
OPER_SUPER_ADMIN_NOT_ENABLED
SuperAdmin setting not enabled in services.conf
OPER_HELP_SYNC
Syntax: SQLSYNC
This command syncs your databases with SQL. You should
only have to execute this command once, when you initially
import your databases into SQL.
OPER_HELP_CMD_SQLSYNC
SQLSYNC Import your databases to SQL
OPER_SYNC_UPDATING
Updating MySQL.
OPER_SYNC_UPDATED
Finished updating MySQL.
+240 -183
View File
@@ -1,6 +1,6 @@
# Italian language file.
#
# (C) 2003-2009 Anope Team
# (C) 2003-2010 Anope Team
# Contact us at team@anope.org
#
# Please read COPYING and README for further details.
@@ -859,6 +859,24 @@ NICK_SENDPASS_LINE_5
NICK_SENDPASS_OK
La password di %s è stata inviata.
# RESETPASS responces
NICK_RESETPASS_SYNTAX
RESETPASS nickname
NICK_RESETPASS_SUBJECT
Reset password request for %s
NICK_RESETPASS_MESSAGE
Hi,
You have requested to have the password for %s reset.
To reset your password, type %R%s CONFRM %s
If you don't know why this mail is sent to you, please ignore it silently.
PLEASE DON'T ANSWER TO THIS MAIL!
%s administrators.
NICK_RESETPASS_COMPLETE
Password reset email for %s has been sent.
# SUSPEND responses
NICK_SUSPEND_SYNTAX
SUSPEND nick motivo
@@ -896,10 +914,6 @@ NICK_IS_PREREG
Questo nick è in attesa di un codice di attivazione via e-mail per completare la registrazione.
NICK_ENTER_REG_CODE
Un codice di attivazione è stato inviato a %s. Digita %R%s CONFIRM <codice> per completare la registrazione.
NICK_CONFIRM_NOT_FOUND
Il primo passo della registrazione potrebbe essere scaduto. Usa %R%s REGISTER <password> <e-mail>.
NICK_CONFIRM_INVALID
È stato inserito un codice di attivazione non valido. Controlla di nuovo la tua casella di posta e riprova.
NICK_REG_MAIL_SUBJECT
Registrazione del nick (%s)
NICK_REG_MAIL_HEAD
@@ -919,6 +933,16 @@ NICK_GETPASS_PASSCODE_IS
NICK_FORCE_REG
Il nick %s è stato confermato.
# CONFIRM responses
NICK_CONFIRM_NOT_FOUND
Il primo passo della registrazione potrebbe essere scaduto. Usa %R%s REGISTER <password> <e-mail>.
NICK_CONFIRM_INVALID
È stato inserito un codice di attivazione non valido. Controlla di nuovo la tua casella di posta e riprova.
NICK_CONFIRM_EXPIRED
Your password reset request has expired.
NICK_CONFIRM_SUCCESS
You are now identified for your nick. Change your password using "%R%s SET PASSWORD newpassword" now.
###########################################################################
@@ -1000,6 +1024,12 @@ CHAN_LEVEL_TOPIC
Permette l'uso del comando TOPIC
CHAN_LEVEL_INFO
Permette l'uso del comando INFO con l'opzione ALL
CHAN_LEVEL_AUTOOWNER
Automatic mode +q
CHAN_LEVEL_OWNER
Allowed to use OWNER command
CHAN_LEVEL_OWNERME
Allowed to (de)owner him/herself
# Automatic responses
CHAN_IS_REGISTERED
@@ -1017,7 +1047,7 @@ CHAN_X_INVALID
# REGISTER responses
CHAN_REGISTER_SYNTAX
REGISTER canale password descrizione
REGISTER canale descrizione
CHAN_REGISTER_DISABLED
Spiacente, la registrazione dei canali è temporaneamente disabilitata.
CHAN_REGISTER_NOT_LOCAL
@@ -1036,36 +1066,11 @@ CHAN_REGISTRATION_FAILED
Spiacente, la registrazione non è andata a buon fine.
CHAN_REGISTERED
Il canale %s è stato registrato sotto il tuo nick: %s.
CHAN_PASSWORD_IS
La tua password di canale è %s - non dimenticarla!
CHAN_REGISTER_NONE_CHANNEL
Hai provato a registrare un canale non esistente %s
CHAN_SYMBOL_REQUIRED
Per favore usa il simbolo # provando a registrare
# IDENTIFY responses
CHAN_IDENTIFY_SYNTAX
IDENTIFY canale password
CHAN_IDENTIFY_FAILED
Spiacente, l'identificazione è fallita.
CHAN_IDENTIFY_SUCCEEDED
Password accettata - sei identificato come fondatore di %s.
# LOGOUT responses
CHAN_LOGOUT_SYNTAX
LOGOUT canale nick
CHAN_LOGOUT_SERVADMIN_SYNTAX
LOGOUT canale [nick]
CHAN_LOGOUT_SUCCEEDED
L'utente %s non è più identificato per il canale %s.
CHAN_LOGOUT_ALL_SUCCEEDED
Tutti gli utenti non sono più identificati per il canale %s (except the channel founder).
CHAN_LOGOUT_FOUNDER_FAILED
Non puoi eseguire il logout da %s (sei founder).
CHAN_LOGOUT_NOT_LOGGEDIN
%s non è stato loggato in %s.
# DROP responses
CHAN_DROP_SYNTAX
DROP canale
@@ -1096,14 +1101,6 @@ CHAN_SUCCESSOR_UNSET
CHAN_SUCCESSOR_IS_FOUNDER
%s non può essere il successore del canale %s perché ne è il fondatore.
# SET PASSWORD responses
CHAN_SET_PASSWORD_FAILED
Spiacente, il cambio di password non è andato a buon fine.
CHAN_PASSWORD_CHANGED
La password di %s è stata cambiata.
CHAN_PASSWORD_CHANGED_TO
La password di %s è stata impostata a %s.
# SET DESC responses
CHAN_DESC_CHANGED
La descrizione di %s è stata impostata a %s.
@@ -1235,6 +1232,14 @@ CHAN_SET_XOP_ON
CHAN_SET_XOP_OFF
Il sistema di liste xOP per %s è ora DISATTIVATO.
# SET PERSISTANT responces
CHAN_SET_PERSIST_SYNTAX
SET channel PERSIST {ON | OFF}
CHAN_SET_PERSIST_ON
Channel %s is now persistant.
CHAN_SET_PERSIST_OFF
Channel %s is no longer persistant.
# SET NOEXPIRE responses
CHAN_SET_NOEXPIRE_SYNTAX
SET canale NOEXPIRE {ON | OFF}
@@ -1254,6 +1259,37 @@ CHAN_XOP_ACCESS
CHAN_XOP_NOT_AVAILABLE
Il sistema xOP non è disponibile.
# QOP messages
CHAN_QOP_SYNTAX
QOP channel {ADD|DEL|LIST|CLEAR} [nick | entry-list]
CHAN_QOP_DISABLED
Sorry, channel QOP list modification is temporarily disabled.
CHAN_QOP_NICKS_ONLY
Channel QOP lists may only contain registered nicknames.
CHAN_QOP_ADDED
%s added to %s QOP list.
CHAN_QOP_MOVED
%s moved to %s QOP list.
CHAN_QOP_NO_SUCH_ENTRY
No such entry (#%d) on %s QOP list.
CHAN_QOP_NOT_FOUND
%s not found on %s QOP list.
CHAN_QOP_NO_MATCH
No matching entries on %s QOP list.
CHAN_QOP_DELETED
%s deleted from %s QOP list.
CHAN_QOP_DELETED_ONE
Deleted 1 entry from %s QOP list.
CHAN_QOP_DELETED_SEVERAL
Deleted %d entries from %s QOP list.
CHAN_QOP_LIST_EMPTY
%s QOP list is empty.
CHAN_QOP_LIST_HEADER
QOP list for %s:
Num Nick
CHAN_QOP_CLEAR
Channel %s QOP list has been cleared.
# AOP messages
CHAN_AOP_SYNTAX
AOP canale {ADD|DEL|LIST|CLEAR} [nick | numero-lista]
@@ -1380,7 +1416,7 @@ CHAN_VOP_CLEAR
# ACCESS messages
CHAN_ACCESS_SYNTAX
ACCESS canale {ADD|DEL|LIST|CLEAR} [nick [livello] | numero-lista]
ACCESS canale {ADD|DEL|LIST|VIEW|CLEAR} [nick [livello] | numero-lista]
CHAN_ACCESS_XOP
Questo comando non è utilizzabile; usa i comandi SOP, AOP, HOP e VOP.
Digita %R%s HELP comando per ottenere maggiori informazioni.
@@ -1429,6 +1465,12 @@ CHAN_ACCESS_LIST_AXS_FORMAT
%3d %4d %s
CHAN_ACCESS_CLEAR
La lista di accesso del canale %s è stata svuotata.
CHAN_ACCESS_VIEW_XOP_FORMAT
%3d %s %s
by %s, last seen %s
CHAN_ACCESS_VIEW_AXS_FORMAT
%3d %4d %s
by %s, last seen %s
# AKICK responses
CHAN_AKICK_SYNTAX
@@ -1483,6 +1525,8 @@ CHAN_LEVELS_RANGE
Il livello deve essere compreso tra %d e %d (inclusi).
CHAN_LEVELS_CHANGED
Il livello di %s sul canale %s è stato modificato a %d.
CHAN_LEVELS_CHANGED_FOUNDER
Level for %s on channel %s changed to founder only.
CHAN_LEVELS_UNKNOWN
Impostazione %s sconosciuta. Digita %R%s HELP LEVELS DESC per una lista delle impostazioni valide.
CHAN_LEVELS_DISABLED
@@ -1565,6 +1609,8 @@ CHAN_INFO_OPT_TOPICLOCK
Blocco del topic
CHAN_INFO_OPT_XOP
Liste xOP
CHAN_INFO_OPT_PERSIST
Persistant
CHAN_INFO_OPT_NONE
Nessno
CHAN_INFO_MODE_LOCK
@@ -1593,12 +1639,17 @@ CHAN_INVITE_ALREADY_IN
Sei già in %s!
CHAN_INVITE_SUCCESS
Sei stato invitato in %s.
CHAN_INVITE_OTHER_SUCCESS
%s has been invited to %s.
# UNBAN responses
CHAN_UNBAN_SYNTAX
UNBAN canale
UNBAN canale [nick]
CHAN_UNBANNED
I ban che ti riguardavano sono stati rimossi da %s.
CHAN_UNBANNED_OTHER
%s has been unbanned from %s.
# TOPIC responses
CHAN_TOPIC_SYNTAX
@@ -1624,15 +1675,7 @@ CHAN_CLEARED_USERS
CHAN_CLEARED_INVITES
Tutti gli invites sono stati rimossi dal canale %s.
# GETPASS responses
CHAN_GETPASS_SYNTAX
GETPASS canale
CHAN_GETPASS_UNAVAILABLE
Il comando GETPASS è inutilizzabile perché è in uso la criptazione dei dati.
CHAN_GETPASS_PASSWORD_IS
La chiave (password) del canale %s è %s.
# SENDPASS responses
# GETHEY responses
CHAN_GETKEY_SYNTAX
GETKEY canale
CHAN_GETKEY_NOKEY
@@ -1640,28 +1683,6 @@ CHAN_GETKEY_NOKEY
CHAN_GETKEY_KEY
La key per il canale %s è %s.
# SENDPASS responses
CHAN_SENDPASS_SYNTAX
SENDPASS canale
CHAN_SENDPASS_UNAVAILABLE
Il comando SENDPASS è inutilizzabile perché è in uso la criptazione dei dati.
CHAN_SENDPASS_SUBJECT
Password del canale (%s)
CHAN_SENDPASS_HEAD
Salve,
CHAN_SENDPASS_LINE_1
Hai richiesto di ricevere via e-mail la password del canale %s.
CHAN_SENDPASS_LINE_2
La password è %s. Per ragioni di sicurezza, ti invitiamo a cambiarla il più presto possibile con il comando "/cs set canale password".
CHAN_SENDPASS_LINE_3
Se non sai perché hai ricevuto questa mail, ignorala.
CHAN_SENDPASS_LINE_4
IMPORTANTE! Non rispondere a questa mail!
CHAN_SENDPASS_LINE_5
Gli amministratori di %s.
CHAN_SENDPASS_OK
La password di %s è stata inviata.
# FORBID responses
CHAN_FORBID_SYNTAX
FORBID canale [motivo]
@@ -2102,6 +2123,8 @@ BOT_UNASSIGN_SYNTAX
UNASSIGN canale
BOT_UNASSIGN_UNASSIGNED
Non c'è più nessun bot assegnato a %s.
BOT_UNASSIGN_PERSISTANT_CHAN
You can not unassign bots while persist is set on the channel.
# INFO responses
BOT_INFO_SYNTAX
@@ -2885,8 +2908,6 @@ OPER_DEFCON_SYNTAX
DEFCON [1|2|3|4|5]
OPER_DEFCON_DENIED
I servizi sono in modalità Defcon, prego riprovare più tardi.
OPER_DEFCON_NO_CONF
Il sistema Defcon dev'essere attivato nel file services.conf
OPER_DEFCON_CHANGED
I servizi sono ora in DEFCON %d
OPER_DEFCON_WALL
@@ -2906,6 +2927,10 @@ OPER_MODULE_REMOVE_FAIL
Impossibile rimuovere il modulo %s
OPER_MODULE_NO_UNLOAD
Questo modulo non può essere rimosso.
OPER_MODULE_ALREADY_LOADED
Module %s is already loaded.
OPER_MODULE_ISNT_LOADED
Module %s isn't loaded.
OPER_MODULE_LOAD_SYNTAX
MODLOAD NomeFile
OPER_MODULE_UNLOAD_SYNTAX
@@ -3278,6 +3303,8 @@ NICK_HELP_CMD_RELEASE
RELEASE Permette di usare di nuovo il proprio nick dopo un RECOVER
NICK_HELP_CMD_SENDPASS
SENDPASS Invia la password del proprio nick via e-mail
NICK_HELP_CMD_RESETPASS
RESETPASS Helps you reset lost passwords.
NICK_HELP_CMD_GHOST
GHOST Disconnette un nick fantasma che non è ancora caduto
NICK_HELP_CMD_ALIST
@@ -3875,6 +3902,12 @@ NICK_HELP_SENDPASS
Potrebbe essere disponibile soltanto per gli IrcOp.
NICK_HELP_RESETPASS
Syntax: RESETPASS nickname
Sends a code key to the nickname with instructions on how to
reset their password.
NICK_HELP_CONFIRM
Syntax: CONFIRM passcode
@@ -3884,6 +3917,14 @@ NICK_HELP_CONFIRM
is sent to your e-mail address in the first step of the
registration process. For more information about the first
stage of the registration process, type: %R%S HELP REGISTER
This is also used after the RESETPASS command has been used to
force identify you to your nick so you may change your password.
NICK_HELP_CONFIRM_OPER
Additionally, Services Operators with the nickserv/confirm permission can
replace passcode with a users nick to force validate them.
NICK_HELP_RESEND
Syntax: RESEND
@@ -4031,10 +4072,10 @@ CHAN_HELP_CMD_STATUS
un utente su un canale
CHAN_HELP_CMD_REGISTER
REGISTER Registra un canale
CHAN_HELP_CMD_IDENTIFY
IDENTIFY Ti identifica come fondatore di un canale
CHAN_HELP_CMD_SET
SET Imposta le opzioni e le informazioni di canale
CHAN_HELP_CMD_QOP
QOP Modify the list of QOP users
CHAN_HELP_CMD_AOP
AOP Modifica la lista degli utenti AOP
CHAN_HELP_CMD_SOP
@@ -4047,8 +4088,6 @@ CHAN_HELP_CMD_AKICK
AKICK Modifica la lista AutoKick
CHAN_HELP_CMD_DROP
DROP Annulla la registrazione di un canale
CHAN_HELP_CMD_SENDPASS
SENDPASS Invia la password del proprio canale via e-mail
CHAN_HELP_CMD_BAN
BAN Permette di bannare un utente
CHAN_HELP_CMD_CLEAR
@@ -4065,14 +4104,12 @@ CHAN_HELP_CMD_KICK
KICK Espelle un utente da un canale (kick)
CHAN_HELP_CMD_LIST
LIST Mostra la lista dei canali
CHAN_HELP_CMD_LOGOUT
LOGOUT Deidentifica dal canale specificato
CHAN_HELP_CMD_OP
OP Assegna lo stato di operatore a un utente (+o)
CHAN_HELP_CMD_TOPIC
TOPIC Cambia il topic di un canale
CHAN_HELP_CMD_UNBAN
UNBAN Rimuove i ban che impediscono l'accesso a un canale
UNBAN Remove all bans preventing a user from entering a channel
CHAN_HELP_CMD_VOICE
VOICE Assegna lo stato di voice a un utente (+v)
CHAN_HELP_CMD_VOP
@@ -4091,10 +4128,6 @@ CHAN_HELP_CMD_OWNER
OWNER Assegna lo stato di owner a un utente (+q)
CHAN_HELP_CMD_PROTECT
PROTECT Assegna lo stato di protezione a un utente (+a)
CHAN_HELP_CMD_ADMIN
ADMIN Protegge un nick su un canale
CHAN_HELP_CMD_DEADMIN
DEADMIN Sprotegge un nick su un canale
CHAN_HELP_CMD_DEOP
DEOP Toglie lo stato di operatore a un utente (-o)
@@ -4116,54 +4149,32 @@ CHAN_HELP_EXPIRES
automaticamente deregistrati.
CHAN_HELP_REGISTER
Sintassi: REGISTER canale password descrizione
Sintassi: REGISTER canale descrizione
Registra un canale nel database di %S. Per poter usare
questo comando, devi essere operatore di canale (op) sul
canale che intendi registrare. La password è usata con
il comando IDENTIFY per permettere agli altri di
effettuare in seguito dei cambiamenti sulle varie
impostazioni di canale. L'ultimo parametro, che deve
essere incluso, è una descrizione generica del canale
stesso.
Quando registri un canale, vieni registrato come il
"fondatore" (founder) del canale. Il fondatore di un
canale può cambiare tutte le impostazioni del canale
stesso; inoltre, %S gli assegnerà automaticamente i
privilegi di operatore di canale (+o) quando entra nel
canale.
Per assegnare alcuni di questi privilegi ad altri
utenti, vedi il comando ACCESS (%R%S HELP ACCESS).
NOTA: Per registrare un canale, devi aver prima
registrato il tuo nick. Se non l'hai fatto, digita
%R%s HELP per avere informazioni su come farlo.
Registers a channel in the %S database. In order
to use this command, you must first be a channel operator
on the channel you're trying to register.
The description, which must be included, is a
general description of the channel's purpose.
CHAN_HELP_IDENTIFY
Sintassi: IDENTIFY canale password
Ti identifica con %S come fondatore del canale specificato.
Molti comandi richiedono che tu sia identificato per
poter essere eseguiti. La password deve essere la stessa
utilizzata con il comando REGISTER.
CHAN_HELP_LOGOUT
Sintassi: LOGOUT canale nick
Annulla l'effetto del comando IDENTIFY per il canale
specificato, cioè fa in modo che tu non sia più riconosciuto
per quel canale.
Se sei il fondatore del canale puoi deidentificare chiunque,
altrimenti puoi deidentificare solo te stesso.
When you register a channel, you are recorded as the
"founder" of the channel. The channel founder is allowed
to change all of the channel settings for the channel;
%S will also automatically give the founder
channel-operator privileges when s/he enters the channel.
See the ACCESS command (%R%S HELP ACCESS) for
information on giving a subset of these privileges to
other channel users.
NOTICE: In order to register a channel, you must have
first registered your nickname. If you haven't,
%R%s HELP for information on how to do so.
CHAN_HELP_DROP
Sintassi: DROP canale
Deregistra il canale specificato. Può essere usato soltanto
da un fondatore di canale, che deve prima usare il comando
IDENTIFY.
da un fondatore di canale.
CHAN_HELP_SET
Sintassi: SET canale opzione parametri
@@ -4175,7 +4186,6 @@ CHAN_HELP_SET
FOUNDER Imposta il fondatore del canale
SUCCESSOR Imposta il successore del fondatore del canale
PASSWORD Imposta la password del canale
DESC Imposta la descrizione del canale
URL Associa un URL al canale
EMAIL Associa un indirizzo e-mail al canale
@@ -4198,6 +4208,7 @@ CHAN_HELP_SET
TOPICLOCK Imposta il blocco del topic (modificabile solo
attraverso il comando TOPIC)
XOP Seleziona il sistema di privilegi utilizzato
PERSIST Set the channel as permanent
Digita %R%S HELP option per ottenere maggiori
informazioni su un comando specifico.
@@ -4220,12 +4231,6 @@ CHAN_HELP_SET_SUCCESSOR
successore.
Il nick specificato deve essere registrato.
CHAN_HELP_SET_PASSWORD
Sintassi: SET canale PASSWORD password
Imposta la password del canale, utilizzata per essere
identificati come fondatori del canale stesso.
CHAN_HELP_SET_DESC
Sintassi: SET canale DESC descrizione
@@ -4410,6 +4415,29 @@ CHAN_HELP_SET_XOP
Al contrario, passare dalle liste xOP alle liste di accesso
non causa nessun problema.
CHAN_HELP_SET_PERSIST
Syntax: SET channel PERSIST {ON | OFF}
Enables or disables the persistant channel setting.
When persistant is set, the service bot will remain
in the channel when it has emptied of users.
If your IRCd does not a permanent (persistant) channel
mode you must have a service bot in your channel to
set persist on, and it can not be unassigned while persist
is on.
If this network does not have BotServ enabled and does
not have a permanent channel mode, ChanServ will
join your channel when you set persist on (and leave when
it has been set off).
If your IRCd has a permanent (persistant) channel mode
and is is set or unset (for any reason, including MLOCK),
persist is automatically set and unset for the channel aswell.
Additionally, services will set or unset this mode when you
set persist on or off.
CHAN_HELP_SET_OPNOTICE
Sintassi: SET canale OPNOTICE {ON | OFF}
@@ -4417,6 +4445,45 @@ CHAN_HELP_SET_OPNOTICE
Quando l'opzione è attiva, %S invierà un notice al
canale quando vengono usati i comandi OP e DEOP.
CHAN_HELP_QOP
Syntax: QOP channel ADD nick
QOP channel DEL {nick | entry-num | list}
QOP channel LIST [mask | list]
QOP channel CLEAR
Maintains the QOP (AutoOwner) list for a channel. The QOP
list gives users the right to be auto-owner on your channel,
which gives them almost (or potentially, total) access.
The QOP ADD command adds the given nickname to the
QOP list.
The QOP DEL command removes the given nick from the
QOP list. If a list of entry numbers is given, those
entries are deleted. (See the example for LIST below.)
The QOP LIST command displays the QOP list. If
a wildcard mask is given, only those entries matching the
mask are displayed. If a list of entry numbers is given,
only those entries are shown; for example:
QOP #channel LIST 2-5,7-9
Lists QOP entries numbered 2 through 5 and
7 through 9.
The QOP CLEAR command clears all entries of the
QOP list.
The QOP commands are limited to
founders (unless SECUREOPS is off). However, any user on the
QOP list may use the QOP LIST command.
This command may have been disabled for your channel, and
in that case you need to use the access list. See
%R%S HELP ACCESS for information about the access list,
and %R%S HELP SET XOP to know how to toggle between
the access list and xOP list systems.
CHAN_HELP_AOP
Sintassi: AOP canale ADD nick
AOP canale DEL {nick | numero | lista}
@@ -4592,6 +4659,7 @@ CHAN_HELP_ACCESS
Sintassi: ACCESS canale ADD nick livello
ACCESS canale DEL {nick | numero | lista}
ACCESS canale LIST [mask | lista]
ACCESS canale VIEW [mask | lista]
ACCESS canale CLEAR
Gestisce la lista di accesso del canale.
@@ -4626,7 +4694,10 @@ CHAN_HELP_ACCESS
ACCESS #canale LIST 2-5,7-9
Mostra i record della lista che hanno numero da 2
a 5 e da 7 a 9 (il 6 è quindi escluso).
The ACCESS VIEW command displays the access list similar
to ACCESS LIST but shows the creator and last used time.
Il comando ACCESS CLEAR svuota completamente la lista di
accesso.
@@ -4704,32 +4775,30 @@ CHAN_HELP_AKICK
Il comando AKICK CLEAR svuota la lista AutoKick.
CHAN_HELP_LEVELS
Sintassi: LEVELS canale SET tipo livello
Sintassi: LEVELS canale SET tipo [livello|FOUNDER]
LEVELS canale {DIS | DISABLE} tipo
LEVELS canale LIST
LEVELS canale RESET
Il comando LEVELS permette un controllo preciso dei
significati dei livelli di accesso numerici usati nei
canali. Con questo comando, è possibile definire il
livello di accesso richiesto per la maggior parte delle
funzioni di %S.
(I comandi SET FOUNDER e SET PASSWORD, nonché questo
comando, sono sempre riservati al fondatore del canale).
The LEVELS command allows fine control over the meaning of
the numeric access levels used for channels. With this
command, you can define the access level required for most
of %S's functions. (The SET FOUNDER and this command
are always restricted to the channel founder.)
LEVELS SET permette di definire il livello di accesso
necessario per una funzione o per un gruppo di funzioni.
LEVELS DISABLE (o, abbreviato, DIS) disattiva una
funzione automatica o non permette più l'accesso a una
funzione se non al fondatore del canale.
LEVELS LIST mostra i livelli di accesso attuali per
ogni funzione e per i gruppi di funzioni.
LEVELS RESET reimposta i livelli ai valori di default
di un canale appena creato (per maggiori informazioni,
digita HELP ACCESS LEVELS).
LEVELS SET allows the access level for a function or group of
functions to be changed. LEVELS DISABLE (or DIS for short)
disables an automatic feature or disallows access to a
function by anyone, INCLUDING the founder (although, the founder
can always reenable it).
Per una lista delle funzioni di cui puoi cambiare i
livelli, digita HELP LEVELS DESC.
LEVELS LIST shows the current levels for each function or
group of functions. LEVELS RESET resets the levels to the
default levels of a newly-created channel (see
HELP ACCESS LEVELS).
For a list of the features and functions whose levels can be
set, see HELP LEVELS DESC.
CHAN_HELP_LEVELS_DESC
La seguente lista mostra le funzioni disponibile. Tieni
@@ -4873,10 +4942,10 @@ CHAN_HELP_INVITE
livello di accesso 5 o superiori sul canale.
CHAN_HELP_UNBAN
Sintassi: UNBAN canale
Sintassi: UNBAN canale [nick]
Chiede a %S di rimuovere tutti i ban che non ti
permettono di entrare sul canale specificato.
Tells %S to remove all bans preventing you or the given
user from entering the given channel.
Di default, il comando è limitato agli AOP o agli utenti con
livello di accesso 5 o superiori sul canale.
@@ -4938,16 +5007,6 @@ CHAN_HELP_GETKEY
Sintassi: GETKEY canale
Restituisce la chiave (password) del canale specificato.
CHAN_HELP_SENDPASS
Sintassi: SENDPASS canale
Invia la password del canale specificato all'indirizzo e-mail
del fondatore (specificato nelle opzioni del nick del fondatore
stesso). Questo comando è utile quando un utente ha dimenticato
la password del canale.
Potrebbe essere disponibile soltanto per gli IrcOp.
CHAN_SERVADMIN_HELP
@@ -4955,20 +5014,6 @@ CHAN_SERVADMIN_HELP
senza che siano identificati con la password, e possono vedere
la lista di accesso, la lista AKICK e le liste di configurazione
dei livelli per qualsiasi canale.
CHAN_SERVADMIN_HELP_LOGOUT
Sintassi: LOGOUT canale [nick]
Questo comando fa si' che il nick specificato non sia più
identificato sul canale indicato.
Se sei il fondatore del canale, puoi deidentificare chiunque,
altrimenti puoi deidentificare solo te stesso.
Se sei un Services Operator, puoi deidentificare chiunque da
qualsiasi canale senza dover essere il fondatore del canale.
Inoltre puoi omettere il parametro nick; questo farà in modo
che tutti gli utenti siano deidentificati dal canale.
CHAN_SERVADMIN_HELP_DROP
Sintassi: DROP canale
@@ -4993,8 +5038,8 @@ CHAN_SERVADMIN_HELP_SET_NOEXPIRE
CHAN_SERVADMIN_HELP_INFO
I Services Operator possono usare il parametro ALL con qualsiasi
canale.
Services Operators with the chanserv/auspex permission can
use the ALL parameter with any channel.
CHAN_SERVADMIN_HELP_LIST
Sintassi: LIST pattern [FORBIDDEN] [SUSPENDED] [NOEXPIRE]
@@ -6358,3 +6403,15 @@ OPER_UMODE_UNSUPPORTED
OPER_SUPER_ADMIN_NOT_ENABLED
L'impostazione SuperAdmin non è abilitata in services.conf
OPER_HELP_SYNC
Syntax: SQLSYNC
This command syncs your databases with SQL. You should
only have to execute this command once, when you initially
import your databases into SQL.
OPER_HELP_CMD_SQLSYNC
SQLSYNC Import your databases to SQL
OPER_SYNC_UPDATING
Updating MySQL.
OPER_SYNC_UPDATED
Finished updating MySQL.
+2 -2
View File
@@ -1,6 +1,6 @@
/* Compiler for language definition files.
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -213,7 +213,7 @@ int main(int ac, char **av)
fprintf(stderr, "%s:%d: Out of memory!\n", filename, linenum);
return 2;
}
sprintf(strings[curstring] + i, "%s\n", line);
snprintf(strings[curstring] + i, strlen(line) + 2, "%s\n", line);
}
} else {
if ((curstring = stringnum(line)) < 0) {
+1 -1
View File
@@ -1,6 +1,6 @@
/* Language stuff generator for win32.
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
+238 -178
View File
@@ -1,6 +1,6 @@
# Dutch Language File
#
# (C) 2003-2008 Anope Team
# (C) 2003-2010 Anope Team
# Contact us at team@anope.org
#
# Please read COPYING and README for furhter details.
@@ -876,6 +876,24 @@ NICK_SENDPASS_LINE_5
NICK_SENDPASS_OK
Wachtwoord %s is verstuurd.
NICK_RESETPASS_SYNTAX
RESETPASS nickname
NICK_RESETPASS_SUBJECT
Reset password request for %s
NICK_RESETPASS_MESSAGE
Hi,
You have requested to have the password for %s reset.
To reset your password, type %R%s CONFIRM %s
If you don't know why this mail is sent to you, please ignore it silently.
PLEASE DON'T ANSWER TO THIS MAIL
%s administrators.
NICK_RESETPASS_COMPLETE
Password reset email for %s has been sent.
# FORBID responses
NICK_SUSPEND_SYNTAX
SUSPEND nick reden
@@ -913,10 +931,6 @@ NICK_IS_PREREG
Deze nick wacht nog op een e-mail verificatie code coor de registratie is voltooid.
NICK_ENTER_REG_CODE
Een verificatiecode is verstuurd naar %s. Type %R%s confirm <verificatiecode> om de registratie te voltooien.
NICK_CONFIRM_NOT_FOUND
Registratie stap 1 kan verlopen zijn. Gebruik eerst "%R%s register <wachtwoord> <email>".
NICK_CONFIRM_INVALID
Ongeldige verificatiecode ingevuld. Controleer je e-mail nog eens en probeer opnieuw.
NICK_REG_MAIL_SUBJECT
Nickname Registratie (%s)
NICK_REG_MAIL_HEAD
@@ -936,6 +950,16 @@ NICK_GETPASS_PASSCODE_IS
NICK_FORCE_REG
Nickname %s geverificeerd.
# CONFIRM responces
NICK_CONFIRM_NOT_FOUND
Registratie stap 1 kan verlopen zijn. Gebruik eerst "%R%s register <wachtwoord> <email>".
NICK_CONFIRM_INVALID
Ongeldige verificatiecode ingevuld. Controleer je e-mail nog eens en probeer opnieuw.
NICK_CONFIRM_EXPIRED
Your password request has expired.
NICK_CONFIRM_SUCCESS
You are now identified for your nick. Change your password using "%R%s SET PASSWORD newpassword" now.
###########################################################################
#
# ChanServ messages
@@ -1015,6 +1039,12 @@ CHAN_LEVEL_TOPIC
Toegestaan om TOPIC te gebruiken
CHAN_LEVEL_INFO
Toegestaan om INFO met de ALL optie te gebruiken
CHAN_LEVEL_AUTOOWNER
Automatic mode +q
CHAN_LEVEL_OWNER
Allowed to use OWNER command
CHAN_LEVEL_OWNERME
Allowed to (de)owner him/herself
# Automatic responses
CHAN_IS_REGISTERED
@@ -1032,7 +1062,7 @@ CHAN_X_INVALID
# REGISTER responses
CHAN_REGISTER_SYNTAX
REGISTER kanaal wachtwoord beschrijving
REGISTER kanaal beschrijving
CHAN_REGISTER_DISABLED
Sorry, kanaal registratie is tijdelijk uitgeschakeld.
CHAN_REGISTER_NOT_LOCAL
@@ -1051,36 +1081,11 @@ CHAN_REGISTRATION_FAILED
Sorry, registratie gefaald.
CHAN_REGISTERED
Kanaal %s is geregistreerd onder jouw nickname: %s
CHAN_PASSWORD_IS
Het wachtwoord van je kanaal is %s - onthoudt dit voor later gebruik.
CHAN_REGISTER_NONE_CHANNEL
Je hebt geprobeerd om niet-bestaand kanaal %s te registeren.
CHAN_SYMBOL_REQUIRED
Gebruik het # symbool wanner je probeert een kanaal te registeren.
# IDENTIFY responses
CHAN_IDENTIFY_SYNTAX
IDENTIFY kanaal wachtwoord
CHAN_IDENTIFY_FAILED
Sorry, identificatie gefaald.
CHAN_IDENTIFY_SUCCEEDED
Wachtwoord goedgekeurd - je hebt nu stichter-niveau toegang to %s.
# LOGOUT responses
CHAN_LOGOUT_SYNTAX
LOGOUT kanaal nickname
CHAN_LOGOUT_SERVADMIN_SYNTAX
LOGOUT kanaal [nickname]
CHAN_LOGOUT_SUCCEEDED
Gebruiker %s is uitgelogd van kanaal %s.
CHAN_LOGOUT_ALL_SUCCEEDED
Alle geidentificeerde gebruikers zijn uitgelogd van kanaal %s (except the channel founder).
CHAN_LOGOUT_FOUNDER_FAILED
You may not log out of %s (you are founder).
CHAN_LOGOUT_NOT_LOGGEDIN
%s was not logged into %s.
# DROP responses
CHAN_DROP_SYNTAX
DROP kanaal
@@ -1111,14 +1116,6 @@ CHAN_SUCCESSOR_UNSET
CHAN_SUCCESSOR_IS_FOUNDER
%s kan de opvolger niet zijn op kanaal %s omdat hij/zij founder is.
# SET PASSWORD responses
CHAN_SET_PASSWORD_FAILED
Sorry, kan wachtwoord niet zetten.
CHAN_PASSWORD_CHANGED
%s wachtwoord veranderd.
CHAN_PASSWORD_CHANGED_TO
%s wachtwoord veranderd in %s.
# SET DESC responses
CHAN_DESC_CHANGED
Beschrijving van %s veranderd in %s.
@@ -1251,6 +1248,14 @@ CHAN_SET_XOP_ON
CHAN_SET_XOP_OFF
xOP lists system for %s is now OFF.
# SET PERSISTANT responces
CHAN_SET_PERSIST_SYNTAX
SET channel PERSIST {ON | OFF}
CHAN_SET_PERSIST_ON
Channel %s is now persistant.
CHAN_SET_PERSIST_OFF
Channel %s is no longer persistant.
# SET NOEXPIRE responses
CHAN_SET_NOEXPIRE_SYNTAX
SET kanaal NOEXPIRE {ON | OFF}
@@ -1270,6 +1275,37 @@ CHAN_XOP_ACCESS
CHAN_XOP_NOT_AVAILABLE
xOP system is not available.
# QOP messages
CHAN_QOP_SYNTAX
QOP channel {ADD|DEL|LIST|CLEAR} [nick | entry-list]
CHAN_QOP_DISABLED
Sorry, channel QOP list modification is temporarily disabled.
CHAN_QOP_NICKS_ONLY
Channel QOP lists may only contain registered nicknames.
CHAN_QOP_ADDED
%s added to %s QOP list.
CHAN_QOP_MOVED
%s moved to %s QOP list.
CHAN_QOP_NO_SUCH_ENTRY
No such entry (#%d) on %s QOP list.
CHAN_QOP_NOT_FOUND
%s not found on %s QOP list.
CHAN_QOP_NO_MATCH
No matching entries on %s QOP list.
CHAN_QOP_DELETED
%s deleted from %s QOP list.
CHAN_QOP_DELETED_ONE
Deleted 1 entry from %s QOP list.
CHAN_QOP_DELETED_SEVERAL
Deleted %d entries from %s QOP list.
CHAN_QOP_LIST_EMPTY
%s QOP list is empty.
CHAN_QOP_LIST_HEADER
QOP list for %s:
Num Nick
CHAN_QOP_CLEAR
Channel %s QOP list has been cleared.
# AOP messages
CHAN_AOP_SYNTAX
AOP kanaal {ADD|DEL|LIST|CLEAR} [nick | lijst]
@@ -1396,7 +1432,7 @@ CHAN_VOP_CLEAR
# ACCESS messages
CHAN_ACCESS_SYNTAX
ACCESS kanaal {ADD|DEL|LIST|CLEAR} [nick [niveau] | lijst]
ACCESS kanaal {ADD|DEL|LIST|VIEW|CLEAR} [nick [niveau] | lijst]
CHAN_ACCESS_XOP
Je kan dit commando niet gebruiken.
Gebruik de AOP, SOP en VOP commando's in plaats van deze.
@@ -1446,6 +1482,12 @@ CHAN_ACCESS_LIST_AXS_FORMAT
%3d %4d %s
CHAN_ACCESS_CLEAR
Kanaal %s toegangslijst is leeggemaakt.
CHAN_ACCESS_VIEW_XOP_FORMAT
%3d %s %s
by %s, last seen %s
CHAN_ACCESS_VIEW_AXS_FORMAT
%3d %4d %s
by %s, last seen %s
# AKICK responses
CHAN_AKICK_SYNTAX
@@ -1500,6 +1542,8 @@ CHAN_LEVELS_RANGE
Niveau moet tussen de %d en %d inclusief zijn.
CHAN_LEVELS_CHANGED
Niveau voor %s op kanaal %s veranderd in %d.
CHAN_LEVELS_CHANGED_FOUNDER
Level for %s on channel %s changed to founder only.
CHAN_LEVELS_UNKNOWN
Instelling %s onbekend. Type %R%s HELP LEVELS DESC voor een lijst van geldige instellingen.
CHAN_LEVELS_DISABLED
@@ -1582,6 +1626,8 @@ CHAN_INFO_OPT_TOPICLOCK
Topicslot
CHAN_INFO_OPT_XOP
xOP lijsten systeem
CHAN_INFO_OPT_PERSIST
Persistant
CHAN_INFO_OPT_NONE
Geen
CHAN_INFO_MODE_LOCK
@@ -1610,12 +1656,17 @@ CHAN_INVITE_ALREADY_IN
You are already in %s!
CHAN_INVITE_SUCCESS
You have been invited to %s.
CHAN_INVITE_OTHER_SUCCESS
%s has been invited to %s.
# UNBAN responses
CHAN_UNBAN_SYNTAX
UNBAN kanaal
UNBAN kanaal [nick]
CHAN_UNBANNED
Bans met betrekking to jou op %s zijn opgeheven.
Bans met betrekking tot jou op %s zijn opgeheven.
CHAN_UNBANNED_OTHER
%s has been unbanned from %s.
# TOPIC responses
CHAN_TOPIC_SYNTAX
@@ -1641,15 +1692,7 @@ CHAN_CLEARED_USERS
CHAN_CLEARED_INVITES
All invites on channel %s have been removed.
# GETPASS responses
CHAN_GETPASS_SYNTAX
GETPASS kanaal
CHAN_GETPASS_UNAVAILABLE
GETPASS commando onbeschikbaar wegens encryptie van de gegevens.
CHAN_GETPASS_PASSWORD_IS
Wachtwoord voor kanaal %s is %s.
# SENDPASS responses
# GETKEY responses
CHAN_GETKEY_SYNTAX
GETKEY channel
CHAN_GETKEY_NOKEY
@@ -1657,28 +1700,6 @@ CHAN_GETKEY_NOKEY
CHAN_GETKEY_KEY
Key for channel %s is %s.
# SENDPASS responses
CHAN_SENDPASS_SYNTAX
SENDPASS kanaal
CHAN_SENDPASS_UNAVAILABLE
SENDPASS commando onbeschikbaar wegens encryptie van de gegevens.
CHAN_SENDPASS_SUBJECT
Kanaal wachtwoord (%s)
CHAN_SENDPASS_HEAD
Hallo,
CHAN_SENDPASS_LINE_1
Je hebt het wachtwoord aangevraag van kanaal %s via e-mail.
CHAN_SENDPASS_LINE_2
Het wachtwoord is %s. Wegens veiligheidsredenen zou je deze zo snel mogelijk moeten veranderen.
CHAN_SENDPASS_LINE_3
Als je niet weet waarom deze e-mail verstuurd is, negeer deze dan.
CHAN_SENDPASS_LINE_4
ANTWOORD NIET OP DEZE MAIL!
CHAN_SENDPASS_LINE_5
%s beheerders.
CHAN_SENDPASS_OK
Wachtwoord %s is verstuurd.
# FORBID responses
CHAN_FORBID_SYNTAX
FORBID kanaal [reden]
@@ -2148,6 +2169,8 @@ BOT_UNASSIGN_SYNTAX
UNASSIGN kanaal
BOT_UNASSIGN_UNASSIGNED
Er is geen bot meer toegewezen aan %s.
BOT_UNASSIGN_PERSISTANT_CHAN
You can not unassign bots while persist is set on the channel.
# INFO responses
BOT_INFO_SYNTAX
@@ -2944,8 +2967,6 @@ OPER_DEFCON_SYNTAX
DEFCON [1|2|3|4|5]
OPER_DEFCON_DENIED
Services zijn in Defcon modus. Probeer later opnieuw.
OPER_DEFCON_NO_CONF
Het Defcon systeem moet worden ingeschakeld via services.conf
OPER_DEFCON_CHANGED
Services zijn nu in DEFCON %d
OPER_DEFCON_WALL
@@ -2965,6 +2986,10 @@ OPER_MODULE_REMOVE_FAIL
Het verwijderen van module %s is gefaald
OPER_MODULE_NO_UNLOAD
This module can not be unloaded.
OPER_MODULE_ALREADY_LOADED
Module %s is already loaded.
OPER_MODULE_ISNT_LOADED
Module %s isn't loaded.
OPER_MODULE_LOAD_SYNTAX
MODLOAD bestandsnaam
OPER_MODULE_UNLOAD_SYNTAX
@@ -3354,6 +3379,8 @@ NICK_HELP_CMD_RELEASE
RELEASE Je nick terugnemen nadat je RECOVER gebruikt hebt
NICK_HELP_CMD_SENDPASS
SENDPASS Je wachtwoord vergeten? Probeer dit
NICK_HELP_CMD_RESETPASS
RESETPASS Helps you reset lost passwords.
NICK_HELP_CMD_GHOST
GHOST Disconnects a "ghost" IRC session using your nick
NICK_HELP_CMD_ALIST
@@ -3941,6 +3968,12 @@ NICK_HELP_SENDPASS
Kan gelimiteerd zijn tot IRC operators op sommige netwerken.
NICK_HELP_RESETPASS
Syntax: RESETPASS nickname
Sends a code key to the nickname with instructions on how to
reset their password.
NICK_HELP_CONFIRM
Syntax: CONFIRM passcode
@@ -3950,6 +3983,14 @@ NICK_HELP_CONFIRM
is sent to your e-mail address in the first step of the
registration process. For more information about the first
stage of the registration process, type: %R%S HELP REGISTER
This is also used after the RESETPASS command has been used to
force identify you to your nick so you may change your password
NICK_HELP_CONFIRM_OPER
Additionally, Services Operators with the nickserv/confirm permission can
replace passcode with a users nick to force validate them.
NICK_HELP_RESEND
Syntax: RESEND
@@ -4116,10 +4157,10 @@ CHAN_HELP_CMD_STATUS
op een kanaal weer
CHAN_HELP_CMD_REGISTER
REGISTER Registreer een kanaal
CHAN_HELP_CMD_IDENTIFY
IDENTIFY Identificeer jezelf met je wachtwoord
CHAN_HELP_CMD_SET
SET Stel kanaal opties en informatie in
CHAN_HELP_CMD_QOP
QOP Modify the list of QOP users
CHAN_HELP_CMD_AOP
AOP Wijzig de lijst van AOP's
CHAN_HELP_CMD_SOP
@@ -4132,8 +4173,6 @@ CHAN_HELP_CMD_AKICK
AKICK Beheer de AutoKick lijst
CHAN_HELP_CMD_DROP
DROP Annuleer een kanaalregistratie
CHAN_HELP_CMD_SENDPASS
SENDPASS Wachtwoord vergeten?
CHAN_HELP_CMD_BAN
BAN Bans a selected nick on a channel
CHAN_HELP_CMD_CLEAR
@@ -4150,8 +4189,6 @@ CHAN_HELP_CMD_KICK
KICK Kicks a selected nick from a channel
CHAN_HELP_CMD_LIST
LIST Lists all registered channels matching the given pattern
CHAN_HELP_CMD_LOGOUT
LOGOUT This command will logout the selected nickname
CHAN_HELP_CMD_OP
OP Gives Op status to a selected nick on a channel
CHAN_HELP_CMD_TOPIC
@@ -4176,10 +4213,6 @@ CHAN_HELP_CMD_OWNER
OWNER Gives you owner status on channel
CHAN_HELP_CMD_PROTECT
PROTECT Protects a selected nick on a channel
CHAN_HELP_CMD_ADMIN
ADMIN Protects a selected nick on a channel
CHAN_HELP_CMD_DEADMIN
DEADMIN Deprotects a selected nick on a channel
CHAN_HELP_CMD_DEOP
DEOP Deops a selected nick on a channel
@@ -4200,52 +4233,32 @@ CHAN_HELP_EXPIRES
het kanaal binnen is gekomen) automatisch zal worden verwijderd.
CHAN_HELP_REGISTER
Gebruik: REGISTER kanaal wachtwoord beschrijving
Gebruik: REGISTER kanaal beschrijving
Registreert een kanaal in de %S database. Om dit commando te
gebruiken moet je eerst een operator op het kanaal zijn dat
je wil registreren. Het wachtwoord wordt gebruikt met het
IDENTIFY commando dat anderen in staat stelt om later
wijzigingen aan de kanaalinstellingen door te voeren. Het
laatste paramenter, die moet worden opgegeven, is een
algemene beschrijving van het doel van het kanaal.
Wanneer je een kanaal registreert wordt je de "stichter"
van het kanaal. De kanaalstichter mag alle instellingen
van het kanaal veranderen. %S zal ook de stichter automatisch
stichterrechten geven wanneer deze het kanaal binnenkomt.
Zie het ACCESS commando (%R%S HELP ACCESS) voor meer
informatie over het geven van rechten aan andere kanaalgebruikers.
OPMERKING: Om een kanaal te registreren moet je je nick
eerst geregistreerd hebben. Als je dit niet gedaan hebt
bekijk dan %R%s HELP voor informatie over hoe je
dit kunt doen.
Registers a channel in the %S database. In order
to use this command, you must first be a channel operator
on the channel you're trying to register.
The description, which must be included, is a
general description of the channel's purpose.
CHAN_HELP_IDENTIFY
Gebruik: IDENTIFY kanaal wachtwoord
Identificeert je bij %S als de stichter van het gegeven
kanaal. Veel commando's verplichten je dit commando te
gebruiken voordat je ze gebruikt. Het wachtwoord moet
identiek zijn aan degene verstuurd met het REGISTER
commando.
When you register a channel, you are recorded as the
"founder" of the channel. The channel founder is allowed
to change all of the channel settings for the channel;
%S will also automatically give the founder
channel-operator privileges when s/he enters the channel.
See the ACCESS command (%R%S HELP ACCESS) for
information on giving a subset of these privileges to
other channel users.
CHAN_HELP_LOGOUT
Gebruik: LOGOUT kanaal nick
Dit commando zorgt ervoor dat de opgegeven nick niet meer
geidentificeerd is voor het opgegeven kanaal
Als je de stichter van het kanaal bent kan je iedereen
uitloggen, anders alleen jezelf.
NOTICE: In order to register a channel, you must have
first registered your nickname. If you haven't,
%R%s HELP for information on how to do so.
CHAN_HELP_DROP
Gebruik: DROP kanaal
Heft de registratie van het gegeven kanaal op. Kan alleen
gebruik wordt door de kanaalstichter, die eerst het
IDENTIFY commando moet gebruiken.
gebruik wordt door de kanaalstichter.
CHAN_HELP_SET
Gebruik: SET kanaal optie parameters
@@ -4257,7 +4270,6 @@ CHAN_HELP_SET
FOUNDER Stelt de stichter van het kanaal in
SUCCESSOR Stelt de opvolger van het kanaal in
PASSWORD Stelt het stichterwachtwoord in
DESC Stelt de kanaalbeschrijving in
URL Associeer een URL met het kanaal
EMAIL Associate een E-mail adres met het kanaal
@@ -4279,6 +4291,7 @@ CHAN_HELP_SET
KICK commando
TOPICLOCK Topic kan alleen veranderd worden met TOPIC
XOP Schakel het gebruikersprivilegesysteem om
PERSIST Set the channel as permanent
Type %R%S HELP option voor meer informatie over een
specifieke optie.
@@ -4301,12 +4314,6 @@ CHAN_HELP_SET_SUCCESSOR
er geen opvolger is ingesteld. De nieuwe nick moet een
geregistreerde nick zijn.
CHAN_HELP_SET_PASSWORD
Gebruik: SET kanaal PASSWORD wachtwoord
Stelt het wachtwoord in dat gebruikt wordt om de stichter
van het kanaal te identificeren.
CHAN_HELP_SET_DESC
Gebruik: SET kanaal DESC beschrijving
@@ -4489,6 +4496,29 @@ CHAN_HELP_SET_XOP
Het overschakelen van xOP lijsten naar het toegangslijsten
systeem brengt echter geen problemen met zich mee.
CHAN_HELP_SET_PERSIST
Syntax: SET channel PERSIST {ON | OFF}
Enables or disables the persistant channel setting.
When persistant is set, the service bot will remain
in the channel when it has emptied of users.
If your IRCd does not a permanent (persistant) channel
mode you must have a service bot in your channel to
set persist on, and it can not be unassigned while persist
is on.
If this network does not have BotServ enabled and does
not have a permanent channel mode, ChanServ will
join your channel when you set persist on (and leave when
it has been set off).
If your IRCd has a permanent (persistant) channel mode
and is is set or unset (for any reason, including MLOCK),
persist is automatically set and unset for the channel aswell.
Additionally, services will set or unset this mode when you
set persist on or off.
CHAN_HELP_SET_OPNOTICE
Gebruik: SET kanaal OPNOTICE {ON | OFF}
@@ -4497,6 +4527,45 @@ CHAN_HELP_SET_OPNOTICE
het kanaal sturen wanneer de OP of DEOP commando's worden
gebruikt voor een gebruiker in het kanaal.
CHAN_HELP_QOP
Syntax: QOP channel ADD nick
QOP channel DEL {nick | entry-num | list}
QOP channel LIST [mask | list]
QOP channel CLEAR
Maintains the QOP (AutoOwner) list for a channel. The QOP
list gives users the right to be auto-owner on your channel,
which gives them almost (or potentially, total) access.
The QOP ADD command adds the given nickname to the
QOP list.
The QOP DEL command removes the given nick from the
QOP list. If a list of entry numbers is given, those
entries are deleted. (See the example for LIST below.)
The QOP LIST command displays the QOP list. If
a wildcard mask is given, only those entries matching the
mask are displayed. If a list of entry numbers is given,
only those entries are shown; for example:
QOP #channel LIST 2-5,7-9
Lists QOP entries numbered 2 through 5 and
7 through 9.
The QOP CLEAR command clears all entries of the
QOP list.
The QOP commands are limited to
founders (unless SECUREOPS is off). However, any user on the
QOP list may use the QOP LIST command.
This command may have been disabled for your channel, and
in that case you need to use the access list. See
%R%S HELP ACCESS for information about the access list,
and %R%S HELP SET XOP to know how to toggle between
the access list and xOP list systems.
CHAN_HELP_AOP
Gebruik: AOP kanaal ADD nick
AOP kanaal DEL {nick | entry-nr | lijst}
@@ -4663,6 +4732,7 @@ CHAN_HELP_ACCESS
Gebruik: ACCESS kanaal ADD nick niveau
ACCESS kanaal DEL {nick | entry-nr | lijst}
ACCESS kanaal LIST [mask | lijst]
ACCESS kanaal VIEW [mask | lijst]
ACCESS kanaal CLEAR
Onderhoud de toegangslijst voor een kanaal. De toegangs-
@@ -4696,7 +4766,10 @@ CHAN_HELP_ACCESS
ACCESS #kanaal LIST 2-5,7-9
Geeft gebruikers 2 t/m 5 en 7 t/m 9 van de
toegangslijst weer.
The ACCESS VIEW command displays the access list similar
to ACCESS LIST but shows the creator and last used time.
Het ACCESS CLEAR commando maakt de toegangslijst leeg.
CHAN_HELP_ACCESS_LEVELS
@@ -4773,31 +4846,30 @@ CHAN_HELP_AKICK
The AKICK CLEAR commando maakt de AutoKick lijst leeg.
CHAN_HELP_LEVELS
Gebruik: LEVELS kanaal SET type niveau
Gebruik: LEVELS kanaal SET type [niveau|FOUNDER]
LEVELS kanaal {DIS | DISABLE} type
LEVELS kanaal LIST
LEVELS kanaal RESET
Het LEVELS commando staat precieze controle toe over de
betekenis van de numerieke toegangsniveaus die worden
gebruikt voor kanalen. Met dit commando kan je de toegangs-
niveaus defineren die benodigd zijn voor de meeste functies
van %S. (De SET FOUNDER en SET PASSWORD commando's zijn,
evenals dit commando, altijd gelimiteerd tot de stichter.)
The LEVELS command allows fine control over the meaning of
the numeric access levels used for channels. With this
command, you can define the access level required for most
of %S's functions. (The SET FOUNDER and this command
are always restricted to the channel founder.)
LEVELS SET staat toe om de toegangsniveaus voor functies
of een groep functies te veranderen. LEVELS DISABLE (of
kortweg DIS) schakelt een automatische functie uit, of
staat gebruik van de functie niet toe door iemand anders
dan de stichter.
LEVELS SET allows the access level for a function or group of
functions to be changed. LEVELS DISABLE (or DIS for short)
disables an automatic feature or disallows access to a
function by anyone, INCLUDING the founder (although, the founder
can always reenable it).
LEVELS LIST geeft de huidige levels voor elke functie of
groep van functies weer. LEVELS RESET stelt de niveaus in
op de standaardwaarden van een nieuw kanaal (zie
HELP ACCESS LEVELS).
LEVELS LIST shows the current levels for each function or
group of functions. LEVELS RESET resets the levels to the
default levels of a newly-created channel (see
HELP ACCESS LEVELS).
Voor een list van de opties en functies waarvan de niveaus
kunnen worden aangepast, zie HELP LEVELS DESC.
For a list of the features and functions whose levels can be
set, see HELP LEVELS DESC.
CHAN_HELP_LEVELS_DESC
De volgende optie-/functienamen worden begrepen. Let op dat
@@ -4931,10 +5003,10 @@ CHAN_HELP_INVITE
niveau 5 of hoger op het kanaal.
CHAN_HELP_UNBAN
Gebruik: UNBAN kanaal
Gebruik: UNBAN kanaal [nick]
Zorgt ervoor dat %S alle bans verwijdert die je ervan
belemmeren het gegeven kanaal te joinen.
Tells %S to remove all bans preventing you or the given
user from entering the given channel.
Standaard is dit gelimiteerd tot AOPs of degenen met
niveau 5 of hoger op het kanaal.
@@ -4996,16 +5068,6 @@ CHAN_HELP_GETKEY
Gebruik: GETKEY kanaal
Geef de key van het gegeven kanaal terug.
CHAN_HELP_SENDPASS
Gebruik: SENDPASS kanaal
Stuur het wachtwoord van het gegeven kanaal naar het email
adres gespecificeerd in NickServ voor de stichter van het
kanaal. Dit commando is erg bruikbaar om verloren wacht-
woorden terug te halen.
Kan gelimiteerd zijn tot IRC operators op sommige netwerken.
CHAN_SERVADMIN_HELP
@@ -5013,20 +5075,6 @@ CHAN_SERVADMIN_HELP
ze hoeven te indentificeren via een wachtwoord, en kunnen de
toegangs-, AKICK-, en niveau-lijsten bekijken voor elk kanaal.
CHAN_SERVADMIN_HELP_LOGOUT
Gebruik: LOGOUT kanaal [nick]
Dit kanaal zorgt ervoor dat de gegeven nick niet meer
geidentificeerd is voor het gegeven kanaal.
Als je de stichter van het kanaal bent kun je iedereen
uitloggen, anders kun je alleen jezelf uitloggen.
Als je een Services Operatorstrator bent kun je iedereen
uitloggen van elke kanaal zonder daar stichter-rechten te
hebben. Je kan ook het nick-paramenter weglaten: dit
zorgt ervoor dat iedereen uitgelogd zal worden.
CHAN_SERVADMIN_HELP_DROP
Gebruik: DROP kanaal
@@ -5049,8 +5097,8 @@ CHAN_SERVADMIN_HELP_SET_NOEXPIRE
CHAN_SERVADMIN_HELP_INFO
Services Operatorstrators kunnen het ALL parameter gebruiken
bij elk kanaal.
Services Operators with the chanserv/auspex permission can
use the ALL parameter with any channel.
CHAN_SERVADMIN_HELP_LIST
Gebruik: LIST trefbeeld [FORBIDDEN] [SUSPENDED] [NOEXPIRE]
@@ -6443,3 +6491,15 @@ OPER_UMODE_UNSUPPORTED
OPER_SUPER_ADMIN_NOT_ENABLED
SuperAdmin instelling is niet ingeschakeld in services.conf
OPER_HELP_SYNC
Syntax: SQLSYNC
This command syncs your databases with SQL. You should
only have to execute this command once, when you initially
import your databases into SQL.
OPER_HELP_CMD_SQLSYNC
SQLSYNC Import your databases to SQL
OPER_SYNC_UPDATING
Updating MySQL.
OPER_SYNC_UPDATED
Finished updating MySQL.
+249 -201
View File
@@ -14,7 +14,7 @@
#
###########################################################################
#
# (C) 2003-2009 Anope Team
# (C) 2003-2010 Anope Team
# Contact us at team@anope.org
#
# Please read COPYING and README for further details.
@@ -1108,6 +1108,24 @@ NICK_SENDPASS_LINE_5
NICK_SENDPASS_OK
Has³o do nicka %s zosta³o wys³ane.
# RESETPASS responses
NICK_RESETPASS_SYNTAX
RESETPASS nickname
NICK_RESETPASS_SUBJECT
Reset password request for %s
NICK_RESETPASS_MESSAGE
Hi,
You have requested to have the password for %s reset.
To reset your password, type %R%s CONFIRM %s
If you don't know why this mail is sent to you, please ignore it silently.
PLEASE DON'T ANSWER TO THIS MAIL!
%s administrators.
NICK_RESETPASS_COMPLETE
Password reset email for %s has been sent.
# SUSPEND responses
NICK_SUSPEND_SYNTAX
SUSPEND nick powód
@@ -1158,14 +1176,6 @@ NICK_ENTER_REG_CODE
Kod zosta³ wys³any na adres %s.
Napisz %R%s CONFIRM <kod>, aby dokoñczyæ procedurê rejestracji.
NICK_CONFIRM_NOT_FOUND
Termin wa¿no¶ci kodu rejestracyjnego up³yn±³.
Napisz: %R%s REGISTER <has³o> <email>,
aby znowu zacz±æ rejestracje.
NICK_CONFIRM_INVALID
Podano nieprawid³owy kod, sprawd¼ wiadomo¶æ e-mail i spróbowaæ ponownie.
NICK_REG_MAIL_SUBJECT
Rejestracja nicka %s
@@ -1192,6 +1202,20 @@ NICK_GETPASS_PASSCODE_IS
NICK_FORCE_REG
Nick %s potwierdzony.
NICK_CONFIRM_NOT_FOUND
Termin wa¿no¶ci kodu rejestracyjnego up³yn±³.
Napisz: %R%s REGISTER <has³o> <email>,
aby znowu zacz±æ rejestracje.
NICK_CONFIRM_INVALID
Podano nieprawid³owy kod, sprawd¼ wiadomo¶æ e-mail i spróbowaæ ponownie.
NICK_CONFIRM_EXPIRED
Your password reset request has expired.
NICK_CONFIRM_SUCCESS
You are now identified for your nick. Change your password using "%R%s SET PASSWORD newpassword" now.
###########################################################################
#
# ChanServ messages
@@ -1306,6 +1330,15 @@ CHAN_LEVEL_TOPIC
CHAN_LEVEL_INFO
Pozwala u¿ywaæ opcji ALL w komendzie INFO
CHAN_LEVEL_AUTOOWNER
Automatic mode +q
CHAN_LEVEL_OWNER
Allowed to use OWNER command
CHAN_LEVEL_OWNERME
Allowed to (de)owner him/herself
# Automatic responses
CHAN_IS_REGISTERED
Ten kana³ zosta³ zarejestrowany z %s.
@@ -1324,7 +1357,7 @@ CHAN_X_INVALID
# REGISTER responses
CHAN_REGISTER_SYNTAX
REGISTER kana³ has³o opis
REGISTER kana³ opis
CHAN_REGISTER_DISABLED
Rejestracja kana³ów jest tymczasowo wy³±czona.
@@ -1354,41 +1387,12 @@ CHAN_REGISTERED
Kana³ %s zosta³ teraz zarejestrowany.
Jako %s jeste¶ od teraz jego w³a¶cicielem.
CHAN_PASSWORD_IS
Has³o do Twojego kana³u to %s
CHAN_REGISTER_NONE_CHANNEL
Próbujesz rejestrowaæ nieistniej±cy kana³ %s
CHAN_SYMBOL_REQUIRED
U¿yj symboli # lub & podczas rejestracji
# IDENTIFY responses
CHAN_IDENTIFY_SYNTAX
IDENTIFY kana³ has³o
CHAN_IDENTIFY_FAILED
Identyfikacja nie powiod³a siê.
CHAN_IDENTIFY_SUCCEEDED
Has³o przyjête - masz uprawnienia w³a¶ciciela kana³u %s.
# LOGOUT responses
CHAN_LOGOUT_SYNTAX
LOGOUT kana³ nick
CHAN_LOGOUT_SERVADMIN_SYNTAX
LOGOUT kana³ [nick]
CHAN_LOGOUT_SUCCEEDED
U¿ytkownik %s zosta³ wylogowany z kana³u %s.
CHAN_LOGOUT_ALL_SUCCEEDED
Wylogowano zidentyfikowanych u¿ytkowników z kana³u %s (bez w³a¶ciciela).
CHAN_LOGOUT_FOUNDER_FAILED
Nie mo¿esz siê wylogowaæ z %s (jeste¶ w³a¶cicielem).
CHAN_LOGOUT_NOT_LOGGEDIN
U¿ytkownik %s nie by³ zalogowany na kanale %s.
# DROP responses
CHAN_DROP_SYNTAX
DROP kana³
@@ -1426,16 +1430,6 @@ CHAN_SUCCESSOR_UNSET
CHAN_SUCCESSOR_IS_FOUNDER
%s nie mo¿e byæ zastêpc± na kanale %s, poniewa¿ jest jego w³a¶cicielem.
# SET PASSWORD responses
CHAN_SET_PASSWORD_FAILED
Zmiana has³a nie powiod³a siê.
CHAN_PASSWORD_CHANGED
Has³o do kana³u %s zosta³o zmienione.
CHAN_PASSWORD_CHANGED_TO
Has³o do kana³u %s zosta³o zmienione na %s.
# SET DESC responses
CHAN_DESC_CHANGED
Opis kana³u %s zosta³ zmieniony na %s.
@@ -1599,6 +1593,14 @@ CHAN_SET_XOP_ON
CHAN_SET_XOP_OFF
System list xOP na kanale %s zosta³ wy³±czony.
# SET PERSISTANT responces
CHAN_SET_PERSIST_SYNTAX
SET channel PERSIST {ON | OFF}
CHAN_SET_PERSIST_ON
Channel %s is now persistant.
CHAN_SET_PERSIST_OFF
Channel %s is no longer persistant.
# SET NOEXPIRE responses
CHAN_SET_NOEXPIRE_SYNTAX
SET kana³ NOEXPIRE {ON | OFF}
@@ -1623,6 +1625,37 @@ CHAN_XOP_ACCESS
CHAN_XOP_NOT_AVAILABLE
System xOP nie jest dostêpny.
# QOP messages
CHAN_QOP_SYNTAX
QOP channel {ADD|DEL|LIST|CLEAR} [nick | entry-list]
CHAN_QOP_DISABLED
Sorry, channel QOP list modification is temporarily disabled.
CHAN_QOP_NICKS_ONLY
Channel QOP lists may only contain registered nicknames.
CHAN_QOP_ADDED
%s added to %s QOP list.
CHAN_QOP_MOVED
%s moved to %s QOP list.
CHAN_QOP_NO_SUCH_ENTRY
No such entry (#%d) on %s QOP list.
CHAN_QOP_NOT_FOUND
%s not found on %s QOP list.
CHAN_QOP_NO_MATCH
No matching entries on %s QOP list.
CHAN_QOP_DELETED
%s deleted from %s QOP list.
CHAN_QOP_DELETED_ONE
Deleted 1 entry from %s QOP list.
CHAN_QOP_DELETED_SEVERAL
Deleted %d entries from %s QOP list.
CHAN_QOP_LIST_EMPTY
%s QOP list is empty.
CHAN_QOP_LIST_HEADER
QOP list for %s:
Num Nick
CHAN_QOP_CLEAR
Channel %s QOP list has been cleared.
# AOP messages
CHAN_AOP_SYNTAX
AOP kana³ {ADD|DEL|LIST|CLEAR} [nick | pozycja]
@@ -1801,7 +1834,7 @@ CHAN_VOP_CLEAR
# ACCESS messages
CHAN_ACCESS_SYNTAX
ACCESS kana³ {ADD|DEL|LIST|CLEAR} [nick [poziom] | pozycja]
ACCESS kana³ {ADD|DEL|LIST|VIEW|CLEAR} [nick [poziom] | pozycja]
CHAN_ACCESS_XOP
Nie mo¿esz u¿yæ tej komendy.
@@ -1877,6 +1910,14 @@ CHAN_ACCESS_LIST_AXS_FORMAT
CHAN_ACCESS_CLEAR
Lista dostêpu kana³u %s zosta³a wyczyszczona.
CHAN_ACCESS_VIEW_XOP_FORMAT
%3d %s %s
by %s, last seen %s
CHAN_ACCESS_VIEW_AXS_FORMAT
%3d %4d %s
by %s, last seen %s
# AKICK responses
CHAN_AKICK_SYNTAX
AKICK kana³ {ADD | STICK | UNSTICK | DEL | LIST | VIEW | ENFORCE | CLEAR} [nick-lub-maska] [powód]
@@ -1955,6 +1996,9 @@ CHAN_LEVELS_CHANGED
Wymagany poziom dla %s
na kanale %s zmieniono teraz na %d.
CHAN_LEVELS_CHANGED_FOUNDER
Level for %s on channel %s changed to founder only.
CHAN_LEVELS_UNKNOWN
Nieznane ustawienie %s.
Napisz %R%s HELP LEVELS DESC, aby uzyskaæ listê dostêpnych mo¿liwo¶ci.
@@ -2075,6 +2119,9 @@ CHAN_INFO_OPT_TOPICLOCK
CHAN_INFO_OPT_XOP
XOP
CHAN_INFO_OPT_PERSIST
Persistant
CHAN_INFO_OPT_NONE
Brak
@@ -2111,14 +2158,20 @@ CHAN_INVITE_ALREADY_IN
Przebywasz ju¿ na kanale %s!
CHAN_INVITE_SUCCESS
Zosta³e¶ zaproszony do %s.
CHAN_INVITE_OTHER_SUCCESS
%s has been invited to %s.
# UNBAN responses
CHAN_UNBAN_SYNTAX
UNBAN kana³
UNBAN kana³ [nick]
CHAN_UNBANNED
Ban na kanale %s zosta³ zdjêty.
CHAN_UNBANNED_OTHER
%s has been unbanned from %s.
# TOPIC responses
CHAN_TOPIC_SYNTAX
TOPIC kana³ [temat]
@@ -2151,16 +2204,6 @@ CHAN_CLEARED_USERS
CHAN_CLEARED_INVITES
Wszystkie zaproszenia z kana³u %s zosta³y usuniête.
# GETPASS responses
CHAN_GETPASS_SYNTAX
GETPASS kana³
CHAN_GETPASS_UNAVAILABLE
Komenda GETPASS nie dzia³a, bo has³a s± szyfrowane.
CHAN_GETPASS_PASSWORD_IS
Has³o kana³u %s to %s.
# GETKEY responses
CHAN_GETKEY_SYNTAX
GETKEY kana³
@@ -2171,38 +2214,6 @@ CHAN_GETKEY_NOKEY
CHAN_GETKEY_KEY
Kluczem do kana³u %s jest %s.
# SENDPASS responses
CHAN_SENDPASS_SYNTAX
SENDPASS kana³
CHAN_SENDPASS_UNAVAILABLE
Komenda SENDPASS nie dzia³a, bo has³a s± szyfrowane.
CHAN_SENDPASS_SUBJECT
Has³o do kana³u %s
CHAN_SENDPASS_HEAD
Witaj!
CHAN_SENDPASS_LINE_1
Za¿±da³e¶(a¶) wys³ania has³a do kana³u %s na e-mail.
CHAN_SENDPASS_LINE_2
Twoje has³o to: %s.
Dla w³asnego bezpieczeñstwa nale¿y to has³o natychmiast zmieniæ na inne.
CHAN_SENDPASS_LINE_3
Je¶li nie wiesz dlaczego ta wiadomo¶æ dotar³a do Ciebie zignoruj j±. Je¶li ta sytuacja bêdzie siê powtarzaæ skontaktuj siê z administratorem sieci.
CHAN_SENDPASS_LINE_4
PROSZÊ NIE ODPOWIADAÆ NA T¡ WIADOMO¦Æ!
CHAN_SENDPASS_LINE_5
Administratorzy sieci %s.
CHAN_SENDPASS_OK
Has³o do kana³u %s zosta³o wys³ane.
# FORBID responses
CHAN_FORBID_SYNTAX
FORBID kana³ [powód]
@@ -2790,6 +2801,9 @@ BOT_UNASSIGN_SYNTAX
BOT_UNASSIGN_UNASSIGNED
Nie ma ¿adnych botów przydzielonych do %s.
BOT_UNASSIGN_PERSISTANT_CHAN
You can not unassign bots while persist is set on the channel.
# INFO responses
BOT_INFO_SYNTAX
INFO {kana³ | nick}
@@ -3861,9 +3875,6 @@ OPER_DEFCON_SYNTAX
OPER_DEFCON_DENIED
Serwisy s± w trybie defcon, spróbuj ponownie pó¼niej.
OPER_DEFCON_NO_CONF
System defcon musi byæ w³±czony w pliku konfiguracyjnym.
OPER_DEFCON_CHANGED
Serwisy s± teraz w systemie DEFCON %d
@@ -3889,6 +3900,12 @@ OPER_MODULE_REMOVE_FAIL
OPER_MODULE_NO_UNLOAD
Ten modu³ nie mo¿e zostaæ wy³adowany.
OPER_MODULE_ALREADY_LOADED
Module %s is already loaded.
OPER_MODULE_ISNT_LOADED
Module %s isn't loaded.
OPER_MODULE_LOAD_SYNTAX
MODLOAD nazwa-pliku
@@ -4951,6 +4968,12 @@ NICK_HELP_SENDPASS
Ta komenda w niektórych sieciach mo¿e byæ dostêpna
jedynie dla osób z uprawnieniami IRC operatora.
NICK_HELP_RESETPASS
Syntax: RESETPASS nickname
Sends a code key to the nickname with the instructions on how to
reset their password.
NICK_HELP_CONFIRM
Sk³adnia: CONFIRM kod
@@ -4960,6 +4983,14 @@ NICK_HELP_CONFIRM
adres e-mail podany podczas pierwszego kroku rejestracji.
Aby siê dowiedzieæ wiêcej wpisz %R%S HELP REGISTER
This is also used after the RESETPASS command has been used to
force identify you to your nick so you may change your password.
NICK_HELP_CONFIRM_OPER
Additionally, Services Operators with the nickserv/confirm permission can
replace passcode with a users nick to force validate them.
NICK_HELP_RESEND
Sk³adnia: RESEND
@@ -5109,12 +5140,12 @@ CHAN_HELP_CMD_STATUS
CHAN_HELP_CMD_REGISTER
REGISTER Rejestruje kana³
CHAN_HELP_CMD_IDENTIFY
IDENTIFY Identyfikuje w³a¶ciciela kana³u
CHAN_HELP_CMD_SET
SET Modyfikuje ustawienia kana³u
CHAN_HELP_CMD_QOP
QOP Modify the list of QOP users
CHAN_HELP_CMD_AOP
AOP Zarz±dza list± AOP (operatorów)
@@ -5133,9 +5164,6 @@ CHAN_HELP_CMD_AKICK
CHAN_HELP_CMD_DROP
DROP Usuwa kana³
CHAN_HELP_CMD_SENDPASS
SENDPASS Pomaga odzyskaæ utracone has³o
CHAN_HELP_CMD_BAN
BAN Banuje wskazan± osobê na kanale
@@ -5160,9 +5188,6 @@ CHAN_HELP_CMD_KICK
CHAN_HELP_CMD_LIST
LIST Listuje zarejestrowane kana³y pasuj±ce do wzorca
CHAN_HELP_CMD_LOGOUT
LOGOUT Wyloguje wskazan± osobê
CHAN_HELP_CMD_OP
OP Nadaje wskazanej osobie uprawnienia operatora
@@ -5170,7 +5195,7 @@ CHAN_HELP_CMD_TOPIC
TOPIC Zmienia temat podanego kana³u
CHAN_HELP_CMD_UNBAN
UNBAN Usuwa wszystkie bany blokuj±ce wej¶cie na kana³
UNBAN Remove all bans preventing a user from entering a channel
CHAN_HELP_CMD_VOICE
VOICE Nadaje wskazanej osobie prawo g³osu
@@ -5199,12 +5224,6 @@ CHAN_HELP_CMD_OWNER
CHAN_HELP_CMD_PROTECT
PROTECT Chroni wskazan± osobê
CHAN_HELP_CMD_ADMIN
ADMIN Chroni wskazan± osobê
CHAN_HELP_CMD_DEADMIN
DEADMIN Wy³±cza ochronê wskazanej osoby
CHAN_HELP_CMD_DEOP
DEOP Odbiera wskazanej osobie uprawnienia operatora
@@ -5228,49 +5247,30 @@ CHAN_HELP_EXPIRES
CHAN_HELP_REGISTER
Sk³adnia: REGISTER kana³ has³o opis
Rejestruje kana³ w bazie danych %S. Aby u¿yæ
tej komendy musisz byæ operatorem na kanale, który
chcesz zarejestrowaæ. Has³o umo¿liwia pó¼niejsz±
identyfikacjê jako w³a¶ciciel kana³u (IDENTIFY).
Ostatni parametr, który musi zostaæ podany, okre¶la
cel istnienia kana³u.
Po rejestracji kana³u stajesz siê jego w³a¶cicielem,
który mo¿e zmieniaæ wszystkie jego ustawienia.
%S automatycznie nadaje uprawnienia operatora
w³a¶cicielowi, który wchodzi na kana³. Informacje
na temat nadawania uprawnieñ innym u¿ytkownikom
znajduj± siê w pomocy polecenia ACCESS
(%R%S HELP ACCESS).
UWAGA: Aby zarejestrowaæ kana³ nale¿y posiadaæ
zarejestrowany nick, aby uzyskaæ wiêcej informacji
na temat zarz±dzania nickiem wpisz: %R%s HELP
Registers a channel in the %S database. In order
to use this command, you must first be a channel operator
on the channel you're trying to register.
The description, which must be included, is a
general description of the channel's purpose.
CHAN_HELP_IDENTIFY
Sk³adnia: IDENTIFY kana³ has³o
Autoryzuje u¿ytkownika w serwisie %S jako w³a¶ciciela
wskazanego kana³u. Wiele wa¿nych komend wymaga dokonania
identyfikacji przed ich u¿yciem. Has³em jest to samo
has³o, którego u¿yto przy komendzie REGISTER.
When you register a channel, you are recorded as the
"founder" of the channel. The channel founder is allowed
to change all of the channel settings for the channel;
%S will also automatically give the founder
channel-operator privileges when s/he enters the channel.
See the ACCESS command (%R%S HELP ACCESS) for
information on giving a subset of these privileges to
other channel users.
CHAN_HELP_LOGOUT
Sk³adnia: LOGOUT kana³ nick
Pozwala na wylogowanie wskazanego u¿ytkownika z kana³u.
W celu odzyskania uprawnieñ u¿ytkownik bêdzie musia³
ponownie siê zidentyfikowaæ.
Ka¿dy mo¿e wylogowaæ siebie, natomiast w³a¶ciciel kana³u
mo¿e wylogowaæ ka¿dego.
NOTICE: In order to register a channel, you must have
first registered your nickname. If you haven't,
%R%s HELP for information on how to do so.
CHAN_HELP_DROP
Sk³adnia: DROP kana³
Usuwa podany kana³. Komenda mo¿e zostaæ u¿yta
jedynie przez w³a¶ciciela kana³u, po wcze¶niejszej
IDENTIFYKACJI przy pomocy has³a kana³u.
jedynie przez w³a¶ciciela kana³u.
CHAN_HELP_SET
Sk³adnia: SET kana³ opcja parametry
@@ -5282,7 +5282,6 @@ CHAN_HELP_SET
FOUNDER Ustawia nick w³a¶ciciela kana³u
SUCCESSOR Ustawia nick spadkobiercy kana³u
PASSWORD Ustawia has³o w³a¶ciciela
DESC Ustawia opis kana³u
URL Przypisuje adres www do kana³u
EMAIL Przypisuje adres e-mail do kana³u
@@ -5304,6 +5303,7 @@ CHAN_HELP_SET
TOPICLOCK Ogranicza mo¿liwo¶æ zmiany tematu
XOP W³±cza system uprawnieñ xOP
(u¿ycie komend SOP, AOP, HOP, VOP)
PERSIST Set the channel as permanent
Aby uzyskaæ wiêcej informacji o danej opcji wpisz:
%R%S HELP SET opcja
@@ -5322,10 +5322,6 @@ CHAN_HELP_SET_SUCCESSOR
spadkobiercy, który staje siê nowym w³a¶cicielem.
Je¿eli spadkobierca jest w³a¶cicielem zbyt du¿ej
liczby kana³ów (%d) to kana³ zostanie odrejestrowany.
CHAN_HELP_SET_PASSWORD
Sk³adnia: SET kana³ PASSWORD has³o
Zmienia has³o w³a¶ciciela kana³u.
CHAN_HELP_SET_DESC
Sk³adnia: SET kana³ DESC opis
@@ -5505,7 +5501,29 @@ CHAN_HELP_SET_XOP
system XOP, je¶li definicje poziomów dostêpu dla
kana³u zosta³y wcze¶niej zmodyfikowane przy pomocy
polecenia LEVELS.
CHAN_HELP_SET_PERSIST
Syntax: SET channel PERSIST {ON | OFF}
Enables or disables the persistant channel setting.
When persistant is set, the service bot will remain
in the channel when it has emptied of users.
If your IRCd does not a permanent (persistant) channel
mode you must have a service bot in your channel to
set persist on, and it can not be unassigned while persist
is on.
If this network does not have BotServ enabled and does
not have a permanent channel mode, ChanServ will
join your channel when you set persist on (and leave when
it has been set off).
If your IRCd has a permanent (persistant) channel mode
and is is set or unset (for any reason, including MLOCK),
persist is automatically set and unset for the channel aswell.
Additionally, services will set or unset this mode when you
set persist on or off.
CHAN_HELP_SET_OPNOTICE
Sk³adnia: SET kana³ OPNOTICE {ON | OFF}
@@ -5515,6 +5533,45 @@ CHAN_HELP_SET_OPNOTICE
informowa³ u¿ytkowników przebywaj±cych na kanale,
kiedy zostanie u¿yta komenda OP lub DEOP.
CHAN_HELP_QOP
Syntax: QOP channel ADD nick
QOP channel DEL {nick | entry-num | list}
QOP channel LIST [mask | list]
QOP channel CLEAR
Maintains the QOP (AutoOwner) list for a channel. The QOP
list gives users the right to be auto-owner on your channel,
which gives them almost (or potentially, total) access.
The QOP ADD command adds the given nickname to the
QOP list.
The QOP DEL command removes the given nick from the
QOP list. If a list of entry numbers is given, those
entries are deleted. (See the example for LIST below.)
The QOP LIST command displays the QOP list. If
a wildcard mask is given, only those entries matching the
mask are displayed. If a list of entry numbers is given,
only those entries are shown; for example:
QOP #channel LIST 2-5,7-9
Lists QOP entries numbered 2 through 5 and
7 through 9.
The QOP CLEAR command clears all entries of the
QOP list.
The QOP commands are limited to
founders (unless SECUREOPS is off). However, any user on the
QOP list may use the QOP LIST command.
This command may have been disabled for your channel, and
in that case you need to use the access list. See
%R%S HELP ACCESS for information about the access list,
and %R%S HELP SET XOP to know how to toggle between
the access list and xOP list systems.
CHAN_HELP_AOP
Sk³adnia: AOP kana³ ADD nick
AOP kana³ DEL {nick | numer | lista}
@@ -5678,6 +5735,7 @@ CHAN_HELP_ACCESS
Sk³adnia: ACCESS kana³ ADD nick level
ACCESS kana³ DEL {nick | numer | list}
ACCESS kana³ LIST [maska | list]
ACCESS kana³ VIEW [maska | list]
ACCESS kana³ CLEAR
Polecenie pozwala na zarz±dzanie wpisami w kana³owej
@@ -5714,6 +5772,9 @@ CHAN_HELP_ACCESS
Wy¶wietli wpisy na li¶cie od numeru 2 do 5, oraz
od 7 do 9.
The ACCESS VIEW command displays the access list similar
to ACCESS LIST but shows the creator and last used time.
Polecenie ACCESS CLEAR usuwa wszystkie wpisy z listy.
CHAN_HELP_ACCESS_LEVELS
@@ -5794,31 +5855,30 @@ CHAN_HELP_AKICK
Polecenie AKICK CLEAR usuwa wszystkie wpisy z listy.
CHAN_HELP_LEVELS
Sk³adnia: LEVELS kana³ SET typ poziom
Sk³adnia: LEVELS kana³ SET typ [poziom|FOUNDER]
LEVELS kana³ {DIS | DISABLE} typ
LEVELS kana³ LIST
LEVELS kana³ RESET
Polecenie LEVELS umo¿liwia przypisywanie
uprawnieñ poszczególnym poziomom dostepu.
Przy u¿yciu tej komendy mo¿esz definiowaæ
poziomy dostêpu do wszystkich funkcji %S
(SET FOUNDER, SET PASSWORD oraz LEVELS
s± dostêpne tylko dla w³a¶ciciela kana³u).
The LEVELS command allows fine control over the meaning of
the numeric access levels used for channels. With this
command, you can define the access level required for most
of %S's functions. (The SET FOUNDER and this command
are always restricted to the channel founder.)
LEVELS SET pozwala zmieniæ przypisany poziom dla
okre¶lonej operacji lub ich grup. LEVELS DISABLE
(lub DIS w skrócie) wy³±cza okre¶lon± funkcjê lub
zastrzega dostêp do niej dla w³a¶ciciela kana³u.
LEVELS LIST wy¶wietla aktualnie ustalone poziomy
dla ka¿dej z operacji. LEVELS RESET przywraca
standardowe ustawienia poziomów dostêpu - identyczne
z tymi jakie ustawiane s± dla kana³u po jego
utworzeniu (zobacz HELP ACCESS LEVELS).
LEVELS SET allows the access level for a function or group of
functions to be changed. LEVELS DISABLE (or DIS for short)
disables an automatic feature or disallows access to a
function by anyone, INCLUDING the founder (although, the founder
can always reenable it).
Aby obejrzeæ spis wszystkich funkcji które mog±
zostaæ przypisane poziomom dostêpu, zobacz
HELP LEVELS DESC.
LEVELS LIST shows the current levels for each function or
group of functions. LEVELS RESET resets the levels to the
default levels of a newly-created channel (see
HELP ACCESS LEVELS).
For a list of the features and functions whose levels can be
set, see HELP LEVELS DESC.
CHAN_HELP_LEVELS_DESC
Poni¿ej znajduje siê lista wszystkich dostêpnych uprawnieñ.
@@ -5968,11 +6028,10 @@ CHAN_HELP_INVITE
dostêpu 5 lub wy¿szy.
CHAN_HELP_UNBAN
Sk³adnia: UNBAN kana³
Sk³adnia: UNBAN kana³ [nick]
Sprawia, ¿e %S zdejmie wszystkie bany, które
uniemo¿liwiaj± wydaj±cemu komendê wej¶cie na
wskazany kana³.
Tells %S to remove all bans preventing you or the given
user from entering the given channel.
Standardowo ta komenda jest dostêpna dla u¿ytkowników
wpisanych na listê AOP lub posiadaj±cych poziom
@@ -6029,16 +6088,6 @@ CHAN_HELP_GETKEY
Zwraca has³o wstêpu do wskazanego kana³u.
CHAN_HELP_SENDPASS
Sk³adnia: SENDPASS kana³
Wysy³a has³o do podanego kana³u na adres e-mail
przypisany do nicka w³a¶ciciela kana³u. Ta komenda
pomaga odzyskaæ zapomniane has³o.
Ta komenda w niektórych sieciach mo¿e byæ dostêpna
jedynie dla osób z uprawnieniami IRC operatora.
CHAN_SERVADMIN_HELP
Administratorzy serwisów mog± usun±æ ka¿dy kana³
@@ -6046,20 +6095,6 @@ CHAN_SERVADMIN_HELP
Mog± przegl±daæ listê dostêpu ka¿dego kana³u,
listê AKICK, ustawienia poziomów dostêpu itd.
CHAN_SERVADMIN_HELP_LOGOUT
Sk³adnia: LOGOUT kana³ nick
Pozwala na wylogowanie wskazanego u¿ytkownika z kana³u.
W celu odzyskania uprawnieñ u¿ytkownik bêdzie musia³
ponownie siê zidentyfikowaæ.
Ka¿dy mo¿e wylogowaæ siebie, natomiast w³a¶ciciel kana³u
mo¿e wylogowaæ ka¿dego.
Administrator serwisów mo¿e wylogowaæ dowoln± osobê
z dowolnego kana³u. Pominiêcie nicka powoduje wylogowanie
wszystkich zidentyfikowanych osób.
CHAN_SERVADMIN_HELP_DROP
Sk³adnia: DROP kana³
@@ -6080,7 +6115,8 @@ CHAN_SERVADMIN_HELP_SET_NOEXPIRE
CHAN_SERVADMIN_HELP_INFO
Administratorzy serwisów zawsze mog± u¿ywaæ parametru ALL.
Services Operators with the chanserv/auspex permission can
use the ALL parameter with any channel.
CHAN_SERVADMIN_HELP_LIST
Sk³adnia: LIST wzorzec [FORBIDDEN] [SUSPENDED] [NOEXPIRE]
@@ -7447,3 +7483,15 @@ OPER_UMODE_UNSUPPORTED
OPER_SUPER_ADMIN_NOT_ENABLED
Opcja SuperAdmin nie jest w³±czona w pliku konfiguracyjnym.
OPER_HELP_SYNC
Syntax: SQLSYNC
This command syncs your databases with SQL. You should
only have to execute this command once, when you initially
import your databases into SQL.
OPER_HELP_CMD_SQLSYNC
SQLSYNC Import your databases to SQL
OPER_SYNC_UPDATING
Updating MySQL.
OPER_SYNC_UPDATED
Finished updating MySQL.
+236 -178
View File
@@ -1,6 +1,6 @@
# Portuguese language file.
#
# (C) 2003-2008 Anope Team
# (C) 2003-2010 Anope Team
# Contact us at team@anope.org
#
# Please read COPYING and README for furhter details.
@@ -878,6 +878,24 @@ NICK_SENDPASS_LINE_5
NICK_SENDPASS_OK
Senha para %s foi enviada.
# RESETPASS responses
NICK_RESETPASS_SYNTAX
RESETPASS nickname
NICK_RESETPASS_SUBJECT
Reset password request for %s
NICK_RESETPASS_MESSAGE
Hi,
You have requested to have the password for %s reset.
To reset your password, type %R%s CONFIRM %s
If you don't know why this mail is sent to you, please ignore it silently.
PLEASE DON'T ANSWER TO THIS MAIL!
%s administrators.
NICK_RESETPASS_COMPLETE
Password reset email for %s has been sent.
# SUSPEND responses
NICK_SUSPEND_SYNTAX
SUSPEND nick motivo
@@ -915,10 +933,6 @@ NICK_IS_PREREG
Esse nick está aguardando um código de verificação por e-mail antes de completar o registro.
NICK_ENTER_REG_CODE
O passcode foi enviado para %s, por favor digite %R%s confirm <passcode> para completar o registro.
NICK_CONFIRM_NOT_FOUND
O primeiro passo do registro deve ter expirado, por favor use %R%s register <senha> <email> primeiro.
NICK_CONFIRM_INVALID
Um passcode inválido foi digitado, por favor verifique o e-mail e tente novamente
NICK_REG_MAIL_SUBJECT
Registro de nick (%s)
NICK_REG_MAIL_HEAD
@@ -938,6 +952,16 @@ NICK_GETPASS_PASSCODE_IS
NICK_FORCE_REG
Nick %s confirmado
# CONFIRM responses
NICK_CONFIRM_NOT_FOUND
O primeiro passo do registro deve ter expirado, por favor use %R%s register <senha> <email> primeiro.
NICK_CONFIRM_INVALID
Um passcode inválido foi digitado, por favor verifique o e-mail e tente novamente
NICK_CONFIRM_EXPIRED
Your password reset request has expired.
NICK_CONFIRM_SUCCESS
You are now identified for your nick
###########################################################################
#
# ChanServ messages
@@ -1017,6 +1041,12 @@ CHAN_LEVEL_TOPIC
Permitido o uso do comando TOPIC
CHAN_LEVEL_INFO
Permitido o uso do comando INFO com a opção ALL
CHAN_LEVEL_AUTOOWNER
Automatic mode +q
CHAN_LEVEL_OWNER
Allowed to use OWNER command
CHAN_LEVEL_OWNERME
Allowed to (de)owner him/herself
# Automatic responses
CHAN_IS_REGISTERED
@@ -1034,7 +1064,7 @@ CHAN_X_INVALID
# REGISTER responses
CHAN_REGISTER_SYNTAX
REGISTER canal senha descrição
REGISTER canal descrição
CHAN_REGISTER_DISABLED
Desculpe, o registro de canais está temporariamente desativado.
CHAN_REGISTER_NOT_LOCAL
@@ -1053,35 +1083,11 @@ CHAN_REGISTRATION_FAILED
Desculpe, o registro falhou.
CHAN_REGISTERED
O canal %s está registrado sob seu nick: %s
CHAN_PASSWORD_IS
A senha do seu canal é %s - guarde ela para uso posterior.
CHAN_REGISTER_NONE_CHANNEL
Você tentou registrar um canal não existente: %s
CHAN_SYMBOL_REQUIRED
Por favor use o símbolo # quando tentar registrar
# IDENTIFY responses
CHAN_IDENTIFY_SYNTAX
IDENTIFY canal senha
CHAN_IDENTIFY_FAILED
Desculpe, a identificação falhou.
CHAN_IDENTIFY_SUCCEEDED
Senha aceita - você está sendo reconhecido agora como dono do %s.
# LOGOUT responses
CHAN_LOGOUT_SYNTAX
LOGOUT canal nick
CHAN_LOGOUT_SERVADMIN_SYNTAX
LOGOUT canal [nick]
CHAN_LOGOUT_SUCCEEDED
Usuário %s foi desconectado do canal %s.
CHAN_LOGOUT_ALL_SUCCEEDED
Todos os usuários registrados foram desconectados do canal %s (except the channel founder).
CHAN_LOGOUT_FOUNDER_FAILED
You may not log out of %s (you are founder).
CHAN_LOGOUT_NOT_LOGGEDIN
%s was not logged into %s.
# DROP responses
CHAN_DROP_SYNTAX
DROP canal
@@ -1112,14 +1118,6 @@ CHAN_SUCCESSOR_UNSET
CHAN_SUCCESSOR_IS_FOUNDER
%s não pode ser o successor do canal %s porque ele é o founder.
# SET PASSWORD responses
CHAN_SET_PASSWORD_FAILED
Desculpe, a mudança de senha falhou.
CHAN_PASSWORD_CHANGED
A senha do %s foi alterada.
CHAN_PASSWORD_CHANGED_TO
A senha do %s foi alterada para %s.
# SET DESC responses
CHAN_DESC_CHANGED
Descrição do canal %s alterada para %s.
@@ -1251,6 +1249,14 @@ CHAN_SET_XOP_ON
CHAN_SET_XOP_OFF
Sistema de acesso xOP para %s está agora DESATIVADO.
# SET PERSISTANT responces
CHAN_SET_PERSIST_SYNTAX
SET channel PERSIST {ON | OFF}
CHAN_SET_PERSIST_ON
Channel %s is now persistant.
CHAN_SET_PERSIST_OFF
Channel %s is no longer persistant.
# SET NOEXPIRE responses
CHAN_SET_NOEXPIRE_SYNTAX
SET canal NOEXPIRE {ON | OFF}
@@ -1270,6 +1276,37 @@ CHAN_XOP_ACCESS
CHAN_XOP_NOT_AVAILABLE
xOP system is not available.
# QOP messages
CHAN_QOP_SYNTAX
QOP channel {ADD|DEL|LIST|CLEAR} [nick | entry-list]
CHAN_QOP_DISABLED
Sorry, channel QOP list modification is temporarily disabled.
CHAN_QOP_NICKS_ONLY
Channel QOP lists may only contain registered nicknames.
CHAN_QOP_ADDED
%s added to %s QOP list.
CHAN_QOP_MOVED
%s moved to %s QOP list.
CHAN_QOP_NO_SUCH_ENTRY
No such entry (#%d) on %s QOP list.
CHAN_QOP_NOT_FOUND
%s not found on %s QOP list.
CHAN_QOP_NO_MATCH
No matching entries on %s QOP list.
CHAN_QOP_DELETED
%s deleted from %s QOP list.
CHAN_QOP_DELETED_ONE
Deleted 1 entry from %s QOP list.
CHAN_QOP_DELETED_SEVERAL
Deleted %d entries from %s QOP list.
CHAN_QOP_LIST_EMPTY
%s QOP list is empty.
CHAN_QOP_LIST_HEADER
QOP list for %s:
Num Nick
CHAN_QOP_CLEAR
Channel %s QOP list has been cleared.
# AOP messages
CHAN_AOP_SYNTAX
AOP canal {ADD|DEL|LIST|CLEAR} [nick | entrada]
@@ -1396,7 +1433,7 @@ CHAN_VOP_CLEAR
# ACCESS messages
CHAN_ACCESS_SYNTAX
ACCESS canal {ADD|DEL|LIST|CLEAR} [nick [nível] | lista-entradas]
ACCESS canal {ADD|DEL|LIST|VIEW|CLEAR} [nick [nível] | lista-entradas]
CHAN_ACCESS_XOP
Você não pode usar este comando.
Ao invés, use os comandos VOP, HOP, AOP e SOP.
@@ -1446,6 +1483,12 @@ CHAN_ACCESS_LIST_AXS_FORMAT
%3d %4d %s
CHAN_ACCESS_CLEAR
Lista de acesso do canal %s apagada.
CHAN_ACCESS_VIEW_XOP_FORMAT
%3d %s %s
by %s, last seen %s
CHAN_ACCESS_VIEW_AXS_FORMAT
%3d %4d %s
by %s, last seen %s
# AKICK responses
CHAN_AKICK_SYNTAX
@@ -1500,6 +1543,8 @@ CHAN_LEVELS_RANGE
O nível deve ser entre %d e %d inclusive.
CHAN_LEVELS_CHANGED
Nível para %s no canal %s alterado para %d.
CHAN_LEVELS_CHANGED_FOUNDER
Level for %s on channel %s changed to founder only.
CHAN_LEVELS_UNKNOWN
Level %s desconhecido. Digite %R%s HELP LEVELS DESC para uma lista de Levels válidos.
CHAN_LEVELS_DISABLED
@@ -1582,6 +1627,8 @@ CHAN_INFO_OPT_TOPICLOCK
Trava de tópico
CHAN_INFO_OPT_XOP
Sistema de acesso xOP
CHAN_INFO_OPT_PERSIST
Persistant
CHAN_INFO_OPT_NONE
Nenhuma
CHAN_INFO_MODE_LOCK
@@ -1610,12 +1657,17 @@ CHAN_INVITE_ALREADY_IN
You are already in %s!
CHAN_INVITE_SUCCESS
You have been invited to %s.
CHAN_INVITE_OTHER_SUCCESS
%s has been invited to %s.
# UNBAN responses
CHAN_UNBAN_SYNTAX
UNBAN canal
UNBAN canal [nick]
CHAN_UNBANNED
Você não está mais banido do %s.
CHAN_UNBANNED_OTHER
%s has been unbanned from %s.
# TOPIC responses
CHAN_TOPIC_SYNTAX
@@ -1641,14 +1693,6 @@ CHAN_CLEARED_USERS
CHAN_CLEARED_INVITES
Todos os Invites do canal %s foram removidos.
# GETPASS responses
CHAN_GETPASS_SYNTAX
GETPASS canal
CHAN_GETPASS_UNAVAILABLE
Comando GETPASS indisponível: modo de encriptação em uso.
CHAN_GETPASS_PASSWORD_IS
Senha do canal %s é %s.
# GETKEY responses
CHAN_GETKEY_SYNTAX
GETKEY canal
@@ -1657,28 +1701,6 @@ CHAN_GETKEY_NOKEY
CHAN_GETKEY_KEY
Key for channel %s is %s.
# SENDPASS responses
CHAN_SENDPASS_SYNTAX
SENDPASS canal
CHAN_SENDPASS_UNAVAILABLE
Comando SENDPASS indisponível: modo de encriptação em uso.
CHAN_SENDPASS_SUBJECT
Senha do canal (%s)
CHAN_SENDPASS_HEAD
Olá,
CHAN_SENDPASS_LINE_1
Você pediu para receber a senha do canal %s por e-mail.
CHAN_SENDPASS_LINE_2
A senha é %s. Por motivos de segurança, recomendamos que você mude a senha assim que receber este e-mail.
CHAN_SENDPASS_LINE_3
Se você não sabe porque este e-mail lhe foi enviado, por favor ignore-o.
CHAN_SENDPASS_LINE_4
POR FAVOR NÃO RESPONDA ESTE E-MAIL!
CHAN_SENDPASS_LINE_5
Administradores do %s.
CHAN_SENDPASS_OK
Senha do canal %s foi enviada.
# FORBID responses
CHAN_FORBID_SYNTAX
FORBID canal [motivo]
@@ -2119,6 +2141,8 @@ BOT_UNASSIGN_SYNTAX
UNASSIGN canal
BOT_UNASSIGN_UNASSIGNED
Não possui mais nenhum bot associado ao canal %s.
BOT_UNASSIGN_PERSISTANT_CHAN
You can not unassign bots while persist is set on the channel.
# INFO responses
BOT_INFO_SYNTAX
@@ -2905,8 +2929,6 @@ OPER_DEFCON_SYNTAX
DEFCON [1|2|3|4|5]
OPER_DEFCON_DENIED
Este serviço está temporariamente desabilitado, por favor tente novamente mais tarde
OPER_DEFCON_NO_CONF
O sistema Defcon deve estar habilitado no arquivo services.conf
OPER_DEFCON_CHANGED
Services estão agora em DEFCON %d
OPER_DEFCON_WALL
@@ -2926,6 +2948,10 @@ OPER_MODULE_REMOVE_FAIL
Impossível remover o módulo %s
OPER_MODULE_NO_UNLOAD
This module can not be unloaded.
OPER_MODULE_ALREADY_LOADED
Module %s is already loaded.
OPER_MODULE_ISNT_LOADED
Module %s isn't loaded.
OPER_MODULE_LOAD_SYNTAX
MODLOAD NomeDoArquivo
OPER_MODULE_UNLOAD_SYNTAX
@@ -3887,6 +3913,12 @@ NICK_HELP_SENDPASS
Poder ser limitado a Operadores de IRC em algumas redes.
NICK_HELP_RESETPASS
Syntax: RESETPASS nickname
Sends a codekey to the nickname with the instructions on how to
reset their psasword.
NICK_HELP_CONFIRM
Syntax: CONFIRM passcode
@@ -3896,6 +3928,14 @@ NICK_HELP_CONFIRM
is sent to your e-mail address in the first step of the
registration process. For more information about the first
stage of the registration process, type: %R%S HELP REGISTER
This is also used after the RESETPASS command has been used to
force identify you to your nick so you may change your password.
NICK_HELP_CONFIRM_OPER
Additionally, Services Operators with the nickserv/confirm permission can
replace passcode with a users nick to force validate them.
NICK_HELP_RESEND
Syntax: RESEND
@@ -4036,10 +4076,10 @@ CHAN_HELP_CMD_STATUS
STATUS Fornece o atual nível de acesso de um usuário em um canal
CHAN_HELP_CMD_REGISTER
REGISTER Registra um canal
CHAN_HELP_CMD_IDENTIFY
IDENTIFY Identifica seu nick
CHAN_HELP_CMD_SET
SET Ajusta as opções e informações do canal
CHAN_HELP_CMD_QOP
QOP Modify the list of QOP users
CHAN_HELP_CMD_AOP
AOP Modifica a lista de AOP (AutoOP) de um canal
CHAN_HELP_CMD_SOP
@@ -4052,8 +4092,6 @@ CHAN_HELP_CMD_AKICK
AKICK Faz a manutenção da Lista de Autokick
CHAN_HELP_CMD_DROP
DROP Cancela o registro de um canal
CHAN_HELP_CMD_SENDPASS
SENDPASS Ajuda para recuperar senhas
CHAN_HELP_CMD_BAN
BAN Bane o nick selecionado em um canal
CHAN_HELP_CMD_CLEAR
@@ -4070,14 +4108,12 @@ CHAN_HELP_CMD_KICK
KICK Kicka (expulsa) um nick de um canal
CHAN_HELP_CMD_LIST
LIST Lista todos os canais registrados que combinam com o padrão fornecido
CHAN_HELP_CMD_LOGOUT
LOGOUT Desconecta um determinado nick
CHAN_HELP_CMD_OP
OP Atribui status de OP a um nick no canal
CHAN_HELP_CMD_TOPIC
TOPIC Modifica o tópico de um canal
CHAN_HELP_CMD_UNBAN
UNBAN Remove todos os bans permitindo que você entre em um canal
UNBAN Remove all bans preventing a user from entering a channel
CHAN_HELP_CMD_VOICE
VOICE Atribui status de Voice a um nick no canal
CHAN_HELP_CMD_VOP
@@ -4096,10 +4132,6 @@ CHAN_HELP_CMD_OWNER
OWNER Concede-lhe status de Owner no canal
CHAN_HELP_CMD_PROTECT
PROTECT Protege um determinado nick no canal
CHAN_HELP_CMD_ADMIN
ADMIN Protege um determinado nick no canal
CHAN_HELP_CMD_DEADMIN
DEADMIN Desprotege um determinado nick no canal
CHAN_HELP_CMD_DEOP
DEOP Retira o status de OP de um nick no canal
@@ -4121,53 +4153,32 @@ CHAN_HELP_EXPIRES
automaticamente cancelado o seu registro.
CHAN_HELP_REGISTER
Sintaxe: REGISTER canal senha descrição
Sintaxe: REGISTER canal descrição
Registra um canal no banco de dados do %S sob seu nick.
Para utilizar este comando, você deve primeiro ser OP
do canal que está tentando registrar.
A senha é usada com o comando IDENTIFY para permitir
que outras pessoas façam alterações nas configurações do
canal. O último parâmetro, que deve ser incluído, é uma
descrição geral da finalidade do canal.
Quando você registra um canal, você é gravado como "fundador"
do mesmo. Ao fundador do canal é permitido alterar todas as
configurações do mesmo; %S irá dar automaticamente ao fundador
privilégios de Operador de Canal quando ele entrar no canal.
Veja o comando ACCESS (%R%S HELP ACCESS) para
informação sobre como liberar uma parte dos seus privilégios
a outros usuários do canal.
IMPORTANTE: Para registrar um canal, você deve antes ter
registrado seu nick. Se ainda não tiver seu nick registrado,
digite %R%s HELP para mais informações de como fazê-lo.
Registers a channel in the %S database. In order
to use this command, you must first be a channel operator
on the channel you're trying to register.
The description, which must be included, is a
general description of the channel's purpose.
CHAN_HELP_IDENTIFY
Sintaxe: IDENTIFY canal senha
Identifica você no %S como fundador do canal fornecido.
Muitos comandos exigem que você use este comando antes
de usá-los. A senha deverá ser a mesma usada por você
no comando REGISTER.
CHAN_HELP_LOGOUT
Sintaxe: LOGOUT canal nick
Este comando faz com que um determinado nick seja des-identificado
do canal, fazendo com que seja necessário ele se identificar
novamente para recuperar seu acesso.
Se você for o Founder do canal, pode usar este comando em
qualquer usuário e em si mesmo.
When you register a channel, you are recorded as the
"founder" of the channel. The channel founder is allowed
to change all of the channel settings for the channel;
%S will also automatically give the founder
channel-operator privileges when s/he enters the channel.
See the ACCESS command (%R%S HELP ACCESS) for
information on giving a subset of these privileges to
other channel users.
NOTICE: In order to register a channel, you must have
first registered your nickname. If you haven't,
%R%s HELP for information on how to do so.
CHAN_HELP_DROP
Sintaxe: DROP canal
Cancela o registro do canal. So poderá ser usado pelo
fundador do canal, que primeiramente deverá estar
identificado com o NickServ.
fundador do canal.
CHAN_HELP_SET
Sintaxe: SET canal opção parâmetros
@@ -4179,7 +4190,6 @@ CHAN_HELP_SET
FOUNDER Ajusta o fundador do canal
SUCCESSOR Ajusta o sucessor do canal
PASSWORD Ajusta a senha do founder
DESC Ajusta a descrição do canal
URL Associa uma URL a um canal
EMAIL Associa um E-mail a um canal
@@ -4198,6 +4208,7 @@ CHAN_HELP_SET
SIGNKICK Assinatura dos kicks feitos pelo comando KICK
OPNOTICE Envia uma notice quando os comandos OP/DEOP são usados
XOP Altera o sistema de privilégio de usuário
PERSIST Set the channel as permanent
Digite %R%S HELP SET opção para maiores informações
sobre uma opção em particular.
@@ -4218,12 +4229,6 @@ CHAN_HELP_SET_SUCCESSOR
(%d), o canal será dropado, como se nenhum sucessor tivesse
sido ajustado. O novo nick deverá estar registrado.
CHAN_HELP_SET_PASSWORD
Sintaxe: SET canal PASSWORD senha
Ajusta a senha utilizada para identificação do
fundador do canal.
CHAN_HELP_SET_DESC
Sintaxe: SET canal DESC descrição
@@ -4403,6 +4408,29 @@ CHAN_HELP_SET_XOP
Entretanto, mudar do sistema de listas xOP para sistema de lista
de acesso não causa problemas.
CHAN_HELP_SET_PERSIST
Syntax: SET channel PERSIST {ON | OFF}
Enables or disables the persistant channel setting.
When persistant is set, the service bot will remain
in the channel when it has emptied of users.
If your IRCd does not a permanent (persistant) channel
mode you must have a service bot in your channel to
set persist on, and it can not be unassigned while persist
is on.
If this network does not have BotServ enabled and does
not have a permanent channel mode, ChanServ will
join your channel when you set persist on (and leave when
it has been set off).
If your IRCd has a permanent (persistant) channel mode
and is is set or unset (for any reason, including MLOCK),
persist is automatically set and unset for the channel aswell.
Additionally, services will set or unset this mode when you
set persist on or off.
CHAN_HELP_SET_OPNOTICE
Sintaxe: SET canal OPNOTICE {ON | OFF}
@@ -4411,6 +4439,45 @@ CHAN_HELP_SET_OPNOTICE
o canal sempre que os comandos OP ou DEOP forem usados em um
usuário no canal.
CHAN_HELP_QOP
Syntax: QOP channel ADD nick
QOP channel DEL {nick | entry-num | list}
QOP channel LIST [mask | list]
QOP channel CLEAR
Maintains the QOP (AutoOwner) list for a channel. The QOP
list gives users the right to be auto-owner on your channel,
which gives them almost (or potentially, total) access.
The QOP ADD command adds the given nickname to the
QOP list.
The QOP DEL command removes the given nick from the
QOP list. If a list of entry numbers is given, those
entries are deleted. (See the example for LIST below.)
The QOP LIST command displays the QOP list. If
a wildcard mask is given, only those entries matching the
mask are displayed. If a list of entry numbers is given,
only those entries are shown; for example:
QOP #channel LIST 2-5,7-9
Lists QOP entries numbered 2 through 5 and
7 through 9.
The QOP CLEAR command clears all entries of the
QOP list.
The QOP commands are limited to
founders (unless SECUREOPS is off). However, any user on the
QOP list may use the QOP LIST command.
This command may have been disabled for your channel, and
in that case you need to use the access list. See
%R%S HELP ACCESS for information about the access list,
and %R%S HELP SET XOP to know how to toggle between
the access list and xOP list systems.
CHAN_HELP_AOP
Sintaxe: AOP canal ADD nick
AOP canal DEL {nick | entrada | lista-entradas}
@@ -4567,6 +4634,7 @@ CHAN_HELP_ACCESS
Sintaxe: ACCESS canal ADD nick nível
ACCESS canal DEL {nick | entrada | lista-entradas}
ACCESS canal LIST [máscara | lista-entradas]
ACCESS canal VIEW [máscara | lista-entradas]
ACCESS canal CLEAR
Faz manutenção da lista de acesso de um canal. A lista
@@ -4600,6 +4668,9 @@ CHAN_HELP_ACCESS
ACCESS #canal LIST 2-5,7-9
Lista as entradas de acesso numeradas de 2 a 5 e de 7 a 9.
The ACCESS VIEW command displays the access list similar
to ACCESS LIST but shows the creator and last used time.
O comando ACCESS CLEAR limpa todas as entradas da lista
de acesso.
@@ -4675,29 +4746,30 @@ CHAN_HELP_AKICK
de AutoKick.
CHAN_HELP_LEVELS
Sintaxe: LEVELS canal SET tipo nível
Sintaxe: LEVELS canal SET tipo [nível|FOUNDER]
LEVELS canal {DIS | DISABLE} tipo
LEVELS canal LIST
LEVELS canal RESET
O comando LEVELS permite ajuste detalhado sobre o
significado dos níveis de acesso numéricos usados pelos
canais. Com esse comando, você pode definir o nível de
acesso requerido pela maioria das funções do %S.
(Os comandos SET FOUNDER e SET PASSWORD, assim como
este comando, são sempre restritos ao Fundador do canal).
The LEVELS command allows fine control over the meaning of
the numeric access levels used for channels. With this
command, you can define the access level required for most
of %S's functions. (The SET FOUNDER and this command
are always restricted to the channel founder.)
LEVELS SET permite que o nível de acesso para uma função ou
grupo de funções seja alterado. LEVELS DISABLE (ou DIS
para encurtar) desabilita um recurso automático ou não permite
o acesso a funções para qualquer um que não seja o Fundador
do canal. LEVELS LIST mostra os níveis atuais para cada
função ou para um grupo de funções. LEVELS RESET recoloca
os níveis de acordo com o padrão de um canal recém-criado
(veja HELP ACCESS LEVELS).
LEVELS SET allows the access level for a function or group of
functions to be changed. LEVELS DISABLE (or DIS for short)
disables an automatic feature or disallows access to a
function by anyone, INCLUDING the founder (although, the founder
can always reenable it).
Para lista de recursos e funções cujos níveis podem ser
ajustados, veja HELP LEVELS DESC.
LEVELS LIST shows the current levels for each function or
group of functions. LEVELS RESET resets the levels to the
default levels of a newly-created channel (see
HELP ACCESS LEVELS).
For a list of the features and functions whose levels can be
set, see HELP LEVELS DESC.
CHAN_HELP_LEVELS_DESC
Os seguintes nomes de recursos/funções são entendidos.
@@ -4834,10 +4906,10 @@ CHAN_HELP_INVITE
nível de acesso 5 ou superior no canal.
CHAN_HELP_UNBAN
Sintaxe: UNBAN #canal
Sintaxe: UNBAN #canal [nick]
Diz ao %S para remover todos os bans permitindo que
você entre em um canal.
Tells %S to remove all bans preventing you or the given
user from entering the given channel.
Por padrão, é limitado aos AOPs ou àqueles que possuem
nível de acesso 5 ou superior no canal.
@@ -4897,17 +4969,6 @@ CHAN_HELP_GETKEY
Sintaxe: GETKEY canal
Retorna a key (do modo +k) de um determinado canal.
CHAN_HELP_SENDPASS
Sintaxe: SENDPASS canal
Envia a senha de um determinado canal para o fundador
do mesmo, usando o e-mail gravado no nick dele. Este
comando é realmente útil quando se trata de senhas
perdidas.
Pode estar limitado aos Operadores de IRC em
algumas Redes.
CHAN_SERVADMIN_HELP
@@ -4915,22 +4976,6 @@ CHAN_SERVADMIN_HELP
DROP mesmo sem se identificarem como donos do canal, e podem
também ver as listas de acesso, AKICK, e níveis de qualquer
canal.
CHAN_SERVADMIN_HELP_LOGOUT
Sintaxe: LOGOUT canal [nick]
Este comando faz com que um determinado nick seja des-identificado
do canal, fazendo com que seja necessário ele se identificar
novamente para recuperar seu acesso.
Se você for o Founder do canal, pode usar este comando em
qualquer usuário e em si mesmo.
Se você for um Administrador dos Services, poderá
desconectar qualquer um de qualquer canal sem precisar
ser o Founder dos mesmos. Além disso, você pode omitir
o parâmetro nick; com isso, irá des-identificar todos
os usuários registrados do canal.
CHAN_SERVADMIN_HELP_DROP
Sintaxe: DROP canal
@@ -4954,7 +4999,8 @@ CHAN_SERVADMIN_HELP_SET_NOEXPIRE
CHAN_SERVADMIN_HELP_INFO
Administradores de Services podem usar o comando ALL com qualquer canal.
Services Operators with the chanserv/auspex permission can
use the ALL parameter with any channel.
CHAN_SERVADMIN_HELP_LIST
Sintaxe: LIST padrão [FORBIDDEN] [SUSPENDED] [NOEXPIRE]
@@ -6291,3 +6337,15 @@ OPER_UMODE_UNSUPPORTED
OPER_SUPER_ADMIN_NOT_ENABLED
Opção SuperAdmin não habilitada no arquivo services.conf
OPER_HELP_SYNC
Syntax: SQLSYNC
This command syncs your databases with SQL. You should
only have to execute this command once, when you initially
import your databases into SQL.
OPER_HELP_CMD_SQLSYNC
SQLSYNC Import your databases to SQL
OPER_SYNC_UPDATING
Updating MySQL.
OPER_SYNC_UPDATED
Finished updating MySQL.
+235 -179
View File
@@ -1,6 +1,6 @@
# Russian language file for Anope
#
# (C) 2003-2008 Anope Team
# (C) 2003-2010 Anope Team
# Contact us at team@anope.org
#
# Please read COPYING and README for further details.
@@ -860,6 +860,24 @@ NICK_SENDPASS_LINE_5
NICK_SENDPASS_OK
Ïàðîëü äëÿ íèêà %s áûë âûñëàí íà åãî email-àäðåñ.
# RESETPASS responses
NICK_RESETPASS_SYNTAX
RESETPASS nickname
NICK_RESETPASS_SUBJECT
Reset password request for %s
NICK_RESETPASS_MESSAGE
Hi,
You have requested to have the password for %s reset.
To reset your password, type %R%s CONFIRM %s
If you don't know why this mail is sent to you, please ignore it silently.
PLEASE DON'T ANSWER TO THIS MAIL!
%s administrators.
NICK_RESETPASS_COMPLETE
Password reset email for %s has been sent.
# SUSPEND responses
NICK_SUSPEND_SYNTAX
SUSPEND íèê ïðè÷èíà
@@ -897,10 +915,6 @@ NICK_IS_PREREG
Ýòîò íèê îæèäàåò ïîäòâåðæäåíèÿ ÷åðåç e-mail ïåðåä çàâåðøåíèåì ðåãèñòðàöèè.
NICK_ENTER_REG_CODE
Auth-êîä áûë âûñëàí íà %s, äëÿ çàâåðøåíèÿ ðåãèñòðàöèè èñïîëüçóéòå êîìàíäó %R%s confirm auth-êîä
NICK_CONFIRM_NOT_FOUND
Âðåìÿ ïåðâîé ÷àñòè ðåãèñòðàöèè èñòåêëî, âîñïîëüçóéòåñü êîìàíäîé "%R%s register <ïàðîëü> <email>"
NICK_CONFIRM_INVALID
Áûë ââåäåí íåâåðíûé auth-êîä, ïîæàëóéñòà, ïðîâåðüòå âàø e-mail ñíîâà è ïîïðîáóéòå åùå ðàç.
NICK_REG_MAIL_SUBJECT
Ðåãèñòðàöèÿ íèêà %s
NICK_REG_MAIL_HEAD
@@ -920,6 +934,15 @@ NICK_GETPASS_PASSCODE_IS
NICK_FORCE_REG
Ðåãèñòðàöèÿ íèêà %s ïîäòâåðæäåíà.
NICK_CONFIRM_NOT_FOUND
Âðåìÿ ïåðâîé ÷àñòè ðåãèñòðàöèè èñòåêëî, âîñïîëüçóéòåñü êîìàíäîé "%R%s register <ïàðîëü> <email>"
NICK_CONFIRM_INVALID
Áûë ââåäåí íåâåðíûé auth-êîä, ïîæàëóéñòà, ïðîâåðüòå âàø e-mail ñíîâà è ïîïðîáóéòå åùå ðàç.
NICK_CONFIRM_EXPIRED
Your password reset request has expired.
NICK_CONFIRM_SUCCESS
You are now identified for your nick. Change your password using "%R%s SET PASSWORD newpassword" now.
###########################################################################
#
# ChanServ messages
@@ -999,6 +1022,12 @@ CHAN_LEVEL_TOPIC
Óðîâåíü äîñòóïà ê êîìàíäå TOPIC
CHAN_LEVEL_INFO
Óðîâåíü äîñòóïà ê êîìàíäå INFO ñ ïàðàìåòðîì ALL
CHAN_LEVEL_AUTOOWNER
Automatic mode +q
CHAN_LEVEL_OWNER
Allowed to use OWNER command
CHAN_LEVEL_OWNERME
Allowed to (de)owner him/herself
# Automatic responses
CHAN_IS_REGISTERED
@@ -1014,7 +1043,7 @@ CHAN_X_INVALID
# REGISTER responses
CHAN_REGISTER_SYNTAX
REGISTER #êàíàë ïàðîëü îïèñàíèå
REGISTER #êàíàë îïèñàíèå
CHAN_REGISTER_DISABLED
Èçâèíèòå, ðåãèñòðàöèÿ êàíàëîâ âðåìåííî ïðèîñòàíîâëåíà.
CHAN_REGISTER_NOT_LOCAL
@@ -1033,36 +1062,11 @@ CHAN_REGISTRATION_FAILED
Èçâèíèòå, íî çàðåãèñòðèðîâàòü êàíàë íåóäàëîñü.
CHAN_REGISTERED
Êàíàë %s óñïåøíî çàðåãèñòðèðîâàí íà íèê %s
CHAN_PASSWORD_IS
Ïàðîëü îò âàøåãî êàíàëà - %s - çàïîìíèòå åãî äëÿ äàëüíåéøåãî èñïîëüçîâàíèÿ.
CHAN_REGISTER_NONE_CHANNEL
Âû ïûòàåòåñü çàðåãèñòðèðîâàòü íåñóùåñòâóþùèé êàíàë %s
CHAN_SYMBOL_REQUIRED
Âû äîëæíû óêàçàòü ñèìâîë # ïåðåä íàçâàíèåì êàíàëà.
# IDENTIFY responses
CHAN_IDENTIFY_SYNTAX
IDENTIFY #êàíàë ïàðîëü
CHAN_IDENTIFY_FAILED
Èçâèíèòå, íî ïðîèçâåñòè èäåíòèôèêàöèþ íåóäàëîñü.
CHAN_IDENTIFY_SUCCEEDED
Ïàðîëü ïðèíÿò, òåïåðü âàø óðîâåíü äîñòóïà íà êàíàëå %s - âëàäåëåö.
CHAN_LOGOUT_FOUNDER_FAILED
Âû íå ìîæåòå äåèäåíòèôèöèðîâàòü ñåáÿ îòíîñòèòåëüíî êàíàëà %s ò.ê. âû åãî ðåàëüíûé âëàäåëåö.
CHAN_LOGOUT_NOT_LOGGEDIN
%s was not logged into %s.
# LOGOUT responses
CHAN_LOGOUT_SYNTAX
LOGOUT #êàíàë íèê
CHAN_LOGOUT_SERVADMIN_SYNTAX
LOGOUT #êàíàë [íèê]
CHAN_LOGOUT_SUCCEEDED
Ïîëüçîâàòåëü %s óñïåøíî äåèäåíòèôèöèðîâàí îò êàíàëà %s.
CHAN_LOGOUT_ALL_SUCCEEDED
Âñå ïîëüçîâàòåëè, èäåíòèôèöèðîâàííûå ê êàíàëó %s, óñïåøíî äåèäåíòèôèöèðîâàíû.
# DROP responses
CHAN_DROP_SYNTAX
DROP #êàíàë
@@ -1093,14 +1097,6 @@ CHAN_SUCCESSOR_UNSET
CHAN_SUCCESSOR_IS_FOUNDER
%s íå ìîæåò áûòü íàñëåäíèêîì êàíàëà %s òàê êàê îí åãî âëàäåëåö.
# SET PASSWORD responses
CHAN_SET_PASSWORD_FAILED
Èçâèíèòå, óñòàíîâèòü ïàðîëü íåóäàëîñü.
CHAN_PASSWORD_CHANGED
Ïàðîëü äëÿ êàíàëà %s óñïåøíî èçìåíåí.
CHAN_PASSWORD_CHANGED_TO
Ïàðîëü äëÿ êàíàëà %s èçìåíåí íà %s.
# SET DESC responses
CHAN_DESC_CHANGED
Îïèñàíèå êàíàëà %s èçìåíåíî íà %s.
@@ -1232,6 +1228,14 @@ CHAN_SET_XOP_ON
CHAN_SET_XOP_OFF
Ñèñòåìà ïðèâåëåãèé xOP äëÿ êàíàëà %s îòêëþ÷åíà.
# SET PERSISTANT responces
CHAN_SET_PERSIST_SYNTAX
SET channel PERSIST {ON | OFF}
CHAN_SET_PERSIST_ON
Channel %s is now persistant.
CHAN_SET_PERSIST_OFF
Channel %s is no longer persistant.
# SET NOEXPIRE responses
CHAN_SET_NOEXPIRE_SYNTAX
SET #êàíàë NOEXPIRE {ON | OFF}
@@ -1251,6 +1255,37 @@ CHAN_XOP_ACCESS
CHAN_XOP_NOT_AVAILABLE
Ñèñòåìà ïðèâåëåãèé xOP íåäîñòóïíà.
# QOP messages
CHAN_QOP_SYNTAX
QOP channel {ADD|DEL|LIST|CLEAR} [nick | entry-list]
CHAN_QOP_DISABLED
Sorry, channel QOP list modification is temporarily disabled.
CHAN_QOP_NICKS_ONLY
Channel QOP lists may only contain registered nicknames.
CHAN_QOP_ADDED
%s added to %s QOP list.
CHAN_QOP_MOVED
%s moved to %s QOP list.
CHAN_QOP_NO_SUCH_ENTRY
No such entry (#%d) on %s QOP list.
CHAN_QOP_NOT_FOUND
%s not found on %s QOP list.
CHAN_QOP_NO_MATCH
No matching entries on %s QOP list.
CHAN_QOP_DELETED
%s deleted from %s QOP list.
CHAN_QOP_DELETED_ONE
Deleted 1 entry from %s QOP list.
CHAN_QOP_DELETED_SEVERAL
Deleted %d entries from %s QOP list.
CHAN_QOP_LIST_EMPTY
%s QOP list is empty.
CHAN_QOP_LIST_HEADER
QOP list for %s:
Num Nick
CHAN_QOP_CLEAR
Channel %s QOP list has been cleared.
# AOP messages
CHAN_AOP_SYNTAX
AOP #êàíàë {ADD|DEL|LIST|CLEAR} [íèê | íîìåð çàïèñ]
@@ -1377,7 +1412,7 @@ CHAN_VOP_CLEAR
# ACCESS messages
CHAN_ACCESS_SYNTAX
ACCESS #êàíàë {ADD|DEL|LIST|CLEAR} [íèê [óðîâåíü] | íîìåð_çàïèñè]
ACCESS #êàíàë {ADD|DEL|LIST|VIEW|CLEAR} [íèê [óðîâåíü] | íîìåð_çàïèñè]
CHAN_ACCESS_XOP
Âû íå ìîæåòå èñïîëüçîâàòü ýòó êîìàíäó òàê êàê âêëþ÷åíà ñèñòåìà ïðèâèëåãèé xOP.
Äëÿ ìîäèôèêàöèè ñïèñêà äîñòóïà èñïîëüçóéòå êîìàíäû VOP, AOP è SOP.
@@ -1427,6 +1462,12 @@ CHAN_ACCESS_LIST_AXS_FORMAT
%3d %4d %s
CHAN_ACCESS_CLEAR
Ñïèñîê äîñòóïà êàíàëà %s áûë ïîëíîñòüþ î÷èùåí.
CHAN_ACCESS_VIEW_XOP_FORMAT
%3d %s %s
by %s, last seen %s
CHAN_ACCESS_VIEW_AXS_FORMAT
%3d %4d %s
by %s, last seen %s
# AKICK responses
CHAN_AKICK_SYNTAX
@@ -1481,6 +1522,8 @@ CHAN_LEVELS_RANGE
Óðîâåíü äîëæåí áûòü ÷èñëîì ìåæäó %d è %d âêëþ÷èòåëüíî.
CHAN_LEVELS_CHANGED
Óðîâåíü äîñòóïà ê %s íà êàíàëå %s èçìåíåí íà %d.
CHAN_LEVELS_CHANGED_FOUNDER
Level for %s on channel %s changed to founder only.
CHAN_LEVELS_UNKNOWN
Íåèçâåñòíûé ïóíêò %s. Äëÿ ïîëó÷åíèÿ ñïèñêà âñåõ äîñòóïíûõ çíà÷åíèé ñì. %R%s HELP LEVELS DESC
CHAN_LEVELS_DISABLED
@@ -1563,6 +1606,8 @@ CHAN_INFO_OPT_TOPICLOCK
Áëîêèðîâêà òîïèêà
CHAN_INFO_OPT_XOP
Ñèñòåìà ïðèâåëåãèé xOP
CHAN_INFO_OPT_PERSIST
Persistant
CHAN_INFO_OPT_NONE
îòñóòñòâóþò
CHAN_INFO_MODE_LOCK
@@ -1591,12 +1636,17 @@ CHAN_INVITE_ALREADY_IN
You are already in %s!
CHAN_INVITE_SUCCESS
You have been invited to %s.
CHAN_INVITE_OTHER_SUCCESS
%s has been invited to %s.
# UNBAN responses
CHAN_UNBAN_SYNTAX
UNBAN #êàíàë
UNBAN #êàíàë [nick]
CHAN_UNBANNED
Âû áûëè ðàçáàíåíû íà êàíàëå %s.
CHAN_UNBANNED_OTHER
%s has been unbanned from %s.
# TOPIC responses
CHAN_TOPIC_SYNTAX
@@ -1622,14 +1672,6 @@ CHAN_CLEARED_USERS
CHAN_CLEARED_INVITES
Âñå èñêëþ÷åíèÿ íà ïðèãëàøåíèå êàíàëà %s óäàëåíû.
# GETPASS responses
CHAN_GETPASS_SYNTAX
GETPASS #êàíàë
CHAN_GETPASS_UNAVAILABLE
Êîìàíäà GETPASS íåäîñòóïíà, òàê êàê èñïîëüçóåòñÿ øèôðîâàíèå ïàðîëåé.
CHAN_GETPASS_PASSWORD_IS
Ïàðîëü êàíàëà %s - %s.
# GETKEY responses
CHAN_GETKEY_SYNTAX
GETKEY #êàíàë
@@ -1638,28 +1680,6 @@ CHAN_GETKEY_NOKEY
CHAN_GETKEY_KEY
Key for channel %s is %s.
# SENDPASS responses
CHAN_SENDPASS_SYNTAX
SENDPASS #êàíàë
CHAN_SENDPASS_UNAVAILABLE
Êîìàíäà SENDPASS íåäîñòóïíà, òàê êàê èñïîëüçóåòñÿ øèôðîâàíèå ïàðîëåé.
CHAN_SENDPASS_SUBJECT
Ïàðîëü îò êàíàëà %s
CHAN_SENDPASS_HEAD
Äîáðîãî âðåìåíè ñóòîê, ìíîãîóâàæàåìûé/àÿ!
CHAN_SENDPASS_LINE_1
Áûë ïîëó÷åí çàïðîñ íà âîññòàíîâëåíèå ïàðîëÿ îò âàøåãî êàíàëà %s
CHAN_SENDPASS_LINE_2
Òåêóùèé ïàðîëü: %s * Äëÿ áîëüøåé áåçîïàñíîñòè, ðåêîìåíäóåòñÿ èçìåíèòü åãî êàê ìîæíî ñêîðåå.
CHAN_SENDPASS_LINE_3
Åñëè âû íå çàïðàøèâàëè ýòî ïèñüìî, ïðîñòî ïðîèãíîðèðóéòå åãî.
CHAN_SENDPASS_LINE_4
ÏÎÆÀËÓÉÑÒÀ, ÍÅ ÎÒÂÅ×ÀÉÒÅ ÍÀ ÝÒÎ ÏÈÑÜÌÎ!
CHAN_SENDPASS_LINE_5
Àäìèíèñòðàöèÿ ñåòè %s.
CHAN_SENDPASS_OK
Ïàðîëü îò êàíàëà %s áûë âûñëàí íà email-àäðåñ åãî âëàäåëüöà.
# FORBID responses
CHAN_FORBID_SYNTAX
FORBID #êàíàë [ïðè÷èíà]
@@ -2097,6 +2117,8 @@ BOT_UNASSIGN_SYNTAX
UNASSIGN #êàíàë
BOT_UNASSIGN_UNASSIGNED
Áîò ñ êàíàëà %s óñïåøíî óäàëåí.
BOT_UNASSIGN_PERSISTANT_CHAN
You can not unassign bots while persist is set on the channel.
# INFO responses
BOT_INFO_SYNTAX
@@ -2875,8 +2897,6 @@ OPER_DEFCON_SYNTAX
DEFCON [1|2|3|4|5]
OPER_DEFCON_DENIED
Íà äàííûé ìîìåíò ñåðâèñû ðàáîòàþò â DEFCON-ðåæèìå. Ïîâòîðèòå ñâîé çàïðîñ ïîçæå.
OPER_DEFCON_NO_CONF
Àêòèâèðîâàíèå DEFCON-ðåæèìà íåâîçìîæíî, òàê êàê îí íå âêëþ÷åí â êîíôèãå ñåðâèñîâ.
OPER_DEFCON_CHANGED
DEFCON-ðåæèì àêòèâèðîâàí, óðîâåíü çàùèòû: %d
OPER_DEFCON_WALL
@@ -2896,6 +2916,10 @@ OPER_MODULE_REMOVE_FAIL
Íåâîçìîæíî âûãðóçèòü ìîäóëü %s
OPER_MODULE_NO_UNLOAD
Ýòîò ìîäóëü íå ìîæåò áûòü âûãðóæåí.
OPER_MODULE_ALREADY_LOADED
Module %s is already loaded.
OPER_MODULE_ISNT_LOADED
Module %s isn't loaded.
OPER_MODULE_LOAD_SYNTAX
MODLOAD èìÿ_ôàéëà
OPER_MODULE_UNLOAD_SYNTAX
@@ -3937,6 +3961,12 @@ NICK_HELP_SENDPASS
Ïðèìå÷àíèå: SENDPASS ìîæåò áûòü îãðàíè÷åí äëÿ èñïîëüçîâàíèÿ òîëüêî
IRC-îïåðàòîðàìè äàííîé ñåòè.
NICK_HELP_RESETPASS
Syntax: RESETPASS nickname
Sends a code key to the nickname with the instructions on how to
reset their password.
NICK_HELP_CONFIRM
Ñèíòàêñèñ: CONFIRM auth-êîä
@@ -3946,6 +3976,14 @@ NICK_HELP_CONFIRM
Êîäîâàÿ ôðàçà, êîòîðàÿ óêàçûâàåòñÿ â êà÷åñòâå ïàðàìåòðà, âûñûëàåòñÿ
íà âàø e-mail â ïåðâîé ÷àñòè ïðîöåññà ðåãèñòðàöèè íèêà. Äëÿ áîëåå
ïîäðîáíîé èíôîðìàöèè ñì. %R%S HELP REGISTER
This is also used after the RESETPASS command has been used to
force identify you to your nick so you may change your password.
NICK_HELP_CONFIRM_OPER
Additionally, Services Operators with the nickserv/confirm permission can
replace passcode with a users nick to force validate them.
NICK_HELP_RESEND
Ñèíòàêñèñ: RESEND
@@ -4098,10 +4136,10 @@ CHAN_HELP_CMD_STATUS
ïîëüçîâàòåëÿ íà óêàçàííîì êàíàëå
CHAN_HELP_CMD_REGISTER
REGISTER Ðåãèñòðàöèÿ êàíàëà
CHAN_HELP_CMD_IDENTIFY
IDENTIFY Èäåíòèôèöèêàöèÿ ê êàíàëó â êà÷åñòâå âëàäåëüöà
CHAN_HELP_CMD_SET
SET Íàñòðîéêà ðàçëè÷íûõ îïöèé êàíàëà
CHAN_HELP_CMD_QOP
QOP Modify the list of QOP users
CHAN_HELP_CMD_AOP
AOP Óïðàâëåíèå ñïèñêîì AOP'îâ êàíàëà
CHAN_HELP_CMD_SOP
@@ -4114,8 +4152,6 @@ CHAN_HELP_CMD_AKICK
AKICK Óïðàâëåíèå ñïèñêîì àâòîêèêîâ êàíàëà
CHAN_HELP_CMD_DROP
DROP Óäàëåíèå êàíàëà èç áàçû äàííûõ ñåðâèñîâ
CHAN_HELP_CMD_SENDPASS
SENDPASS Âîññòàíîâëåíèå 'çàáûòîãî' ïàðîëÿ îò êàíàëà
CHAN_HELP_CMD_BAN
BAN Óñòàíîâêà áàíà íà êàíàëå
CHAN_HELP_CMD_CLEAR
@@ -4132,14 +4168,12 @@ CHAN_HELP_CMD_KICK
KICK Âûêèäûâàåò óêàçàííîãî ïîëüçîâàòåëÿ ñ êàíàëà
CHAN_HELP_CMD_LIST
LIST Çàïðîñ ñïèñêà âñåõ çàðåãèñòðèðîâàííûõ êàíàëîâ
CHAN_HELP_CMD_LOGOUT
LOGOUT Äåèäåíòèôèêàöèÿ óêàçàííîãî ïîëüçîâàòåëÿ îò êàíàëà
CHAN_HELP_CMD_OP
OP Óñòàíîâêà ñòàòóñà îïåðàòîðà (+o) óêàçàííîìó íèêó íà êàíàëå
CHAN_HELP_CMD_TOPIC
TOPIC Óñòàíîâêà òîïèêà íà êàíàëå ïîñðåäñòâîì ñåðâèñîâ
CHAN_HELP_CMD_UNBAN
UNBAN Óäàëåíèå íà êàíàëå âñåõ áàíîâ, êîòîðûå íå ïîçâîëÿþò âàì âîéòè
UNBAN Remove all bans preventing a user from entering a channel
CHAN_HELP_CMD_VOICE
VOICE Óñòàíîâêà ñòàòóñà âîéñà (+v) óêàçàííîìó íèêó íà êàíàëå
CHAN_HELP_CMD_VOP
@@ -4158,10 +4192,6 @@ CHAN_HELP_CMD_OWNER
OWNER Çàïðîñ ñòàòóñà âëàäåëüöà íà êàíàëå
CHAN_HELP_CMD_PROTECT
PROTECT Óñòàíîâêà ðåæèìà çàùèòû (+a) óêàçàííîìó íèêó íà êàíàëå
CHAN_HELP_CMD_ADMIN
ADMIN Óñòàíîâêà ñòàòóñà àäìèíèñòðàòîðà (+a) óêàçàííîìó íèêó íà êàíàëå
CHAN_HELP_CMD_DEADMIN
DEADMIN Ñíÿòèå ðåæèìà àäìèíèñòðàòîðà (-a) ñ óêàçàííîãî íèêà íà êàíàëå
CHAN_HELP_CMD_DEOP
DEOP Ñíÿòèå ðåæèìà îïåðàòîðà (-o) ñ óêàçàííîãî íèêà íà êàíàëå
@@ -4185,56 +4215,32 @@ CHAN_HELP_EXPIRES
óäàëåí èç áàçû äàííûõ ñåðâèñîâ.
CHAN_HELP_REGISTER
Ñèíòàêñèñ: REGISTER #êàíàë ïàðîëü îïèñàíèå
Ñèíòàêñèñ: REGISTER #êàíàë îïèñàíèå
Ðåãèñòðèðóåò êàíàë â áàçå äàííûõ %S. ×òîáû èñïîëüçîâàòü ýòó
êîìàíäó, âû äîëæíû áûòü îïåðàòîðîì òîãî êàíàëà, êîòîðûé âû ïûòàåòåñü
çàðåãèñòðèðîâàòü. Óêàçàííûé ïðè ðåãèñòðàöèè ïàðîëü ìîæíî èñïîëüçîâàòü
(êîìàíäîé IDENTIFY) äëÿ ïîëó÷åíèÿ äîñòóïà ê êàíàëó è åãî ðàçëè÷íûì
íàñòðîéêàì.
Ïîñëåäíèé ïàðàìåòð îïèñàíèå, êîòîðûé îáÿçàòåëüíî äîëæåí áûòü
óêàçàí, ÿâëÿåòñÿ îïèñàíèåì êàíàëà è/èëè, âîçìîæíî, åãî òåìàòèêîé.
Ñðàçó ïîñëå ðåãèñòðàöèè êàíàëà, âû áóäåòå àâòîìàòè÷åñêè âíåñåíû â
ñïèñîê äîñòóïà ñ óðîâåíåì founder (îñíîâàòåëü, âëàäåëåö). Âëàäåëåö
êàíàëà èìååò âîçìîæíîñòü èçìåíÿòü ëþáûå åãî íàñòðîéêè, à òàê æå,
àâòîìàòè÷åñêè ïîëó÷àòü ñòàòóñ îïïåðàòîðà îò %S ïðè çàõîäå
íà êàíàë.
Ïîìèìî âñåãî ýòîãî, êàê âëàäåëåö, âû ìîæåòå âîñïîëüçîâàòüñÿ êîìàíäîé
ACCESS, ÷òî áû íàçíà÷èòü äîïîëíèòåëüíûõ îïåðàòîðîâ êàíàëà, ò. í.
àäìèíèñòðàöèþ. Áîëåå ïîäðîáíóþ èíôîðìàöèþ î ñèñòåìå ïðèâåëåãèé âû
ìîæåòå ïîëó÷èòü ïî êîìàíäå %R%S HELP ACCESS
Ïðèìå÷àíèå: ó÷òèòå, ÷òî ïåðåä òåì êàê ðåãèñòðèðîâàòü ñâîé êàíàë, âû
äîëæíû ñïåðâà çàðåãèñòðèðîâàòü ñâîé íèê. Áîëåå ïîäðîáíàÿ èíôîðìàöèÿ
î òîì, êàê ðåãèñòðèðîâàòü íèê, äîñòóïíà ïî %R%s HELP
Registers a channel in the %S database. In order
to use this command, you must first be a channel operator
on the channel you're trying to register.
The description, which must be included, is a
general description of the channel's purpose.
CHAN_HELP_IDENTIFY
Ñèíòàêñèñ: IDENTIFY #êàíàë ïàðîëü
Ïîçâîëÿåò èäåíòèôèöèðîâàòüñÿ íà %S â êà÷åñòâå âëàäåëüöà
óêàçàííîãî êàíàëà. Ìíîãèå êîìàíäû ïî óïðàâëåíèþ êàíàëîì íåäîñòóïíû
äî òåõ ïîð, ïîêà âû íå èäåíòèôèöèðóåòåñü ê êàíàëó.  êà÷åñòâå ïàðîëÿ
íåîáõîäèìî óêàçûâàòü òîò ñàìûé ïàðîëü, êîòîðûé âû óêàçûâàëè ïðè
ðåãèñòðàöèè âàøåãî êàíàëà.
Ïðèìå÷àíèå: âàì íåîáÿçàòåëüíî èäåíòèôèöèðîâàòüñÿ ê êàíàëó, åñëè âû
åãî ðåàëüíûé âëàäåëåö, äîñòàòî÷íî ïðîñòî èäåíòèôèöèðîâàòüñÿ ê íèêó.
CHAN_HELP_LOGOUT
Ñèíòàêñèñ: LOGOUT #êàíàë íèê
Äàííàÿ êîìàíäà ïîçâîëÿåò äåèäåíòèôèöèðîâàòü ëþáîé íèê, êîòîðûé
ñ ïîìîùüþ ïàðîëÿ èäåíòèôèöèðîâàëñÿ ê êàíàëó â êà÷åñòâå âëàäåëåöà.
Åñëè âû ÿâëÿåòåñü ðåàëüíûì âëàäåëüöåì êàíàëà, ó âàñ åñòü âîçìîæíîñòü
äåèäåíòèôèöèðîâàòü êîãî óãîäíî, â èíîì ñëó÷àå - òîëüêî ñåáÿ.
When you register a channel, you are recorded as the
"founder" of the channel. The channel founder is allowed
to change all of the channel settings for the channel;
%S will also automatically give the founder
channel-operator privileges when s/he enters the channel.
See the ACCESS command (%R%S HELP ACCESS) for
information on giving a subset of these privileges to
other channel users.
NOTICE: In order to register a channel, you must have
first registered your nickname. If you haven't,
%R%s HELP for information on how to do so.
CHAN_HELP_DROP
Ñèíòàêñèñ: DROP #êàíàë
Óäàëÿåò óêàçàííûé êàíàë èç áàçû äàííûõ ñåðâèñîâ. Èñïîëüçîâàòü DROP
ìîæåò ëèøü âëàäåëåö êàíàëà, ïðåäâàðèòåëüíî ïðîèäåíòèôèöèðîâàâøèñü
ê íåìó ñ ïîìîùüþ êîìàíäû IDENTIFY.
ìîæåò ëèøü âëàäåëåö êàíàëà.
CHAN_HELP_SET
Ñèíòàêñèñ: SET #êàíàë îïöèÿ ïàðàìåòð
@@ -4244,7 +4250,6 @@ CHAN_HELP_SET
FOUNDER ñìåíà âëàäåëüöà êàíàëà
SUCCESSOR óñòàíîâêà íàñëåäíèêà êàíàëà
PASSWORD ñìåíà ïàðîëÿ êàíàëà
DESC èçìåíåíèå îïèñàíèÿ êàíàëà
URL óñòàíîâêà URL-àäðåñà êàíàëà
EMAIL óñòàíîâêà Email-àäðåñà êàíàëà
@@ -4263,6 +4268,7 @@ CHAN_HELP_SET
SIGNKICK íàñòðîéêà ðåæèìà "ïîäïèñàííûõ êèêîâ"
TOPICLOCK áëîêèðîâêà òîïèêà êàíàëà îò èçìåíåíèé åãî êåì-ëèáî
XOP íàñòðîéêà ñèñòåìû ïðèâèëåãèé êàíàëà
PERSIST Set the channel as permanent
Äëÿ áîëåå ïîäðîáíîé èíôîðìàöèè î êàêîé-ëèáî êîíêðåòíîé îïöèè, ñì.
ñïðàâêó ïî %R%S HELP îïöèÿ
@@ -4284,12 +4290,6 @@ CHAN_HELP_SET_SUCCESSOR
êàíàëîì è òîò áóäåò óäàëåí. Êî âñåìó ïðî÷åìó, íèê íàñëåäíèêà êàíàëà
äîëæåí áûòü çàðåãèñòðèðîâàííûì íèêîì.
CHAN_HELP_SET_PASSWORD
Ñèíòàêñèñ: SET #êàíàë PASSWORD ïàðîëü
Ïîçâîëÿåò èçìåíèòü òåêóùèé ïàðîëü êàíàëà, èñïîëüçóåìûé äëÿ
èäåíòèôèêàöèè ê íåìó (êàíàëó) â êà÷åñòâå âëàäåëüöà.
CHAN_HELP_SET_DESC
Ñèíòàêñèñ: SET #êàíàë DESC îïèñàíèå
@@ -4481,6 +4481,29 @@ CHAN_HELP_SET_XOP
Ïåðåêëþ÷åíèå èç ñèñòåìû xOP â ñèñòåìó ACCESS îáû÷íî ïðîõîäèò áåç
êàêèõ-ëèáî ïðîáëåì.
CHAN_HELP_SET_PERSIST
Syntax: SET channel PERSIST {ON | OFF}
Enables or disables the persistant channel setting.
When persistant is set, the service bot will remain
in the channel when it has emptied of users.
If your IRCd does not a permanent (persistant) channel
mode you must have a service bot in your channel to
set persist on, and it can not be unassigned while persist
is on.
If this network does not have BotServ enabled and does
not have a permanent channel mode, ChanServ will
join your channel when you set persist on (and leave when
it has been set off).
If your IRCd has a permanent (persistant) channel mode
and is is set or unset (for any reason, including MLOCK),
persist is automatically set and unset for the channel aswell.
Additionally, services will set or unset this mode when you
set persist on or off.
CHAN_HELP_SET_OPNOTICE
Ñèíòàêñèñ: SET #êàíàë OPNOTICE {ON | OFF}
@@ -4488,6 +4511,45 @@ CHAN_HELP_SET_OPNOTICE
Êîãäà îï-óâåäîìëåíèå âêëþ÷åíî, %S áóäåò ïîñûëàòü íîòèñ
íà êàíàë êàæäûé ðàç, êîãäà êòî-ëèáî èñïîëüçóåò êîìàíäû OP/DEOP.
CHAN_HELP_QOP
Syntax: QOP channel ADD nick
QOP channel DEL {nick | entry-num | list}
QOP channel LIST [mask | list]
QOP channel CLEAR
Maintains the QOP (AutoOwner) list for a channel. The QOP
list gives users the right to be auto-owner on your channel,
which gives them almost (or potentially, total) access.
The QOP ADD command adds the given nickname to the
QOP list.
The QOP DEL command removes the given nick from the
QOP list. If a list of entry numbers is given, those
entries are deleted. (See the example for LIST below.)
The QOP LIST command displays the QOP list. If
a wildcard mask is given, only those entries matching the
mask are displayed. If a list of entry numbers is given,
only those entries are shown; for example:
QOP #channel LIST 2-5,7-9
Lists QOP entries numbered 2 through 5 and
7 through 9.
The QOP CLEAR command clears all entries of the
QOP list.
The QOP commands are limited to
founders (unless SECUREOPS is off). However, any user on the
QOP list may use the QOP LIST command.
This command may have been disabled for your channel, and
in that case you need to use the access list. See
%R%S HELP ACCESS for information about the access list,
and %R%S HELP SET XOP to know how to toggle between
the access list and xOP list systems.
CHAN_HELP_AOP
Ñèíòàêñèñ: AOP #êàíàë ADD íèê
AOP #êàíàë DEL {íèê | íîìåð_çàïèñè | ñïèñîê_çàïèñåé}
@@ -4663,6 +4725,7 @@ CHAN_HELP_ACCESS
Ñèíòàêñèñ: ACCESS #êàíàë ADD íèê óðîâåíü
ACCESS #êàíàë DEL {íèê | íîìåð_çàïèñè | ñïèñîê_çàïèñåé}
ACCESS #êàíàë LIST [ìàñêà | ñïèñîê_çàïèñåé]
ACCESS #êàíàë VIEW [ìàñêà | ñïèñîê_çàïèñåé]
ACCESS #êàíàë CLEAR
Ïîçâîëÿåò óïðàâëÿòü ñïèñêîì äîñòóïà (ACCESS-ñïèñêîì) êàíàëà.
@@ -4699,6 +4762,9 @@ CHAN_HELP_ACCESS
ACCESS #êàíàë LIST 2-5,7-9
îòîáðàçèò âñå çàïèñè ñî 2-îé ïî 5-óþ, è ñ 7-îé ïî 9-þ.
The ACCESS VIEW command displays the access list similar
to ACCESS LIST but shows the creator and last used time.
Êîìàíäà ACCESS CLEAR ïîçâîëÿåò ïîëíîñòüþ î÷èñòèòü ñïèñîê äîñòóïà.
CHAN_HELP_ACCESS_LEVELS
@@ -4775,30 +4841,30 @@ CHAN_HELP_AKICK
Êîìàíäà AKICK CLEAR ïîëíîñòüþ î÷èùàåò ñïèñîê àâòîêèêîâ êàíàëà.
CHAN_HELP_LEVELS
Ñèíòàêñèñ: LEVELS #êàíàë SET òèï óðîâåíü
Ñèíòàêñèñ: LEVELS #êàíàë SET òèï [óðîâåíü|FOUNDER]
LEVELS #êàíàë {DIS | DISABLE} òèï
LEVELS #êàíàë LIST
LEVELS #êàíàë RESET
Êîìàíäà LEVELS ïîçâîëÿåò óäîáíî óïðàâëÿòü óðîâíÿìè äîñòóïà,
èñïîëüçóåìûìè äëÿ ñïèñêîâ äîñòóïà. Ñ ïîìîùüþ ýòîé ýòó êîìàíäû,
âû ìîæåòå îïðåäåëèòü óðîâåíü äîñòóïà, òðåáóåìûé äëÿ áîëüøèíñòâà
ôóíêöèé %S'à (êîìàíäû SET FOUNDER è SET PASSWORD,
à òàêæå ýòó êîìàíäó, ìîæåò èñïîëüçîâàòü òîëüêî âëàäåëåö êàíàëà).
The LEVELS command allows fine control over the meaning of
the numeric access levels used for channels. With this
command, you can define the access level required for most
of %S's functions. (The SET FOUNDER and this command
are always restricted to the channel founder.)
Êîìàíäà LEVELS SET ïîçâîëÿåò óñòàíîâèòü óðîâåíü äîñòóïà äëÿ
ôóíêöèè èëè ãðóïïû ôóíêöèé.
Êîìàíäà LEVELS DISABLE (DIS - ñîêðàùåííûé àíàëîã) îòêëþ÷àåò
ôóíêöèþ èëè çàïðåùàåò äîñòóï ê ôóíêöèè âñåì, êðîìå âëàäåëüöà êàíàëà.
LEVELS SET allows the access level for a function or group of
functions to be changed. LEVELS DISABLE (or DIS for short)
disables an automatic feature or disallows access to a
function by anyone, INCLUDING the founder (although, the founder
can always reenable it).
Êîìàíäà LEVELS LIST ïîêàæåò òåêóùèå óðîâíè äîñòóïà äëÿ êàæäîé
ôóíêöèè èëè ãðóïïû ôóíêöèé.
LEVELS LIST shows the current levels for each function or
group of functions. LEVELS RESET resets the levels to the
default levels of a newly-created channel (see
HELP ACCESS LEVELS).
Êîìàíäà LEVELS RESET ñáðîñèò âñå íàñòðîéêè óðîâíåé äîñòóïà íà
çíà÷åíèÿ ïî-óìîë÷àíèþ (ïðîïèñàíûå â HELP ACCESS LEVELS).
×òîáû ïîñìîòðåòü ñïèñîê ôóíêöèé, íà êîòîðûå ìîæíî îïðåäåëÿòü óðîâíè
äîñòóïà, ñì. ñïðàâî÷íóþ èíôîðìàöèþ ïî HELP LEVELS DESC.
For a list of the features and functions whose levels can be
set, see HELP LEVELS DESC.
CHAN_HELP_LEVELS_DESC
Íèæå ïðåäñòàâëåí ñïèñîê âñåõ äîñòóïíûõ êîìàíä/ôóíêöèé è èõ îïèñàíèå.
@@ -4945,10 +5011,10 @@ CHAN_HELP_INVITE
ëèöàìè ñ óðîâíåì äîñòóïà 5 è âûøå.
CHAN_HELP_UNBAN
Ñèíòàêñèñ: UNBAN #êàíàë
Ñèíòàêñèñ: UNBAN #êàíàë [nick]
Ïîñûëàåò %S çàïðîñ íà óäàëåíèå ñ óêàçàííîãî êàíàëà âñåõ áàíîâ,
êîòîðûå íå ïîçâîëÿþò âàì íà íåãî (êàíàë) çàéòè.
Remove all bans preventing a user from entering a channel
user from entering the given channel.
Ïî-óìîë÷àíèþ, äàííàÿ êîìàíäà ìîæåò áûòü èñïîëüçîâàíà AOP'àìè
èëè ëèöàìè ñ óðîâíåì äîñòóïà 5 è âûøå.
@@ -5007,34 +5073,11 @@ CHAN_HELP_GETKEY
Ïîçâîëÿåò çàïðîñèòü ó ñåðâèñîâ êëþ÷-ïàðîëü êàíàëà.
CHAN_HELP_SENDPASS
Ñèíòàêñèñ: SENDPASS #êàíàë
Îòïðàâëÿåò ïàðîëü îò êàíàëà íà email-àäðåñ åãî ðåàëüíîãî âëàäåëüöà,
ïðîïèñàííîãî â ãðàôå Founder (âëàäåëåö).
Ïðèìå÷àíèå: â çàâèñèìîñòè îò íàñòðîåê ñåòè, äîñòóï ê äàííîé êîìàíäå
ìîæåò áûòü îãðàíè÷åí äî IRC-îïåðàòîðîâ.
CHAN_SERVADMIN_HELP
Àäìèíèñòðàòîðû ñåðâèñîâ ìîãóò óäàëèòü ëþáîé êàíàë áåç èäåíòèôèêàöèè
ê íåìó â êà÷åñòâå âëàäåëüöà, ìîãóò ïðîñìàòðèâàòü ñïèñêè äîñòóïà
êàíàëîâ, à òàê æå, ñïèñêè àêèêîâ è óñòàíîâêè óðîâíåé äîñòóïà êàíàëîâ.
CHAN_SERVADMIN_HELP_LOGOUT
Ñèíòàêñèñ: LOGOUT #êàíàë [íèê]
Äåèäåíòèôèöèðóåò óêàçàííûé íèê îò êàíàëà, ñíèìàÿ òåì ñàìûì ñ íåãî
ñòàòóñ âëàäåëüöà. Åñëè âû ðåàëüíûé âëàäåëåö êàíàëà, âû ìîæåòå
äåèäåíòèôèöèðîâàòü ëþáîãî, â ïðîòèâíîì ñëó÷àå - òîëüêî ñåáÿ.
Ïðèìå÷àíèå: äåèäåíòèôèöèðóþòñÿ òîëüêî òå ïîëüçîâàòåëè, êîòîðûå
èäåíòèôèöèðîâàëèñü ê êàíàëó ïîñðåäñòâîì êîìàíäû IDENTIFY.
Êàê Àäìèíèñòðàòîð ñåðâèñîâ, âû ìîæåòå äåèäåíòèôèöèðîâàòü ëþáîãî
ïîëüçîâàòåëÿ îò ëþáîãî êàíàëà, áåç êàêîé-ëèáî äîïîëíèòåëüíîé
èäåíòèôèêàöèè ê êàíàëó. Åñëè âû íå óêàæåòå íèê, òî äåèäåíòèôèöðîâàíû
áóäóò âñå ïîëüçîâàòåëè êàíàëà.
CHAN_SERVADMIN_HELP_DROP
Ñèíòàêñèñ: DROP #êàíàë
@@ -5061,8 +5104,8 @@ CHAN_SERVADMIN_HELP_SET_NOEXPIRE
CHAN_SERVADMIN_HELP_INFO
Àäìèíèñòðàòîðû ñåðâèñîâ ìîãóò èñïîëüçîâàòü ïàðàìåòð ALL
îòíîñèòåëüíî ëþáîãî êàíàëà ñåòè.
Services Operators with the chanserv/auspex permission can
use the ALL parameter with any channel.
CHAN_SERVADMIN_HELP_LIST
Ñèíòàêñèñ: LIST ìàñêà [FORBIDDEN] [SUSPENDED] [NOEXPIRE]
@@ -6553,3 +6596,16 @@ OPER_UMODE_UNSUPPORTED
OPER_SUPER_ADMIN_NOT_ENABLED
Äèðåêòèâà SuperAdmin îòêëþ÷åíà â êîíôèãóðàöèîííîì ôàéëå ñåðâèñîâ.
OPER_HELP_SYNC
Syntax: SQLSYNC
This command syncs your databases with SQL. You should
only have to execute this command once, when you initially
import your databases into SQL.
OPER_HELP_CMD_SQLSYNC
SQLSYNC Import your databases to SQL
OPER_SYNC_UPDATING
Updating MySQL.
OPER_SYNC_UPDATED
Finished updating MySQL.
+236 -173
View File
@@ -1,6 +1,6 @@
# Turkish language file.
#
# (C) 2003-2008 Anope Team
# (C) 2003-2010 Anope Team
# Contact us at team@anope.org
#
# Please read COPYING and README for furhter details.
@@ -879,6 +879,24 @@ NICK_SENDPASS_LINE_5
NICK_SENDPASS_OK
%s nickinin þifresi gönderildi.
# RESETPASS responses
NICK_RESETPASS_SYNTAX
RESETPASS nickname
NICK_RESETPASS_SUBJECT
Reset password request for %s
NICK_RESETPASS_MESSAGE
Hi,
You have requested to have the password for %s reset.
To reset your password, type %R%s CONFIRM %s
If you don't know why this mail is sent to you, please ignore it silently.
PLEASE DON'T ANSWER TO THIS MAIL!
%s administrators.
NICK_RESETPASS_COMPLETE
Password reset email for %s has been sent.
# FORBID responses
NICK_SUSPEND_SYNTAX
SUSPEND nickname reason
@@ -922,10 +940,6 @@ NICK_IS_PREREG
This nick is awaiting an e-mail verification code before completing registration.
NICK_ENTER_REG_CODE
A passcode has been sent to %s, please type %R%s confirm <passcode> to complete registration
NICK_CONFIRM_NOT_FOUND
Registration step 1 may have expired, please use "%R%s register <password> <email>" first.
NICK_CONFIRM_INVALID
Invalid passcode has been entered, please check the e-mail again, and retry
NICK_REG_MAIL_SUBJECT
Nickname Registration (%s)
NICK_REG_MAIL_HEAD
@@ -945,6 +959,15 @@ NICK_GETPASS_PASSCODE_IS
NICK_FORCE_REG
Nickname %s confirmed
NICK_CONFIRM_NOT_FOUND
Registration step 1 may have expired, please use "%R%s register <password> <email>" first.
NICK_CONFIRM_INVALID
Invalid passcode has been entered, please check the e-mail again, and retry
NICK_CONFIRM_EXPIRED
Your password reset request has expired.
NICK_CONFIRM_SUCCESS
You are now identified for your nick. Change your password using "%R%s SET PASSWORD newpassword" now.
###########################################################################
#
# ChanServ messages
@@ -1024,6 +1047,12 @@ CHAN_LEVEL_TOPIC
TOPIC komutunu kullanmaya yetkili
CHAN_LEVEL_INFO
INFO komutunu ALL seçenegiyle kullanmaya yetkili
CHAN_LEVEL_AUTOOWNER
Automatic mode +q
CHAN_LEVEL_OWNER
Allowed to use OWNER command
CHAN_LEVEL_OWNERME
Allowed to (de)owner him/herself
# Automatic responses
CHAN_IS_REGISTERED
@@ -1041,7 +1070,7 @@ CHAN_X_INVALID
# REGISTER responses
CHAN_REGISTER_SYNTAX
REGISTER kanaladý þifre açýklama
REGISTER kanaladý açýklama
CHAN_REGISTER_DISABLED
Kanal kaydý geçici olarak devre dýþýdýr.
CHAN_REGISTER_NOT_LOCAL
@@ -1060,36 +1089,11 @@ CHAN_REGISTRATION_FAILED
Kanal kaydý baþarýsýz.
CHAN_REGISTERED
%s kanalý bu nicke kayýt edildi: %s
CHAN_PASSWORD_IS
Kanal þifreniz %s - ilerde kullanacaðýnýz için unutmayýnýz ve kimseye söylemeyiniz.
CHAN_REGISTER_NONE_CHANNEL
You have attempted to register a nonexistent channel %s
CHAN_SYMBOL_REQUIRED
Please use the symbol of # when attempting to register
# IDENTIFY responses
CHAN_IDENTIFY_SYNTAX
IDENTIFY kanaladý þifreniz
CHAN_IDENTIFY_FAILED
Geçersiz þifre.
CHAN_IDENTIFY_SUCCEEDED
Þifre kabul edildi - %s kanalýnda founder seviyesinde eriþim kazandýnýz.
# LOGOUT responses
CHAN_LOGOUT_SYNTAX
LOGOUT kanaladý nick
CHAN_LOGOUT_SERVADMIN_SYNTAX
LOGOUT kanaladý [nick]
CHAN_LOGOUT_SUCCEEDED
Kullanýcý %s artýk %s kanalý tarafýndan tanýnmýyor.
CHAN_LOGOUT_ALL_SUCCEEDED
Tüm tanýmlý kullanýcýlar artýk %s kanalý tarafýndan tanýnmýyor (Except the channel founder).
CHAN_LOGOUT_FOUNDER_FAILED
You may not log out of %s (you are founder).
CHAN_LOGOUT_NOT_LOGGEDIN
%s was not logged into %s.
# DROP responses
CHAN_DROP_SYNTAX
DROP kanaladý
@@ -1120,14 +1124,6 @@ CHAN_SUCCESSOR_UNSET
CHAN_SUCCESSOR_IS_FOUNDER
%s %s kanalýnda successor olamaz çünkü zaten o kanalýn founderý.
# SET PASSWORD responses
CHAN_SET_PASSWORD_FAILED
Þifre deðiþimi baþarýsýz.
CHAN_PASSWORD_CHANGED
%s kanalýnýn þifresi deðiþtirildi.
CHAN_PASSWORD_CHANGED_TO
%s kanalýnýn þifresi %s olarak deðiþtirildi.
# SET DESC responses
CHAN_DESC_CHANGED
%s kanalýnýn açýklamasý %s olarak deðiþtirildi.
@@ -1259,6 +1255,14 @@ CHAN_SET_XOP_ON
CHAN_SET_XOP_OFF
xOP lists system for %s is now OFF.
# SET PERSISTANT responces
CHAN_SET_PERSIST_SYNTAX
SET channel PERSIST {ON | OFF}
CHAN_SET_PERSIST_ON
Channel %s is now persistant.
CHAN_SET_PERSIST_OFF
Channel %s is no longer persistant.
# SET NOEXPIRE responses
CHAN_SET_NOEXPIRE_SYNTAX
SET kanaladý NOEXPIRE {ON | OFF}
@@ -1278,6 +1282,37 @@ CHAN_XOP_ACCESS
CHAN_XOP_NOT_AVAILABLE
xOP system is not available.
# QOP messages
CHAN_QOP_SYNTAX
QOP channel {ADD|DEL|LIST|CLEAR} [nick | entry-list]
CHAN_QOP_DISABLED
Sorry, channel QOP list modification is temporarily disabled.
CHAN_QOP_NICKS_ONLY
Channel QOP lists may only contain registered nicknames.
CHAN_QOP_ADDED
%s added to %s QOP list.
CHAN_QOP_MOVED
%s moved to %s QOP list.
CHAN_QOP_NO_SUCH_ENTRY
No such entry (#%d) on %s QOP list.
CHAN_QOP_NOT_FOUND
%s not found on %s QOP list.
CHAN_QOP_NO_MATCH
No matching entries on %s QOP list.
CHAN_QOP_DELETED
%s deleted from %s QOP list.
CHAN_QOP_DELETED_ONE
Deleted 1 entry from %s QOP list.
CHAN_QOP_DELETED_SEVERAL
Deleted %d entries from %s QOP list.
CHAN_QOP_LIST_EMPTY
%s QOP list is empty.
CHAN_QOP_LIST_HEADER
QOP list for %s:
Num Nick
CHAN_QOP_CLEAR
Channel %s QOP list has been cleared.
# AOP messages
CHAN_AOP_SYNTAX
AOP kanal {ADD|DEL|LIST|CLEAR} [nick | liste-no]
@@ -1404,7 +1439,7 @@ CHAN_VOP_CLEAR
# ACCESS messages
CHAN_ACCESS_SYNTAX
ACCESS kanaladý {ADD|DEL|LIST|CLEAR} [nick [seviye] | kayýt-listesi]
ACCESS kanaladý {ADD|DEL|LIST|VIEW|CLEAR} [nick [seviye] | kayýt-listesi]
CHAN_ACCESS_XOP
Bu komutu kullanamazsiniz.
Yerine AOP, SOP veya VOP komutlarini kullanin.
@@ -1454,6 +1489,12 @@ CHAN_ACCESS_LIST_AXS_FORMAT
%3d %4d %s
CHAN_ACCESS_CLEAR
Kanal %s access listesi temizlendi.
CHAN_ACCESS_VIEW_XOP_FORMAT
%3d %s %s
by %s, last seen %s
CHAN_ACCESS_VIEW_AXS_FORMAT
%3d %4d %s
by %s, last seen %s
# AKICK responses
CHAN_AKICK_SYNTAX
@@ -1508,6 +1549,8 @@ CHAN_LEVELS_RANGE
Level %d ile %d arasýnda olmalýdýr.
CHAN_LEVELS_CHANGED
%s için level %s kanalýnda %d olarak deðiþtirildi.
CHAN_LEVELS_CHANGED_FOUNDER
Level for %s on channel %s changed to founder only.
CHAN_LEVELS_UNKNOWN
Varolmayan ayar: %s. Geçerli ayar listesi için %R%s HELP LEVELS DESC yazýnýz.
CHAN_LEVELS_DISABLED
@@ -1590,6 +1633,8 @@ CHAN_INFO_OPT_TOPICLOCK
Topic kilidi
CHAN_INFO_OPT_XOP
xOP sistemi
CHAN_INFO_OPT_PERSIST
Persistant
CHAN_INFO_OPT_NONE
YOK
CHAN_INFO_MODE_LOCK
@@ -1618,12 +1663,17 @@ CHAN_INVITE_ALREADY_IN
You are already in %s!
CHAN_INVITE_SUCCESS
You have been invited to %s.
CHAN_INVITE_OTHER_SUCCESS
%s has been invited to %s.
# UNBAN responses
CHAN_UNBAN_SYNTAX
UNBAN kanaladý
UNBAN kanaladý [name]
CHAN_UNBANNED
%s kanalýndaki banýnýz kaldýrýldý.
CHAN_UNBANNED_OTHER
%s has been unbanned from %s.
# TOPIC responses
CHAN_TOPIC_SYNTAX
@@ -1649,15 +1699,7 @@ CHAN_CLEARED_USERS
CHAN_CLEARED_INVITES
All invites on channel %s have been removed.
# GETPASS responses
CHAN_GETPASS_SYNTAX
GETPASS kanaladý
CHAN_GETPASS_UNAVAILABLE
GETPASS komutu devre dýþý çünkü þifreleme(encryption) devrede.
CHAN_GETPASS_PASSWORD_IS
%s kanalýnýn þifresi %s.
# SENDPASS responses
# GETKEY responses
CHAN_GETKEY_SYNTAX
GETKEY channel
CHAN_GETKEY_NOKEY
@@ -1665,28 +1707,6 @@ CHAN_GETKEY_NOKEY
CHAN_GETKEY_KEY
Key for channel %s is %s.
# SENDPASS responses
CHAN_SENDPASS_SYNTAX
SENDPASS kanaladý
CHAN_SENDPASS_UNAVAILABLE
SENDPASS komutu devre dýþý çünkü þifreleme(encryption) devrede.
CHAN_SENDPASS_SUBJECT
Kanal þifresi (%s)
CHAN_SENDPASS_HEAD
Selam,
CHAN_SENDPASS_LINE_1
%s kanalýnýzýn þifresinin e-mail adresinize gönderilmesini istemiþsiniz.
CHAN_SENDPASS_LINE_2
Kanal Þifresi %s. Güvenlik nedenlerinden dolayý, þifrenizi bu maili aldýktan sonra deðiþtirirseniz iyi olur.
CHAN_SENDPASS_LINE_3
Eðer bu mailin niye size gönderildiðini bilmiyorsanýz, lütfen ciddiye almayýn.
CHAN_SENDPASS_LINE_4
LÜTFEN BU MAÝLE CEVAP VERMEYÝN!
CHAN_SENDPASS_LINE_5
%s yönetimi.
CHAN_SENDPASS_OK
%s kanalýnýn þifresi gönderildi.
# FORBID responses
CHAN_FORBID_SYNTAX
FORBID kanaladý [sebep]
@@ -2159,6 +2179,8 @@ BOT_UNASSIGN_SYNTAX
UNASSIGN kanaladý
BOT_UNASSIGN_UNASSIGNED
%s kanalýndan bot çýkarýldý.
BOT_UNASSIGN_PERSISTANT_CHAN
You can not unassign bots while persist is set on the channel.
# INFO responses
BOT_INFO_SYNTAX
@@ -2982,8 +3004,6 @@ OPER_DEFCON_SYNTAX
DEFCON [1|2|3|4|5]
OPER_DEFCON_DENIED
This service is temporarly disabled, please try again later
OPER_DEFCON_NO_CONF
The Defcon system must be enabled in the services.conf file
OPER_DEFCON_CHANGED
Services are now at DEFCON %d
OPER_DEFCON_WALL
@@ -3003,6 +3023,10 @@ OPER_MODULE_REMOVE_FAIL
Unable to remove module %s
OPER_MODULE_NO_UNLOAD
This module can not be unloaded.
OPER_MODULE_ALREADY_LOADED
Module %s is already loaded.
OPER_MODULE_ISNT_LOADED
Module %s isn't loaded.
OPER_MODULE_LOAD_SYNTAX
MODLOAD FileName
OPER_MODULE_UNLOAD_SYNTAX
@@ -3988,6 +4012,12 @@ NICK_HELP_SENDPASS
Bazý networklerde sadece IRC operatörleri kullanabilir.
NICK_HELP_RESETPASS
Syntax: RESETPASS nickname
Sends a code key to the nickname with instructions on how to
reset their password.
NICK_HELP_CONFIRM
Syntax: CONFIRM passcode
@@ -3997,6 +4027,14 @@ NICK_HELP_CONFIRM
is sent to your e-mail address in the first step of the
registration process. For more information about the first
stage of the registration process, type: %R%S HELP REGISTER
This is also used after the RESETPASS command has been used to
force identify you to your nick so you may change your password.
NICK_HELP_CONFIRM_OPER
Additionally, Services Operators with the nickserv/confirm permission can
replace passcode with a users nick to force validate them.
NICK_HELP_RESEND
Syntax: RESEND
@@ -4150,10 +4188,10 @@ CHAN_HELP_CMD_STATUS
STATUS Kullanýcýnýn kanaldaki access seviyesini söyler
CHAN_HELP_CMD_REGISTER
REGISTER Kanalý kaydeder
CHAN_HELP_CMD_IDENTIFY
IDENTIFY Þifreyle sizi kanalýn sahibi olarak tanýmlar
CHAN_HELP_CMD_SET
SET Kanal özelliklerini ve bilgisini ayarlar
CHAN_HELP_CMD_QOP
QOP Modify the list of QOP users
CHAN_HELP_CMD_AOP
AOP AOP listesini düzenler
CHAN_HELP_CMD_SOP
@@ -4166,8 +4204,6 @@ CHAN_HELP_CMD_AKICK
AKICK Autokick listesini düzenler
CHAN_HELP_CMD_DROP
DROP Kanal kaydýný siler
CHAN_HELP_CMD_SENDPASS
SENDPASS Kayýp þifrelerinizi söyler
CHAN_HELP_CMD_BAN
BAN Bans a selected nick on a channel
CHAN_HELP_CMD_CLEAR
@@ -4184,14 +4220,12 @@ CHAN_HELP_CMD_KICK
KICK Kicks a selected nick from a channel
CHAN_HELP_CMD_LIST
LIST Lists all registered channels matching the given pattern
CHAN_HELP_CMD_LOGOUT
LOGOUT This command will logout the selected nickname
CHAN_HELP_CMD_OP
OP Gives Op status to a selected nick on a channel
CHAN_HELP_CMD_TOPIC
TOPIC Manipulate the topic of the specified channel
CHAN_HELP_CMD_UNBAN
UNBAN Remove all bans preventing you from entering a channel
UNBAN Remove all bans preventing a user from entering a channel
CHAN_HELP_CMD_VOICE
VOICE Voices a selected nick on a channel
CHAN_HELP_CMD_VOP
@@ -4210,10 +4244,6 @@ CHAN_HELP_CMD_OWNER
OWNER Gives you owner status on channel
CHAN_HELP_CMD_PROTECT
PROTECT Protects a selected nick on a channel
CHAN_HELP_CMD_ADMIN
ADMIN Protects a selected nick on a channel
CHAN_HELP_CMD_DEADMIN
DEADMIN Deprotects a selected nick on a channel
CHAN_HELP_CMD_DEOP
DEOP Deops a selected nick on a channel
@@ -4234,49 +4264,31 @@ CHAN_HELP_EXPIRES
kanala girmezse ) kaydý silinir.
CHAN_HELP_REGISTER
Kullanýmý: REGISTER kanaladý þifre açýklama
Kullanýmý: REGISTER kanaladý açýklama
%S veritabanýna belirtilen kanalý ekler yani kaydeder.
Bu komutu kullanabilmek için kayýt etmek istediðiniz kanal
önceden kayýtlý olmamalý ve kanalda op olmalýsýnýz. Þifre
kanal özelliklerinde deðiþiklikler yapmanýz için ilerde
lazým olacaktýr. Son parametre kanalýn genel bir tanýmýdýr
ve mutlaka belirtilmelidir.
Kanalý kayýt ettiðiniz zaman, kanalýn "founder" 'ý olursunuz.
Kanal founderý kanalýn tüm özelliklerini deðiþtirme yetkisine
sahip olan kiþidir; %S kanala girdiðiniz zaman size
otomatik kanal opu hakkýný verecektir. Kanal opu hakkýný
baþkalarýnada vermek için gerekli bilgiyi ACCESS komutunun
yardýmýna bakarak alabilirsiniz (%R%S HELP ACCESS).
NOT: Bir kanalý kaydedebilmek için, önce nickinizi kaydetmelisiniz.
Eðer kaydetmediyseniz %R%s HELP yazarak nasýl yapacaðýnýz
hakkýnda bilgi alabilirsiniz.
Registers a channel in the %S database. In order
to use this command, you must first be a channel operator
on the channel you're trying to register.
The description, which must be included, is a
general description of the channel's purpose.
CHAN_HELP_IDENTIFY
Kullanýmý: IDENTIFY kanaladý þifre
%S tarafýndan kanalýn founderý olarak tanýnmanýzý saðlar.
Birçok komutu kullanabilmek için kendinizi kanalýn sahibi
(founder) olarak bu komutu kullanarak tanýtmanýz gerekir.
Þifre kanalý kaydederken kullandýðýnýz þifreyle aynýdýr.
When you register a channel, you are recorded as the
"founder" of the channel. The channel founder is allowed
to change all of the channel settings for the channel;
%S will also automatically give the founder
channel-operator privileges when s/he enters the channel.
See the ACCESS command (%R%S HELP ACCESS) for
information on giving a subset of these privileges to
other channel users.
CHAN_HELP_LOGOUT
Kullanýmý: LOGOUT kanaladý nick
Bu komut belirtilen nickin artýk belirtilen kanal için
tanýmlanmamasýný saðlar.
Eðer kanalýn founderý iseniz istediðiniz kiþi üzerinde,
deðilseniz kendi üzerinizde bu komutu kullanabilirsiniz.
NOTICE: In order to register a channel, you must have
first registered your nickname. If you haven't,
%R%s HELP for information on how to do so.
CHAN_HELP_DROP
Kullanýmý: DROP kanaladý
Kanalýn kaydýný siler. Sadece kanal founderý tarafýndan
kullanýlabilir ve o kiþinin önce IDENTIFY komutunu kullanarak
kanalýn sahibi olduðunu belirtmesi gerekir.
Kanalýn kaydýný siler.
CHAN_HELP_SET
Kullanýmý: SET kanaladý özellik parametre
@@ -4288,7 +4300,6 @@ CHAN_HELP_SET
FOUNDER Kanal founderýný belirler
SUCCESSOR Kanal successorýný belirler
PASSWORD Founder þifresini belirler
DESC Kanal açýklamasýný belirler
URL Kanala bir URL adresini iliþkilendirir
EMAIL Kanala bir E-mail adresini iliþkilendirir
@@ -4307,6 +4318,7 @@ CHAN_HELP_SET
OPNOTICE OP/DEOP komutlarý kullanýldýðýnda mesaj yollar
PEACE kritik komutlarin kullanilmasini engeller
XOP Ayricalik sistemleri arasinda geçisi saglar
PERSIST Set the channel as permanent
Belirli bir özellik hakkýnda daha fazla bilgi için
@@ -4329,11 +4341,6 @@ CHAN_HELP_SET_SUCCESSOR
için bir successor belirtilmemiþse kanalýn kaydý silinir(drop).
Komutta belirtilen nickin kayýtlý olmasý gereklidir.
CHAN_HELP_SET_PASSWORD
Kullanýmý: SET kanaladý PASSWORD þifre
Kanal founderýnýn þifresini deðiþtirir.
CHAN_HELP_SET_DESC
Kullanýmý: SET kanaladý DESC açýklama
@@ -4506,6 +4513,29 @@ CHAN_HELP_SET_XOP
Bunlarin disinda xOP sisteminden access sistemine geçmek
bir problem çikarmaz.
CHAN_HELP_SET_PERSIST
Syntax: SET channel PERSIST {ON | OFF}
Enables or disables the persistant channel setting.
When persistant is set, the service bot will remain
in the channel when it has emptied of users.
If your IRCd does not a permanent (persistant) channel
mode you must have a service bot in your channel to
set persist on, and it can not be unassigned while persist
is on.
If this network does not have BotServ enabled and does
not have a permanent channel mode, ChanServ will
join your channel when you set persist on (and leave when
it has been set off).
If your IRCd has a permanent (persistant) channel mode
and is is set or unset (for any reason, including MLOCK),
persist is automatically set and unset for the channel aswell.
Additionally, services will set or unset this mode when you
set persist on or off.
CHAN_HELP_SET_OPNOTICE
Kullanýmý: SET kanaladý OPNOTICE {ON | OFF}
@@ -4514,6 +4544,45 @@ CHAN_HELP_SET_OPNOTICE
üzerinde OP veya DEOP komutlarýnýn kullanýldýðýný
belirten bir mesaj gönderir.
CHAN_HELP_QOP
Syntax: QOP channel ADD nick
QOP channel DEL {nick | entry-num | list}
QOP channel LIST [mask | list]
QOP channel CLEAR
Maintains the QOP (AutoOwner) list for a channel. The QOP
list gives users the right to be auto-owner on your channel,
which gives them almost (or potentially, total) access.
The QOP ADD command adds the given nickname to the
QOP list.
The QOP DEL command removes the given nick from the
QOP list. If a list of entry numbers is given, those
entries are deleted. (See the example for LIST below.)
The QOP LIST command displays the QOP list. If
a wildcard mask is given, only those entries matching the
mask are displayed. If a list of entry numbers is given,
only those entries are shown; for example:
QOP #channel LIST 2-5,7-9
Lists QOP entries numbered 2 through 5 and
7 through 9.
The QOP CLEAR command clears all entries of the
QOP list.
The QOP commands are limited to
founders (unless SECUREOPS is off). However, any user on the
QOP list may use the QOP LIST command.
This command may have been disabled for your channel, and
in that case you need to use the access list. See
%R%S HELP ACCESS for information about the access list,
and %R%S HELP SET XOP to know how to toggle between
the access list and xOP list systems.
CHAN_HELP_AOP
Kullanýmý: AOP kanaladi ADD nick
AOP kanaladi DEL {nick | kayit-no | liste}
@@ -4662,6 +4731,7 @@ CHAN_HELP_ACCESS
Kullanýmý: ACCESS kanaladý ADD nick seviye
ACCESS kanaladý DEL {nick | kayýt-no | liste}
ACCESS kanaladý LIST [mask | liste]
ACCESS kanaladý VIEW [mask | liste]
ACCESS kanaladý CLEAR
Bir kanal için access listesi oluþturur. Access listesi
@@ -4690,7 +4760,10 @@ CHAN_HELP_ACCESS
ACCESS #kanaladý LIST 2-5,7-9
2'den 5'e ve 7'den 9'a kadar olan access kayýtlarý
listelenir.
The ACCESS VIEW command displays the access list similar
to ACCESS LIST but shows the creator and last used time.
ACCESS CLEAR komutu tüm access listesini temizler.
CHAN_HELP_ACCESS_LEVELS
@@ -4760,28 +4833,30 @@ CHAN_HELP_AKICK
siler.
CHAN_HELP_LEVELS
Kullanýmý: LEVELS kanaladý SET tip seviye
Kullanýmý: LEVELS kanaladý SET tip [seviye|FOUNDER]
LEVELS kanaladý {DIS | DISABLE} tip
LEVELS kanaladý LIST
LEVELS kanaladý RESET
LEVELS komutu bir kanaldaki access seviyelerinin iyi
kontrolünü saðlar. Bu komutla, %S'ün birçok
fonksiyonu için gereken access seviyelerini
belirleyebilirsiniz. (SET FOUNDER ve SET PASSWORD
komutlarý ve bu komut sadece kanal founderý tarafýndan
kullanýlabilir.)
The LEVELS command allows fine control over the meaning of
the numeric access levels used for channels. With this
command, you can define the access level required for most
of %S's functions. (The SET FOUNDER and this command
are always restricted to the channel founder.)
LEVELS SET komutu bir fonksiyon yada fonksiyon gruplarý için
access seviyelerini deðiþtirmeye yarar. LEVELS DISABLE (veya
kýsaca DIS) otomatik bir özelliði kapatýr yada founderdan
baþkasýnýn kullanmasýný engeller. LEVELS LIST komutu
fonksiyonlar yada fonksiyon gruplarý için mevcut seviyeleri
gösterir. LEVELS RESET komutu seviyeleri varsayýlan deðerlerine
geri çevirir. (HELP ACCESS LEVELS e bakýn).
LEVELS SET allows the access level for a function or group of
functions to be changed. LEVELS DISABLE (or DIS for short)
disables an automatic feature or disallows access to a
function by anyone, INCLUDING the founder (although, the founder
can always reenable it).
Seviyeleri ayarlanabilecek fonksiyonlar için, HELP LEVELS DESC e
bakýn.
LEVELS LIST shows the current levels for each function or
group of functions. LEVELS RESET resets the levels to the
default levels of a newly-created channel (see
HELP ACCESS LEVELS).
For a list of the features and functions whose levels can be
set, see HELP LEVELS DESC.
CHAN_HELP_LEVELS_DESC
Aþaðýda seviyeleri deðiþtirilebilecek fonksiyonlar listelidir.
@@ -4908,10 +4983,10 @@ CHAN_HELP_INVITE
üzeri olanlar kullanabilir.
CHAN_HELP_UNBAN
Kullanýmý: UNBAN kanaladý
Kullanýmý: UNBAN kanaladý [nick]
%S'e sizin kanala girmenizi engelleyen tüm banlarý kaldýrmasýný
söyler.
Tells %S to remove all bans preventing you or the given
user from entering the given channel.
Varsayýlan olarak, AOP lar ile 5 ve üzeri access seviyesi olanlar
kullanabilir.
@@ -4971,35 +5046,11 @@ CHAN_HELP_GETKEY
Belirtilen kanalýn anahtarýný söyler.
CHAN_HELP_SENDPASS
Kullanýmý: SENDPASS kanaladý
Kanalýn þifresini founderýn nick kayýtlarýnda belirtilen
e-mail adresine gönderir. Bu komut kanal þifresini
unutanlarýn çok iþine yarayacaktýr.
Bazý networklerde IRC operatörlerinin Kullanýmýyla
sýnýrlandýrýlmýþ olabilir.
CHAN_SERVADMIN_HELP
Servis adminleri kanalýn kaydýný þifreyle tanýtmadan silebilir,
ve access, Akick ve seviye ayarlarýný görüntüleyebilirler.
CHAN_SERVADMIN_HELP_LOGOUT
Kullanýmý: LOGOUT kanaladý [nick]
Bu komut belirtilen nickin artýk belirtilen kanalda
tanýmlanmamasýný saðlar.
Eðer kanal founderý iseniz, istediðiniz kiþide, deðilseniz
sadece kendinizde bu komutu kullanabilirsiniz.
Eðer Servis admini iseniz, kanal founderý olmanýza gerek
olmadan istediðiniz kiþide bu komutu kullanabilirsiniz.
Hatta nick parametresini boþ býrakarak o kanalda kendini
kanala tanýtmýþ herkesi tanýmlanmamýþ yapabilirsiniz.
CHAN_SERVADMIN_HELP_DROP
Kullanýmý: DROP kanaladý
@@ -5024,8 +5075,8 @@ CHAN_SERVADMIN_HELP_SET_NOEXPIRE
CHAN_SERVADMIN_HELP_INFO
Servis adminleri herhangi bir kanal için ALL parametresini
kullanabilirler.
Services Operators with the chanserv/auspex permission can
use the ALL parameter with any channel.
CHAN_SERVADMIN_HELP_LIST
Kullanýmý: LIST model [FORBIDDEN] [NOEXPIRE]
@@ -6409,3 +6460,15 @@ OPER_UMODE_UNSUPPORTED
OPER_SUPER_ADMIN_NOT_ENABLED
SuperAdmin setting not enabled in services.conf
OPER_HELP_SYNC
Syntax: SQLSYNC
This command syncs your databases with SQL. You should
only have to execute this command once, when you initially
import your databases into SQL.
OPER_HELP_CMD_SQLSYNC
SQLSYNC Import your databases to SQL
OPER_SYNC_UPDATING
Updating MySQL.
OPER_SYNC_UPDATED
Finished updating MySQL.
+3 -1
View File
@@ -92,7 +92,8 @@ my @msgfilters = (
$msg = $location . $msg;
$location = "";
$msg =~ s/std::basic_string\<char\, std\:\:char_traits\<char\>, std::allocator\<char\> \>(\s+|)/std::string/g;
$msg =~ s/std::basic_string\<char\, .*?irc_char_traits\<char\>, std::allocator\<char\> \>(\s+|)/irc::string/g;
$msg =~ s/std::basic_string\<char\, .*?irc_char_traits, std::allocator\<char\> \>(\s+|)/irc::string/g;
$msg =~ s/std::basic_string\<char\, .*?ci_char_traits, std::allocator\<char\> \>(\s+|)/ci::string/g;
for my $stl (qw(deque vector list)) {
$msg =~ s/std::$stl\<(\S+), std::allocator\<\1\> \>/std::$stl\<$1\>/g;
$msg =~ s/std::$stl\<(std::pair\<\S+, \S+\>), std::allocator\<\1 \> \>/std::$stl<$1 >/g;
@@ -103,6 +104,7 @@ my @msgfilters = (
$msg =~ s/__gnu_cxx::__normal_iterator\<(std::pair\<\S+, \S+\>)\*, std::vector\<\1 \> \>/std::vector<$1 >::iterator/g;
$msg =~ s/__gnu_cxx::__normal_iterator\<char\*, std::string\>/std::string::iterator/g;
$msg =~ s/__gnu_cxx::__normal_iterator\<char\*, irc::string\>/irc::string::iterator/g;
$msg =~ s/__gnu_cxx::__normal_iterator\<char\*, ci::string\>/ci::string::iterator/g;
return $msg;
} ],
);
+13 -6
View File
@@ -2,10 +2,8 @@
file(GLOB SRC_SRCS_C RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.c")
file(GLOB SRC_SRCS_CPP RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.cpp")
set(SRC_SRCS ${SRC_SRCS_C} ${SRC_SRCS_CPP})
# If not using Visual Studio, don't include win32_memory.cpp, it's only required by Visual Studio to override it's override of the new/delete operators
if(NOT MSVC)
remove_item_from_list(SRC_SRCS win32_memory.cpp)
endif(NOT MSVC)
# Don't include win32_memory.cpp, it's only required by Visual Studio to override it's override of the new/delete operators
remove_item_from_list(SRC_SRCS win32_memory.cpp)
# If not using Windows, don't include windows.cpp, as it's Windows-specific
if(NOT WIN32)
remove_item_from_list(SRC_SRCS windows.cpp)
@@ -54,12 +52,21 @@ if(WIN32)
endif(MINGW)
endif(WIN32)
# If compiling with Visual Studio, create a static library out of win32_memory.cpp to be included with everything else, needed to override it's override of new/delete operators
if(MSVC)
set_source_files_properties(win32_memory.cpp PROPERTIES LANGUAGE CXX COMPILE_FLAGS "${CXXFLAGS}")
add_library(win32_memory STATIC win32_memory.cpp)
set(WIN32_MEMORY win32_memory)
else(MSVC)
set(WIN32_MEMORY)
endif(MSVC)
# Generate the Anope executable and set it's linker flags, also set it to export it's symbols even though it's not a module
add_executable(${PROGRAM_NAME} ${SRC_SRCS})
set_target_properties(${PROGRAM_NAME} PROPERTIES LINKER_LANGUAGE CXX LINK_FLAGS "${LDFLAGS}" ENABLE_EXPORTS ON)
# On Windows, also link Anope to the wsock32 library, as well as set the version
# On Windows, also link Anope to the wsock32 and Ws2_32 library, as well as set the version
if(WIN32)
target_link_libraries(${PROGRAM_NAME} wsock32)
target_link_libraries(${PROGRAM_NAME} wsock32 Ws2_32 ${WIN32_MEMORY})
set_target_properties(${PROGRAM_NAME} PROPERTIES VERSION "${VERSION_DOTTED}")
endif(WIN32)
# Building the Anope executable requires the language files to be compiled first as well as the version.h header to be generated
+11 -10
View File
@@ -1,13 +1,13 @@
OBJS = actions.o base64.o bots.o botserv.o channels.o chanserv.o command.o commands.o compat.o \
config.o datafiles.o encrypt.o hashcomp.o hostserv.o init.o ircd.o language.o log.o mail.o main.o \
memory.o memoserv.o messages.o misc.o modules.o news.o nickserv.o operserv.o \
process.o protocol.o send.o servers.o sessions.o slist.o sockutil.o opertype.o users.o module.o modulemanager.o configreader.o \
wildcard.o nickcore.o nickalias.o timers.o
config.o encrypt.o hashcomp.o hostserv.o init.o ircd.o language.o log.o mail.o main.o \
memory.o memoserv.o messages.o misc.o modules.o nickserv.o operserv.o \
process.o protocol.o send.o servers.o sessions.o slist.o sockets.o opertype.o users.o module.o modulemanager.o configreader.o \
wildcard.o nickcore.o nickalias.o timers.o modes.o regchannel.o
INCLUDES = ../include/commands.h ../include/defs.h ../include/language.h \
../include/pseudo.h ../include/sysconf.h ../include/config.h \
../include/messages.h ../include/services.h \
../include/timers.h ../include/datafiles.h ../include/extern.h \
../include/timers.h ../include/extern.h \
../include/modules.h ../include/slist.h ../include/hashcomp.h
MAKEARGS = 'CFLAGS=${CFLAGS}' 'CC=${CC}' 'ANOPELIBS=${ANOPELIBS}' \
@@ -16,7 +16,7 @@ MAKEARGS = 'CFLAGS=${CFLAGS}' 'CC=${CC}' 'ANOPELIBS=${ANOPELIBS}' \
'TOUCH=${TOUCH}' 'SHELL=${SHELL}' \
'RUNGROUP=${RUNGROUP}' \
'SHARED=${SHARED}' 'MODULEFLAGS=${MODULEFLAGS}' \
'MAKEBIN=${MAKEBIN}'
'MAKEBIN=${MAKEBIN}' 'MYSQLDIR=${MYSQLDIR}'
.c.o:
$(MAKEBIN) $(CC) $(CFLAGS) -I../include/ -c $<
@@ -33,6 +33,7 @@ services: $(OBJS)
$(MAKEBIN) $(CC) $(CFLAGS) $(OBJS) $(ANOPELIBS) $(MLIBS) -o $@ $(LDFLAGS)
$(OBJS): Makefile
modes.o: modes.cpp $(INCLUDES)
timers.o: timers.cpp $(INCLUDES)
nickcore.o: nickcore.cpp $(INCLUDES)
nickalias.o: nickalias.cpp $(INCLUDES)
@@ -46,7 +47,6 @@ command.o: command.cpp $(INCLUDES)
commands.o: commands.c $(INCLUDES)
compat.o: compat.c $(INCLUDES)
config.o: config.c $(INCLUDES)
datafiles.o: datafiles.c $(INCLUDES)
encrypt.o: encrypt.c $(INCLUDES)
init.o: init.c $(INCLUDES)
ircd.o: ircd.c $(INCLUDES)
@@ -62,16 +62,16 @@ modules.o: modules.c $(INCLUDES)
module.o: module.cpp $(INCLUDES)
modulemanager.o: modulemanager.cpp $(INCLUDES)
misc.o: misc.c $(INCLUDES)
news.o: news.c $(INCLUDES)
nickserv.o: nickserv.c $(INCLUDES)
operserv.o: operserv.c $(INCLUDES)
process.o: process.c $(INCLUDES)
protocol.o: protocol.cpp $(INCLUDES)
regchannel.o: regchannel.cpp $(INCLUDES)
send.o: send.c $(INCLUDES)
servers.o: servers.c $(INCLUDES)
sessions.o: sessions.c $(INCLUDES)
slist.o: slist.c $(INCLUDES)
sockutil.o: sockutil.c $(INCLUDES)
sockets.o: sockets.cpp $(INCLUDES)
opertype.o: opertype.cpp $(INCLUDES)
users.o: users.c $(INCLUDES)
vsnprintf.o: vsnprintf.c $(INCLUDES)
@@ -116,7 +116,8 @@ install: services
$(INSTALL) bin/anoperc $(INSTDIR)/bin/anoperc
test -d ${INSTDIR}/data || mkdir ${INSTDIR}/data
(cd ../lang ; $(MAKE) install)
$(CP) ../data/* $(INSTDIR)/data
$(CP) ../data/*.* $(INSTDIR)/data
$(INSTALL) bin/mydbgen $(INSTDIR)/bin/mydbgen
test -d $(INSTDIR)/data/backups || mkdir $(INSTDIR)/data/backups
test -d $(INSTDIR)/data/logs || mkdir $(INSTDIR)/data/logs
@if [ "$(INSTDIR)/data/modules" ] ; then \
+65 -120
View File
@@ -1,6 +1,6 @@
/* Various routines to perform simple actions.
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -20,24 +20,26 @@
* Note a bad password attempt for the given user. If they've used up
* their limit, toss them off.
* @param u the User to check
* @return void
* @return true if the user was killed, otherwise false
*/
void bad_password(User * u)
bool bad_password(User *u)
{
time_t now = time(NULL);
if (!u || !BadPassLimit) {
return;
if (!u || !Config.BadPassLimit)
return false;
if (Config.BadPassTimeout > 0 && u->invalid_pw_time > 0 && u->invalid_pw_time < now - Config.BadPassTimeout)
u->invalid_pw_count = 0;
++u->invalid_pw_count;
u->invalid_pw_time = now;
if (u->invalid_pw_count >= Config.BadPassLimit)
{
kill_user("", u->nick, "Too many invalid passwords");
return true;
}
if (BadPassTimeout > 0 && u->invalid_pw_time > 0
&& u->invalid_pw_time < now - BadPassTimeout)
u->invalid_pw_count = 0;
u->invalid_pw_count++;
u->invalid_pw_time = now;
if (u->invalid_pw_count >= BadPassLimit) {
kill_user(NULL, u->nick, "Too many invalid passwords");
}
return false;
}
/*************************************************************************/
@@ -49,27 +51,21 @@ void bad_password(User * u)
* @param reason for the kill
* @return void
*/
void kill_user(const char *source, const char *user, const char *reason)
void kill_user(const std::string &source, const std::string &user, const std::string &reason)
{
char buf[BUFSIZE];
if (!user || !*user) {
if (user.empty())
return;
}
if (!source || !*source) {
source = ServerName;
}
if (!reason) {
reason = "";
}
snprintf(buf, sizeof(buf), "%s (%s)", source, reason);
std::string real_source = source.empty() ? Config.ServerName : source;
ircdproto->SendSVSKill(source, user, buf);
snprintf(buf, sizeof(buf), "%s (%s)", source.c_str(), reason.c_str());
if (!ircd->quitonkill && finduser(user)) {
ircdproto->SendSVSKill(findbot(source), finduser(user), buf);
if (!ircd->quitonkill && finduser(user))
do_kill(user, buf);
}
}
/*************************************************************************/
@@ -80,44 +76,42 @@ void kill_user(const char *source, const char *user, const char *reason)
* @param reason for the sqline
* @return void
*/
void sqline(char *mask, char *reason)
void sqline(const std::string &mask, const std::string &reason)
{
int i;
Channel *c, *next;
const char *av[3];
struct c_userlist *cu, *cunext;
if (ircd->chansqline) {
if (*mask == '#') {
if (ircd->chansqline)
{
if (mask[0] == '#')
{
ircdproto->SendSQLine(mask, reason);
for (i = 0; i < 1024; i++) {
for (c = chanlist[i]; c; c = next) {
for (i = 0; i < 1024; ++i)
{
for (c = chanlist[i]; c; c = next)
{
next = c->next;
if (!Anope::Match(c->name, mask, false)) {
if (!Anope::Match(c->name, mask, false))
continue;
}
for (cu = c->users; cu; cu = cunext) {
cunext = cu->next;
if (is_oper(cu->user)) {
for (CUserList::iterator it = c->users.begin(); it != c->users.end();)
{
UserContainer *uc = *it;
++it;
if (is_oper(uc->user))
continue;
}
av[0] = c->name;
av[1] = cu->user->nick;
av[2] = reason;
ircdproto->SendKick(findbot(s_OperServ), av[0], av[1],
"Q-Lined: %s", av[2]);
do_kick(s_ChanServ, 3, av);
c->Kick(NULL, uc->user, "%s", reason.c_str());
}
}
}
} else {
ircdproto->SendSQLine(mask, reason);
}
} else {
ircdproto->SendSQLine(mask, reason);
else
ircdproto->SendSQLine(mask, reason);
}
else
ircdproto->SendSQLine(mask, reason);
}
/*************************************************************************/
@@ -128,99 +122,50 @@ void sqline(char *mask, char *reason)
* @param nick to remove the ban for
* @return void
*/
void common_unban(ChannelInfo * ci, char *nick)
void common_unban(ChannelInfo *ci, const std::string &nick)
{
const char *av[4];
char *host = NULL;
char buf[BUFSIZE];
int ac;
uint32 ip = 0;
User *u;
Entry *ban, *next;
if (!ci || !ci->c || !nick) {
return;
}
if (!(u = finduser(nick))) {
return;
}
if (!ci->c->bans || (ci->c->bans->count == 0))
if (!ci || !ci->c || nick.empty())
return;
if (u->hostip == NULL) {
if (!(u = finduser(nick)))
return;
if (!ci->c->bans || !ci->c->bans->count)
return;
if (u->hostip == NULL)
{
host = host_resolve(u->host);
/* we store the just resolved hostname so we don't
* need to do this again */
if (host) {
if (host)
u->hostip = sstrdup(host);
}
} else {
host = sstrdup(u->hostip);
}
else
host = sstrdup(u->hostip);
/* Convert the host to an IP.. */
if (host)
ip = str_is_ip(host);
if (ircd->svsmode_unban) {
ircdproto->SendBanDel(ci->name, nick);
} else {
if (ircdcap->tsmode) {
snprintf(buf, BUFSIZE - 1, "%ld", static_cast<long>(time(NULL)));
av[0] = ci->name;
av[1] = buf;
av[2] = "-b";
ac = 4;
} else {
av[0] = ci->name;
av[1] = "-b";
ac = 3;
}
for (ban = ci->c->bans->entries; ban; ban = next) {
if (ircd->svsmode_unban)
ircdproto->SendBanDel(ci->c, nick);
else
{
for (ban = ci->c->bans->entries; ban; ban = next)
{
next = ban->next;
if (entry_match(ban, u->nick, u->GetIdent().c_str(), u->host, ip) ||
entry_match(ban, u->nick, u->GetIdent().c_str(), u->GetDisplayedHost().c_str(), ip)) {
ircdproto->SendMode(whosends(ci), ci->name, "-b %s", ban->mask);
if (ircdcap->tsmode)
av[3] = ban->mask;
else
av[2] = ban->mask;
do_cmode(whosends(ci)->nick, ac, av);
}
if (entry_match(ban, u->nick.c_str(), u->GetIdent().c_str(), u->host, ip) || entry_match(ban, u->nick.c_str(), u->GetIdent().c_str(), u->GetDisplayedHost().c_str(), ip))
ci->c->RemoveMode(NULL, CMODE_BAN, ban->mask);
}
}
/* host_resolve() sstrdup us this info so we gotta free it */
if (host) {
if (host)
delete [] host;
}
}
/*************************************************************************/
/**
* Prepare to set SVSMODE and update internal user modes
* @param u user to apply modes to
* @param modes the modes to set on the user
* @param arg the arguments for the user modes
* @return void
*/
void common_svsmode(User * u, const char *modes, const char *arg)
{
int ac = 1;
const char *av[2];
av[0] = modes;
if (arg) {
av[1] = arg;
ac++;
}
ircdproto->SendSVSMode(u, ac, av);
ircdproto->ProcessUsermodes(u, ac, av);
}
/*************************************************************************/
+125 -119
View File
@@ -1,6 +1,6 @@
/* base64 routines.
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -18,16 +18,16 @@
#include "services.h"
static char *int_to_base64(long);
static long base64_to_int(char *);
static long base64_to_int(const char *);
const char* base64enc(long i)
const char *base64enc(long i)
{
if (i < 0)
return ("0");
return "0";
return int_to_base64(i);
}
long base64dec(char* b64)
long base64dec(const char *b64)
{
if (b64)
return base64_to_int(b64);
@@ -35,7 +35,6 @@ long base64dec(char* b64)
return 0;
}
static const char Base64[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
static const char Pad64 = '=';
@@ -103,14 +102,15 @@ static const char Pad64 = '=';
characters followed by one "=" padding character.
*/
int b64_encode(char *src, size_t srclength, char *target, size_t targsize)
int b64_encode(const char *src, size_t srclength, char *target, size_t targsize)
{
size_t datalength = 0;
unsigned char input[3];
unsigned char output[4];
size_t i;
while (2 < srclength) {
while (2 < srclength)
{
input[0] = *src++;
input[1] = *src++;
input[2] = *src++;
@@ -122,7 +122,7 @@ int b64_encode(char *src, size_t srclength, char *target, size_t targsize)
output[3] = input[2] & 0x3f;
if (datalength + 4 > targsize)
return (-1);
return -1;
target[datalength++] = Base64[output[0]];
target[datalength++] = Base64[output[1]];
target[datalength++] = Base64[output[2]];
@@ -130,10 +130,11 @@ int b64_encode(char *src, size_t srclength, char *target, size_t targsize)
}
/* Now we worry about padding. */
if (0 != srclength) {
if (srclength)
{
/* Get what's left. */
input[0] = input[1] = input[2] = '\0';
for (i = 0; i < srclength; i++)
for (i = 0; i < srclength; ++i)
input[i] = *src++;
output[0] = input[0] >> 2;
@@ -141,7 +142,7 @@ int b64_encode(char *src, size_t srclength, char *target, size_t targsize)
output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
if (datalength + 4 > targsize)
return (-1);
return -1;
target[datalength++] = Base64[output[0]];
target[datalength++] = Base64[output[1]];
if (srclength == 1)
@@ -151,9 +152,9 @@ int b64_encode(char *src, size_t srclength, char *target, size_t targsize)
target[datalength++] = Pad64;
}
if (datalength >= targsize)
return (-1);
target[datalength] = '\0'; /* Returned value doesn't count \0. */
return (datalength);
return -1;
target[datalength] = '\0'; /* Returned value doesn't count \0. */
return datalength;
}
/* skips all whitespace anywhere.
@@ -170,7 +171,8 @@ int b64_decode(const char *src, char *target, size_t targsize)
state = 0;
tarindex = 0;
while ((ch = *src++) != '\0') {
while ((ch = *src++) != '\0')
{
if (isspace(ch)) /* Skip whitespace anywhere. */
continue;
@@ -178,51 +180,54 @@ int b64_decode(const char *src, char *target, size_t targsize)
break;
pos = const_cast<char *>(strchr(Base64, ch));
if (pos == 0) /* A non-base64 character. */
return (-1);
if (!pos) /* A non-base64 character. */
return -1;
switch (state) {
case 0:
if (target) {
if (static_cast<size_t>(tarindex) >= targsize)
return (-1);
target[tarindex] = (pos - Base64) << 2;
}
state = 1;
break;
case 1:
if (target) {
if (static_cast<size_t>(tarindex) + 1 >= targsize)
return (-1);
target[tarindex] |= (pos - Base64) >> 4;
target[tarindex + 1] = ((pos - Base64) & 0x0f)
<< 4;
}
tarindex++;
state = 2;
break;
case 2:
if (target) {
if (static_cast<size_t>(tarindex) + 1 >= targsize)
return (-1);
target[tarindex] |= (pos - Base64) >> 2;
target[tarindex + 1] = ((pos - Base64) & 0x03)
<< 6;
}
tarindex++;
state = 3;
break;
case 3:
if (target) {
if (static_cast<size_t>(tarindex) >= targsize)
return (-1);
target[tarindex] |= (pos - Base64);
}
tarindex++;
state = 0;
break;
default:
abort();
switch (state)
{
case 0:
if (target)
{
if (static_cast<size_t>(tarindex) >= targsize)
return -1;
target[tarindex] = (pos - Base64) << 2;
}
state = 1;
break;
case 1:
if (target)
{
if (static_cast<size_t>(tarindex) + 1 >= targsize)
return -1;
target[tarindex] |= (pos - Base64) >> 4;
target[tarindex + 1] = ((pos - Base64) & 0x0f) << 4;
}
++tarindex;
state = 2;
break;
case 2:
if (target)
{
if (static_cast<size_t>(tarindex) + 1 >= targsize)
return -1;
target[tarindex] |= (pos - Base64) >> 2;
target[tarindex + 1] = ((pos - Base64) & 0x03) << 6;
}
++tarindex;
state = 3;
break;
case 3:
if (target)
{
if (static_cast<size_t>(tarindex) >= targsize)
return -1;
target[tarindex] |= (pos - Base64);
}
++tarindex;
state = 0;
break;
default:
abort();
}
}
@@ -231,53 +236,57 @@ int b64_decode(const char *src, char *target, size_t targsize)
* on a byte boundary, and/or with erroneous trailing characters.
*/
if (ch == Pad64) { /* We got a pad char. */
if (ch == Pad64) /* We got a pad char. */
{
ch = *src++; /* Skip it, get next. */
switch (state) {
case 0: /* Invalid = in first position */
case 1: /* Invalid = in second position */
return (-1);
switch (state)
{
case 0: /* Invalid = in first position */
case 1: /* Invalid = in second position */
return -1;
case 2: /* Valid, means one byte of info */
/* Skip any number of spaces. */
for (; ch != '\0'; ch = *src++)
if (!isspace(ch))
break;
/* Make sure there is another trailing = sign. */
if (ch != Pad64)
return (-1);
ch = *src++; /* Skip the = */
/* Fall through to "single trailing =" case. */
/* FALLTHROUGH */
case 2: /* Valid, means one byte of info */
/* Skip any number of spaces. */
for (; ch != '\0'; ch = *src++)
if (!isspace(ch))
break;
/* Make sure there is another trailing = sign. */
if (ch != Pad64)
return -1;
ch = *src++; /* Skip the = */
/* Fall through to "single trailing =" case. */
/* FALLTHROUGH */
case 3: /* Valid, means two bytes of info */
/*
* We know this char is an =. Is there anything but
* whitespace after it?
*/
for (; ch != '\0'; ch = *src++)
if (!isspace(ch))
return (-1);
case 3: /* Valid, means two bytes of info */
/*
* We know this char is an =. Is there anything but
* whitespace after it?
*/
for (; ch != '\0'; ch = *src++)
if (!isspace(ch))
return -1;
/*
* Now make sure for cases 2 and 3 that the "extra"
* bits that slopped past the last full byte were
* zeros. If we don't check them, they become a
* subliminal channel.
*/
if (target && target[tarindex] != 0)
return (-1);
/*
* Now make sure for cases 2 and 3 that the "extra"
* bits that slopped past the last full byte were
* zeros. If we don't check them, they become a
* subliminal channel.
*/
if (target && target[tarindex])
return -1;
}
} else {
}
else
{
/*
* We ended by seeing the end of the string. Make sure we
* have no partial bytes lying around.
*/
if (state != 0)
return (-1);
if (state)
return -1;
}
return (tarindex);
return tarindex;
}
const char* encode_ip(unsigned char *ip)
@@ -290,13 +299,14 @@ const char* encode_ip(unsigned char *ip)
if (!ip)
return "*";
if (strchr(reinterpret_cast<char *>(ip), ':')) {
if (strchr(reinterpret_cast<char *>(ip), ':'))
return NULL;
} else {
else
{
s_ip = str_signed(ip);
ia.s_addr = inet_addr(s_ip);
cp = reinterpret_cast<unsigned char *>(ia.s_addr);
b64_encode(reinterpret_cast<char *>(&cp), sizeof(struct in_addr), buf, 25);
b64_encode(reinterpret_cast<const char *>(&cp), sizeof(struct in_addr), buf, 25);
}
return buf;
}
@@ -309,9 +319,9 @@ int decode_ip(const char *buf)
b64_decode(buf, targ, 25);
ia = *reinterpret_cast<struct in_addr *>(targ);
if (len == 24) { /* IPv6 */
if (len == 24) /* IPv6 */
return 0;
} else if (len == 8) /* IPv4 */
else if (len == 8) /* IPv4 */
return ia.s_addr;
else /* Error?? */
return 0;
@@ -364,28 +374,28 @@ static char *int_to_base64(long val)
* if the value is then too large it can easily lead to
* a buffer underflow and thus to a crash. -- Syzop
*/
if (val > 2147483647L) {
if (val > 2147483647L)
abort();
}
do {
do
{
base64buf[--i] = int6_to_base64_map[val & 63];
}
while (val >>= 6);
} while (val >>= 6);
return base64buf + i;
}
static long base64_to_int(char *b64)
static long base64_to_int(const char *b64)
{
int v = base64_to_int6_map[static_cast<unsigned char>(*b64++)];
int v = base64_to_int6_map[static_cast<const unsigned char>(*b64++)];
if (!b64)
return 0;
while (*b64) {
while (*b64)
{
v <<= 6;
v += base64_to_int6_map[static_cast<unsigned char>(*b64++)];
v += base64_to_int6_map[static_cast<const unsigned char>(*b64++)];
}
return v;
@@ -393,18 +403,14 @@ static long base64_to_int(char *b64)
long base64dects(const char *ts)
{
char *token;
long value;
if (!ts) {
if (!ts)
return 0;
}
token = myStrGetToken(ts, '!', 1);
if (!token) {
char *token = myStrGetToken(ts, '!', 1);
if (!token)
return strtoul(ts, NULL, 10);
}
value = base64dec(token);
long value = base64dec(token);
delete [] token;
return value;
}
+1 -1
View File
@@ -1,7 +1,7 @@
# If not on Windows, generate anoperc and install it along with mydbgen
if(NOT WIN32)
configure_file(${Anope_SOURCE_DIR}/src/bin/anoperc.in ${Anope_BINARY_DIR}/src/bin/anoperc)
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/anoperc
install (PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/anoperc ${CMAKE_CURRENT_SOURCE_DIR}/mydbgen
DESTINATION bin
)
+1 -1
View File
@@ -2,7 +2,7 @@
#
# Configuration script for Services
#
# (C) 2003-2008 Anope Team
# (C) 2003-2010 Anope Team
# Contact us at team@anope.org
#
# Please read COPYING and README for further details.
+156
View File
@@ -0,0 +1,156 @@
#!/bin/sh
#
# $Id$
# Location of the .sql file with the schema
DBSQL="tables.sql"
# Schema Version
SVER="1"
# Local Version, defaults to 0
LVER="0"
TFILE="/tmp/.anopedb.$$"
if [ "`eval echo -n 'a'`" = "-n a" ] ; then
c="\c"
else
n="-n"
fi
DBFILE=../data/$DBSQL
if [ ! -f "./$DBFILE" ] ; then
echo "Error: Required file $DBSQL was not found!";
exit
fi
echo ""
echo "This script will guide you through the process of configuring your Anope"
echo "installation to make use of MySQL support. This script must be used for both"
echo "new installs as well as for upgrading for users who have a previous version"
echo "of Anope installed"
while [ -z "$SQLHOST" ] ; do
echo ""
echo "What is the hostname of your MySQL server?"
echo $n "-> $c"
read cc
if [ ! -z "$cc" ] ; then
SQLHOST=$cc
fi
done
while [ -z "$SQLUSER" ] ; do
echo ""
echo "What is your MySQL username?"
echo $n "-> $c"
read cc
if [ ! -z "$cc" ] ; then
SQLUSER=$cc
fi
done
OLD_TTY=`stty -g`
echo ""
echo "What is your MySQL password?"
echo $n "-> $c"
stty -echo echonl
read cc
SQLPASS_PREFIX=""
if [ ! -z "$cc" ] ; then
SQLPASS_PREFIX="-p"
SQLPASS=$cc
fi
stty $OLD_TTY
mysqlshow -h$SQLHOST -u$SQLUSER $SQLPASS_PREFIX$SQLPASS >/dev/null 2>&1
if test "$?" = "1" ; then
echo "Error: Unable to login, verify your login/password and hostname"
exit
fi
while [ -z "$SQLDB" ] ; do
echo ""
echo "What is the name of the Anope SQL database?"
echo $n "-> $c"
read cc
if [ ! -z "$cc" ] ; then
SQLDB=$cc
fi
done
MYSQLDUMP="mysqldump -h$SQLHOST -u$SQLUSER $SQLPASS_PREFIX$SQLPASS $SQLDB"
MYSQLSHOW="mysqlshow -h$SQLHOST -u$SQLUSER $SQLPASS_PREFIX$SQLPASS $SQLDB"
MYSQL="mysql -h$SQLHOST -u$SQLUSER $SQLPASS_PREFIX$SQLPASS $SQLDB"
echo ""
$MYSQLSHOW | grep -q $SQLDB
if test "$?" = "1" ; then
echo -n "Unable to find databse, creating... "
mysql -h$SQLHOST -u$SQLUSER $SQLPASS_PREFIX$SQLPASS -Bs -e "create database $SQLDB" >/dev/null 2>&1
if test "$?" = "0" ; then
echo "done!"
else
echo "failed!"
FAILED="$FAILED 'database creation'"
fi
fi
$MYSQL -Bs -e "show tables like 'anope_os_core'" | grep -q anope_os_core
if test "$?" = "1" ; then
echo -n "Unable to find Anope schema, creating... "
$MYSQL < $DBFILE
if test "$?" = "0" ; then
echo "done!"
else
echo "failed!"
FAILED="$FAILED 'schema creation'"
fi
else
echo "done!"
fi
echo ""
if [ $LVER -ne $SVER ]; then
echo -n "Inserting initial version number... "
$MYSQL -Bs -e "delete from anope_info"
echo "INSERT INTO anope_info (version, date) VALUES ($SVER, now())" > $TFILE
$MYSQL < $TFILE >/dev/null 2>&1
if test "$?" = "0" ; then
echo "done!"
else
echo "failed!"
FAILED="$FAILED 'version insert'"
fi
fi
rm -f $TFILE
if test "x$FAILED" = "x" ; then
# Try to find out more about this installation
SQLPORT="$(mysql_config --port 2> /dev/null)"
echo ""
echo "Your MySQL setup is complete and your Anope schema is up to date. Make"
echo "sure you configure MySQL on your services.conf file prior to launching"
echo "Anope with MySQL support. Your configuration values are:"
echo ""
echo "mysql"
echo "{"
echo " database = \"$SQLDB\""
echo " server = \"$SQLHOST\""
echo " username = \"$SQLUSER\""
echo " password = \"$SQLPASS\""
echo " port = \"$SQLPORT\""
echo " updatedelay = \"60\""
echo "}"
echo ""
else
echo "The following operations failed:"
echo "$FAILED"
fi
exit
+68 -92
View File
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2008-2009 Robin Burchell <w00t@inspircd.org>
* Copyright (C) 2008-2009 Anope Team <team@anope.org>
* Copyright (C) 2008-2010 Robin Burchell <w00t@inspircd.org>
* Copyright (C) 2008-2010 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*
@@ -12,77 +12,62 @@
#include "services.h"
#include "modules.h"
BotInfo::BotInfo(const char *nnick)
BotInfo::BotInfo(const std::string &nnick, const std::string &nuser, const std::string &nhost, const std::string &nreal)
{
this->nick = sstrdup(nnick);
this->lastmsg = time(NULL);
this->uid = ts6_uid_retrieve(); // XXX is this safe? has ts6 been setup yet?
nbots++;
this->nick = nnick;
this->user = nuser;
this->host = nhost;
this->real = nreal;
this->lastmsg = this->created = time(NULL);
this->uid = ts6_uid_retrieve();
this->cmdTable = NULL;
this->flags = 0;
++nbots;
this->chancount = 0;
if (s_ChanServ && !stricmp(s_ChanServ, nnick))
this->flags |= BI_CHANSERV;
else if (s_BotServ && !stricmp(s_BotServ, nnick))
this->flags |= BI_BOTSERV;
else if (s_HostServ && !stricmp(s_HostServ, nnick))
this->flags |= BI_HOSTSERV;
else if (s_OperServ && !stricmp(s_OperServ, nnick))
this->flags |= BI_OPERSERV;
else if (s_MemoServ && !stricmp(s_MemoServ, nnick))
this->flags |= BI_MEMOSERV;
else if (s_NickServ && !stricmp(s_NickServ, nnick))
this->flags |= BI_NICKSERV;
else if (s_GlobalNoticer && !stricmp(s_GlobalNoticer, nnick))
this->flags |= BI_GLOBAL;
FOREACH_MOD(I_OnBotPreLoad, OnBotPreLoad(this));
ci::string ci_nick(nnick.c_str());
if (Config.s_ChanServ && ci_nick == Config.s_ChanServ)
{
this->cmdTable = CHANSERV;
this->SetFlag(BI_CHANSERV);
}
else if (Config.s_BotServ && ci_nick == Config.s_BotServ)
{
this->cmdTable = BOTSERV;
this->SetFlag(BI_BOTSERV);
}
else if (Config.s_HostServ && ci_nick == Config.s_HostServ)
{
this->cmdTable = HOSTSERV;
this->SetFlag(BI_HOSTSERV);
}
else if (Config.s_OperServ && ci_nick == Config.s_OperServ)
{
this->cmdTable = OPERSERV;
this->SetFlag(BI_OPERSERV);
}
else if (Config.s_MemoServ && ci_nick == Config.s_MemoServ)
{
this->cmdTable = MEMOSERV;
this->SetFlag(BI_MEMOSERV);
}
else if (Config.s_NickServ && ci_nick == Config.s_NickServ)
{
this->cmdTable = NICKSERV;
this->SetFlag(BI_NICKSERV);
}
else if (Config.s_GlobalNoticer && ci_nick == Config.s_GlobalNoticer)
{
this->SetFlag(BI_GLOBAL);
}
insert_bot(this); // XXX, this is ugly, but it needs to stay until hashing of bots is redone in STL.
// If we're synchronised with the uplink already, call introduce_user() for this bot.
alog("serv_uplink is %p and status is %d", static_cast<void *>(serv_uplink), serv_uplink ? serv_uplink->sync == SSYNC_DONE : 0);
if (serv_uplink && serv_uplink->sync == SSYNC_DONE)
ircdproto->SendClientIntroduction(this->nick, this->user, this->host, this->real, ircd->pseudoclient_mode, this->uid.c_str());
}
BotInfo::BotInfo(const char *nnick, const char *nuser, const char *nhost, const char *nreal)
{
this->nick = sstrdup(nnick);
this->user = sstrdup(nuser);
this->host = sstrdup(nhost);
this->real = sstrdup(nreal);
this->lastmsg = time(NULL);
this->uid = ts6_uid_retrieve(); // XXX is this safe? has ts6 been setup yet?
nbots++;
this->cmdTable = NULL;
this->flags = 0;
this->chancount = 0;
if (s_ChanServ && !stricmp(s_ChanServ, nnick))
this->flags |= BI_CHANSERV;
else if (s_BotServ && !stricmp(s_BotServ, nnick))
this->flags |= BI_BOTSERV;
else if (s_HostServ && !stricmp(s_HostServ, nnick))
this->flags |= BI_HOSTSERV;
else if (s_OperServ && !stricmp(s_OperServ, nnick))
this->flags |= BI_OPERSERV;
else if (s_MemoServ && !stricmp(s_MemoServ, nnick))
this->flags |= BI_MEMOSERV;
else if (s_NickServ && !stricmp(s_NickServ, nnick))
this->flags |= BI_NICKSERV;
else if (s_GlobalNoticer && !stricmp(s_GlobalNoticer, nnick))
this->flags |= BI_GLOBAL;
FOREACH_MOD(I_OnBotPreLoad, OnBotPreLoad(this));
insert_bot(this); // XXX, this is ugly, but it needs to stay until hashing of bots is redone in STL.
// If we're synchronised with the uplink already, call introduce_user() for this bot.
alog("serv_uplink is %p and status is %d", static_cast<void *>(serv_uplink), serv_uplink ? serv_uplink->sync == SSYNC_DONE : 0);
if (serv_uplink && serv_uplink->sync == SSYNC_DONE)
ircdproto->SendClientIntroduction(this->nick, this->user, this->host, this->real, ircd->pseudoclient_mode, this->uid.c_str());
{
ircdproto->SendClientIntroduction(this->nick, this->user, this->host, this->real, ircd->pseudoclient_mode, this->uid);
ircdproto->SendSQLine(this->nick, "Reserved for services");
}
}
BotInfo::~BotInfo()
@@ -90,7 +75,7 @@ BotInfo::~BotInfo()
int i;
ChannelInfo *ci;
for (i = 0; i < 256; i++)
for (i = 0; i < 256; ++i)
for (ci = chanlists[i]; ci; ci = ci->next)
if (ci->bi == this)
ci->bi = NULL;
@@ -100,14 +85,9 @@ BotInfo::~BotInfo()
if (this->prev)
this->prev->next = this->next;
else
botlists[tolower(*this->nick)] = this->next;
botlists[tolower(this->nick[0])] = this->next;
nbots--;
delete [] this->nick;
delete [] this->user;
delete [] this->host;
delete [] this->real;
--nbots;
}
@@ -118,11 +98,9 @@ void BotInfo::ChangeNick(const char *newnick)
if (this->prev)
this->prev->next = this->next;
else
botlists[tolower(*this->nick)] = this->next;
botlists[tolower(this->nick[0])] = this->next;
if (this->nick)
delete [] this->nick;
this->nick = sstrdup(newnick);
this->nick = newnick;
insert_bot(this);
}
@@ -132,9 +110,9 @@ void BotInfo::RejoinAll()
int i;
ChannelInfo *ci;
for (i = 0; i < 256; i++)
for (i = 0; i < 256; ++i)
for (ci = chanlists[i]; ci; ci = ci->next)
if (ci->bi == this && ci->c && (ci->c->usercount >= BSMinUsers))
if (ci->bi == this && ci->c && (ci->c->users.size() >= Config.BSMinUsers))
bot_join(ci);
}
@@ -146,16 +124,11 @@ void BotInfo::Assign(User *u, ChannelInfo *ci)
return;
if (ci->bi)
{
if (u)
ci->bi->UnAssign(u, ci);
else
ci->bi->UnAssign(NULL, ci);
}
ci->bi->UnAssign(u, ci);
ci->bi = this;
this->chancount++;
if (ci->c && ci->c->usercount >= BSMinUsers)
++this->chancount;
if (ci->c && ci->c->users.size() >= Config.BSMinUsers)
bot_join(ci);
}
@@ -166,11 +139,14 @@ void BotInfo::UnAssign(User *u, ChannelInfo *ci)
if (MOD_RESULT == EVENT_STOP)
return;
if (u && ci->c && ci->c->usercount >= BSMinUsers)
ircdproto->SendPart(ci->bi, ci->name, "UNASSIGN from %s", u->nick);
if (ci->c && ci->c->users.size() >= Config.BSMinUsers)
{
if (u)
ircdproto->SendPart(ci->bi, ci->c, "UNASSIGN from %s", u->nick.c_str());
else
ircdproto->SendPart(ci->bi, ci->c, "");
}
ci->bi->chancount--;
--ci->bi->chancount;
ci->bi = NULL;
}
+169 -396
View File
@@ -1,6 +1,6 @@
/* BotServ functions
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -34,7 +34,7 @@ E void moduleAddBotServCmds();
/*************************************************************************/
/* *INDENT-OFF* */
void moduleAddBotServCmds() {
ModuleManager::LoadModuleList(BotServCoreNumber, BotServCoreModules);
ModuleManager::LoadModuleList(Config.BotServCoreModules);
}
/* *INDENT-ON* */
/*************************************************************************/
@@ -52,10 +52,10 @@ void get_botserv_stats(long *nrec, long *memuse)
for (bi = botlists[i]; bi; bi = bi->next) {
count++;
mem += sizeof(*bi);
mem += strlen(bi->nick) + 1;
mem += strlen(bi->user) + 1;
mem += strlen(bi->host) + 1;
mem += strlen(bi->real) + 1;
mem += bi->nick.size() + 1;
mem += bi->user.size() + 1;
mem += bi->host.size() + 1;
mem += bi->real.size() + 1;
}
}
@@ -70,7 +70,7 @@ void get_botserv_stats(long *nrec, long *memuse)
void bs_init()
{
if (s_BotServ) {
if (Config.s_BotServ) {
moduleAddBotServCmds();
}
}
@@ -91,9 +91,9 @@ void botserv(User * u, char *buf)
if (!(s = strtok(NULL, ""))) {
*s = 0;
}
ircdproto->SendCTCP(findbot(s_BotServ), u->nick, "PING %s", s);
ircdproto->SendCTCP(findbot(Config.s_BotServ), u->nick.c_str(), "PING %s", s);
} else {
mod_run_cmd(s_BotServ, u, BOTSERV, cmd);
mod_run_cmd(Config.s_BotServ, u, BOTSERV, cmd);
}
}
@@ -114,7 +114,7 @@ void botmsgs(User * u, BotInfo * bi, char *buf)
if (!(s = strtok(NULL, ""))) {
*s = 0;
}
ircdproto->SendCTCP(bi, u->nick, "PING %s", s);
ircdproto->SendCTCP(bi, u->nick.c_str(), "PING %s", s);
}
else if (cmd && bi->cmdTable)
{
@@ -132,20 +132,18 @@ void botmsgs(User * u, BotInfo * bi, char *buf)
void botchanmsgs(User * u, ChannelInfo * ci, char *buf)
{
int c;
int16 cstatus = 0;
char *cmd;
UserData *ud;
bool was_action = false;
Command *command;
std::string bbuf;
if (!u || !buf || !ci) {
if (!u || !buf || !ci || !ci->c)
return;
}
/* Answer to ping if needed, without breaking the buffer. */
if (!strnicmp(buf, "\1PING", 5)) {
ircdproto->SendCTCP(ci->bi, u->nick, "PING %s", buf);
ircdproto->SendCTCP(ci->bi, u->nick.c_str(), "PING %s", buf);
}
/* If it's a /me, cut the CTCP part at the beginning (not
@@ -167,45 +165,46 @@ void botchanmsgs(User * u, ChannelInfo * ci, char *buf)
* way.
*/
/* We first retrieve the user status on the channel if needed */
if (ci->botflags & (BS_DONTKICKOPS | BS_DONTKICKVOICES))
cstatus = chan_get_user_status(ci->c, u);
bool Allow = false;
if (!ci->botflags.HasFlag(BS_DONTKICKOPS) && !ci->botflags.HasFlag(BS_DONTKICKVOICES))
Allow = true;
else if (ci->botflags.HasFlag(BS_DONTKICKOPS) && (ci->c->HasUserStatus(u, CMODE_HALFOP) || ci->c->HasUserStatus(u, CMODE_OP) || ci->c->HasUserStatus(u, CMODE_PROTECT) || ci->c->HasUserStatus(u, CMODE_OWNER)))
Allow = true;
else if (ci->botflags.HasFlag(BS_DONTKICKVOICES) && ci->c->HasUserStatus(u, CMODE_VOICE))
Allow = true;
if (buf && !check_access(u, ci, CA_NOKICK) &&
(!(ci->botflags & BS_DONTKICKOPS)
|| !(cstatus & (CUS_HALFOP | CUS_OP | CUS_OWNER | CUS_PROTECT)))
&& (!(ci->botflags & BS_DONTKICKVOICES) || !(cstatus & CUS_VOICE))) {
if (buf && !check_access(u, ci, CA_NOKICK) && Allow)
{
/* Bolds kicker */
if ((ci->botflags & BS_KICK_BOLDS) && strchr(buf, 2)) {
if (ci->botflags.HasFlag(BS_KICK_BOLDS) && strchr(buf, 2)) {
check_ban(ci, u, TTB_BOLDS);
bot_kick(ci, u, BOT_REASON_BOLD);
return;
}
/* Color kicker */
if ((ci->botflags & BS_KICK_COLORS) && strchr(buf, 3)) {
if (ci->botflags.HasFlag(BS_KICK_COLORS) && strchr(buf, 3)) {
check_ban(ci, u, TTB_COLORS);
bot_kick(ci, u, BOT_REASON_COLOR);
return;
}
/* Reverses kicker */
if ((ci->botflags & BS_KICK_REVERSES) && strchr(buf, 22)) {
if (ci->botflags.HasFlag(BS_KICK_REVERSES) && strchr(buf, 22)) {
check_ban(ci, u, TTB_REVERSES);
bot_kick(ci, u, BOT_REASON_REVERSE);
return;
}
/* Underlines kicker */
if ((ci->botflags & BS_KICK_UNDERLINES) && strchr(buf, 31)) {
if (ci->botflags.HasFlag(BS_KICK_UNDERLINES) && strchr(buf, 31)) {
check_ban(ci, u, TTB_UNDERLINES);
bot_kick(ci, u, BOT_REASON_UNDERLINE);
return;
}
/* Caps kicker */
if ((ci->botflags & BS_KICK_CAPS)
if (ci->botflags.HasFlag(BS_KICK_CAPS)
&& ((c = strlen(buf)) >= ci->capsmin)) {
int i = 0;
int l = 0;
@@ -223,7 +222,7 @@ void botchanmsgs(User * u, ChannelInfo * ci, char *buf)
* percentage of caps to kick for; the rest is ignored. -GD
*/
if (i >= ci->capsmin && i * 100 / (i + l) >= ci->capspercent) {
if (i && l && i >= ci->capsmin && i * 100 / (i + l) >= ci->capspercent) {
check_ban(ci, u, TTB_CAPS);
bot_kick(ci, u, BOT_REASON_CAPS);
return;
@@ -231,8 +230,7 @@ void botchanmsgs(User * u, ChannelInfo * ci, char *buf)
}
/* Bad words kicker */
if (ci->botflags & BS_KICK_BADWORDS) {
int i;
if (ci->botflags.HasFlag(BS_KICK_BADWORDS)) {
int mustkick = 0;
char *nbuf;
BadWord *bw;
@@ -240,39 +238,38 @@ void botchanmsgs(User * u, ChannelInfo * ci, char *buf)
/* Normalize the buffer */
nbuf = normalizeBuffer(buf);
for (i = 0, bw = ci->badwords; i < ci->bwcount; i++, bw++) {
if (!bw->in_use)
continue;
for (unsigned i = 0; i < ci->GetBadWordCount(); ++i)
{
bw = ci->GetBadWord(i);
if (bw->type == BW_ANY
&& ((BSCaseSensitive && strstr(nbuf, bw->word))
|| (!BSCaseSensitive && stristr(nbuf, bw->word)))) {
&& ((Config.BSCaseSensitive && strstr(nbuf, bw->word.c_str()))
|| (!Config.BSCaseSensitive && stristr(nbuf, bw->word.c_str())))) {
mustkick = 1;
} else if (bw->type == BW_SINGLE) {
int len = strlen(bw->word);
int len = bw->word.length();
if ((BSCaseSensitive && !strcmp(nbuf, bw->word))
|| (!BSCaseSensitive
&& (!stricmp(nbuf, bw->word)))) {
if ((Config.BSCaseSensitive && nbuf == bw->word)
|| (!Config.BSCaseSensitive
&& (!stricmp(nbuf, bw->word.c_str())))) {
mustkick = 1;
/* two next if are quite odd isn't it? =) */
} else if ((strchr(nbuf, ' ') == nbuf + len)
&&
((BSCaseSensitive
&& !strcmp(nbuf, bw->word))
|| (!BSCaseSensitive
&& (stristr(nbuf, bw->word) ==
((Config.BSCaseSensitive && nbuf == bw->word)
|| (!Config.BSCaseSensitive
&& (stristr(nbuf, bw->word.c_str()) ==
nbuf)))) {
mustkick = 1;
} else {
if ((strrchr(nbuf, ' ') ==
nbuf + strlen(nbuf) - len - 1)
&&
((BSCaseSensitive
&& (strstr(nbuf, bw->word) ==
((Config.BSCaseSensitive
&& (strstr(nbuf, bw->word.c_str()) ==
nbuf + strlen(nbuf) - len))
|| (!BSCaseSensitive
&& (stristr(nbuf, bw->word) ==
|| (!Config.BSCaseSensitive
&& (stristr(nbuf, bw->word.c_str()) ==
nbuf + strlen(nbuf) - len)))) {
mustkick = 1;
} else {
@@ -281,11 +278,11 @@ void botchanmsgs(User * u, ChannelInfo * ci, char *buf)
wordbuf[0] = ' ';
wordbuf[len + 1] = ' ';
wordbuf[len + 2] = '\0';
memcpy(wordbuf + 1, bw->word, len);
memcpy(wordbuf + 1, bw->word.c_str(), len);
if ((BSCaseSensitive
if ((Config.BSCaseSensitive
&& (strstr(nbuf, wordbuf)))
|| (!BSCaseSensitive
|| (!Config.BSCaseSensitive
&& (stristr(nbuf, wordbuf)))) {
mustkick = 1;
}
@@ -295,49 +292,49 @@ void botchanmsgs(User * u, ChannelInfo * ci, char *buf)
}
}
} else if (bw->type == BW_START) {
int len = strlen(bw->word);
int len = bw->word.length();
if ((BSCaseSensitive
&& (!strncmp(nbuf, bw->word, len)))
|| (!BSCaseSensitive
&& (!strnicmp(nbuf, bw->word, len)))) {
if ((Config.BSCaseSensitive
&& (!strncmp(nbuf, bw->word.c_str(), len)))
|| (!Config.BSCaseSensitive
&& (!strnicmp(nbuf, bw->word.c_str(), len)))) {
mustkick = 1;
} else {
char *wordbuf = new char[len + 2];
memcpy(wordbuf + 1, bw->word, len);
memcpy(wordbuf + 1, bw->word.c_str(), len);
wordbuf[0] = ' ';
wordbuf[len + 1] = '\0';
if ((BSCaseSensitive && (strstr(nbuf, wordbuf)))
|| (!BSCaseSensitive
if ((Config.BSCaseSensitive && (strstr(nbuf, wordbuf)))
|| (!Config.BSCaseSensitive
&& (stristr(nbuf, wordbuf))))
mustkick = 1;
delete [] wordbuf;
}
} else if (bw->type == BW_END) {
int len = strlen(bw->word);
int len = bw->word.length();
if ((BSCaseSensitive
if ((Config.BSCaseSensitive
&&
(!strncmp
(nbuf + strlen(nbuf) - len, bw->word, len)))
|| (!BSCaseSensitive
(nbuf + strlen(nbuf) - len, bw->word.c_str(), len)))
|| (!Config.BSCaseSensitive
&&
(!strnicmp
(nbuf + strlen(nbuf) - len, bw->word,
(nbuf + strlen(nbuf) - len, bw->word.c_str(),
len)))) {
mustkick = 1;
} else {
char *wordbuf = new char[len + 2];
memcpy(wordbuf, bw->word, len);
memcpy(wordbuf, bw->word.c_str(), len);
wordbuf[len] = ' ';
wordbuf[len + 1] = '\0';
if ((BSCaseSensitive && (strstr(nbuf, wordbuf)))
|| (!BSCaseSensitive
if ((Config.BSCaseSensitive && (strstr(nbuf, wordbuf)))
|| (!Config.BSCaseSensitive
&& (stristr(nbuf, wordbuf))))
mustkick = 1;
@@ -347,10 +344,10 @@ void botchanmsgs(User * u, ChannelInfo * ci, char *buf)
if (mustkick) {
check_ban(ci, u, TTB_BADWORDS);
if (BSGentleBWReason)
if (Config.BSGentleBWReason)
bot_kick(ci, u, BOT_REASON_BADWORD_GENTLE);
else
bot_kick(ci, u, BOT_REASON_BADWORD, bw->word);
bot_kick(ci, u, BOT_REASON_BADWORD, bw->word.c_str());
/* free the normalized buffer before return (#850) */
delete [] nbuf;
@@ -364,7 +361,7 @@ void botchanmsgs(User * u, ChannelInfo * ci, char *buf)
}
/* Flood kicker */
if (ci->botflags & BS_KICK_FLOOD) {
if (ci->botflags.HasFlag(BS_KICK_FLOOD)) {
time_t now = time(NULL);
ud = get_user_data(ci->c, u);
@@ -386,7 +383,7 @@ void botchanmsgs(User * u, ChannelInfo * ci, char *buf)
}
/* Repeat kicker */
if (ci->botflags & BS_KICK_REPEAT) {
if (ci->botflags.HasFlag(BS_KICK_REPEAT)) {
ud = get_user_data(ci->c, u);
if (!ud) {
return;
@@ -411,16 +408,16 @@ void botchanmsgs(User * u, ChannelInfo * ci, char *buf)
/* return if the user is on the ignore list */
if (get_ignore(u->nick) != NULL) {
if (get_ignore(u->nick.c_str()) != NULL) {
return;
}
/* Fantaisist commands */
if (buf && (ci->botflags & BS_FANTASY) && *buf == *BSFantasyCharacter && !was_action) {
if (buf && ci->botflags.HasFlag(BS_FANTASY) && *buf == *Config.BSFantasyCharacter && !was_action) {
cmd = strtok(buf, " ");
if (cmd && (cmd[0] == *BSFantasyCharacter)) {
if (cmd && (cmd[0] == *Config.BSFantasyCharacter)) {
char *params = strtok(NULL, "");
/* Strip off the fantasy character */
@@ -454,146 +451,29 @@ void botchanmsgs(User * u, ChannelInfo * ci, char *buf)
FOREACH_MOD(I_OnBotFantasy, OnBotFantasy(cmd, u, ci, params));
}
else
{
FOREACH_MOD(I_OnBotNoFantasyAccess, OnBotNoFantasyAccess(cmd, u, ci, params));
}
}
}
}
/*************************************************************************/
/* Load/save data files. */
#define SAFE(x) do { \
if ((x) < 0) { \
if (!forceload) \
fatal("Read error on %s", BotDBName); \
failed = 1; \
break; \
} \
} while (0)
void load_bs_dbase()
{
dbFILE *f;
int c, ver;
uint16 tmp16;
uint32 tmp32;
BotInfo *bi;
int failed = 0;
if (!(f = open_db(s_BotServ, BotDBName, "r", BOT_VERSION)))
return;
ver = get_file_version(f);
while (!failed && (c = getc_db(f)) != 0) {
char *s;
if (c != 1)
fatal("Invalid format in %s %d", BotDBName, c);
SAFE(read_string(&s, f));
bi = new BotInfo(s);
delete [] s;
SAFE(read_string(&bi->user, f));
SAFE(read_string(&bi->host, f));
SAFE(read_string(&bi->real, f));
if (ver >= 10) {
SAFE(read_int16(&tmp16, f));
bi->flags |= tmp16;
}
SAFE(read_int32(&tmp32, f));
bi->created = tmp32;
SAFE(read_int16(&tmp16, f));
bi->chancount = tmp16;
/* Fixes bug #1080, services bot names may have been
* changed in the config and different from database
* names
*/
if (s_ChanServ && bi->flags & BI_CHANSERV && strcmp(bi->nick, s_ChanServ))
bi->ChangeNick(s_ChanServ);
else if (s_BotServ && bi->flags & BI_BOTSERV && strcmp(bi->nick, s_BotServ))
bi->ChangeNick(s_BotServ);
else if (s_HostServ && bi->flags & BI_HOSTSERV && strcmp(bi->nick, s_HostServ))
bi->ChangeNick(s_HostServ);
else if (s_OperServ && bi->flags & BI_OPERSERV && strcmp(bi->nick, s_OperServ))
bi->ChangeNick(s_OperServ);
else if (s_MemoServ && bi->flags & BI_MEMOSERV && strcmp(bi->nick, s_MemoServ))
bi->ChangeNick(s_MemoServ);
else if (s_NickServ && bi->flags & BI_NICKSERV && strcmp(bi->nick, s_NickServ))
bi->ChangeNick(s_NickServ);
else if (s_GlobalNoticer && bi->flags & BI_GLOBAL && strcmp(bi->nick, s_GlobalNoticer))
bi->ChangeNick(s_GlobalNoticer);
}
close_db(f);
}
#undef SAFE
/*************************************************************************/
#define SAFE(x) do { \
if ((x) < 0) { \
restore_db(f); \
log_perror("Write error on %s", BotDBName); \
if (time(NULL) - lastwarn > WarningTimeout) { \
ircdproto->SendGlobops(NULL, "Write error on %s: %s", BotDBName, \
strerror(errno)); \
lastwarn = time(NULL); \
} \
return; \
} \
} while (0)
void save_bs_dbase()
{
dbFILE *f;
BotInfo *bi;
static time_t lastwarn = 0;
int i;
if (!(f = open_db(s_BotServ, BotDBName, "w", BOT_VERSION)))
return;
for (i = 0; i < 256; i++) {
for (bi = botlists[i]; bi; bi = bi->next) {
SAFE(write_int8(1, f));
SAFE(write_string(bi->nick, f));
SAFE(write_string(bi->user, f));
SAFE(write_string(bi->host, f));
SAFE(write_string(bi->real, f));
SAFE(write_int16(bi->flags, f));
SAFE(write_int32(bi->created, f));
SAFE(write_int16(bi->chancount, f));
}
}
SAFE(write_int8(0, f));
close_db(f);
}
#undef SAFE
/*************************************************************************/
/* Inserts a bot in the bot list. I can't be much explicit mh? */
void insert_bot(BotInfo * bi)
void insert_bot(BotInfo *bi)
{
BotInfo *ptr, *prev;
for (prev = NULL, ptr = botlists[tolower(*bi->nick)];
ptr != NULL && stricmp(ptr->nick, bi->nick) < 0;
ci::string ci_bi_nick(bi->nick.c_str());
for (prev = NULL, ptr = botlists[tolower(bi->nick[0])];
ptr != NULL && ci_bi_nick > ptr->nick.c_str();
prev = ptr, ptr = ptr->next);
bi->prev = prev;
bi->next = ptr;
if (!prev)
botlists[tolower(*bi->nick)] = bi;
botlists[tolower(bi->nick[0])] = bi;
else
prev->next = bi;
if (ptr)
@@ -603,13 +483,15 @@ void insert_bot(BotInfo * bi)
/*************************************************************************/
/*************************************************************************/
BotInfo *findbot(const char *nick)
BotInfo *findbot(const std::string &nick)
{
BotInfo *bi;
if (!nick || !*nick)
if (nick.empty())
return NULL;
ci::string ci_nick(nick.c_str());
/*
* XXX Less than efficient, but we need to do this for good TS6 support currently. This *will* improve. -- w00t
*/
@@ -617,10 +499,10 @@ BotInfo *findbot(const char *nick)
{
for (bi = botlists[i]; bi; bi = bi->next)
{
if (!stricmp(nick, bi->nick))
if (ci_nick == bi->nick)
return bi;
if (nick == bi->uid)
if (ci_nick == bi->uid)
return bi;
}
}
@@ -647,7 +529,7 @@ static BanData *get_ban_data(Channel * c, User * u)
u->GetDisplayedHost().c_str());
for (bd = c->bd; bd; bd = next) {
if (now - bd->last_use > BSKeepData) {
if (now - bd->last_use > Config.BSKeepData) {
if (bd->next)
bd->next->prev = bd->prev;
if (bd->prev)
@@ -689,38 +571,31 @@ static BanData *get_ban_data(Channel * c, User * u)
* Allocates it if necessary.
*/
static UserData *get_user_data(Channel * c, User * u)
static UserData *get_user_data(Channel *c, User *u)
{
struct c_userlist *user;
if (!c || !u)
return NULL;
for (user = c->users; user; user = user->next) {
if (user->user == u) {
if (user->ud) {
time_t now = time(NULL);
for (CUserList::iterator it = c->users.begin(); it != c->users.end(); ++it)
{
UserContainer *uc = *it;
/* Checks whether data is obsolete */
if (now - user->ud->last_use > BSKeepData) {
if (user->ud->lastline)
delete [] user->ud->lastline;
/* We should not free and realloc, but reset to 0
instead. */
memset(user->ud, 0, sizeof(UserData));
user->ud->last_use = now;
}
if (uc->user == u)
{
time_t now = time(NULL);
return user->ud;
} else {
user->ud = new UserData;
user->ud->last_use = time(NULL);
user->ud->lines = 0;
user->ud->last_start = 0;
user->ud->lastline = NULL;
user->ud->times = 0;
return user->ud;
/* Checks whether data is obsolete */
if (now - uc->ud.last_use > Config.BSKeepData)
{
if (uc->ud.lastline)
delete [] uc->ud.lastline;
/* We should not free and realloc, but reset to 0
instead. */
memset(&uc->ud, 0, sizeof(UserData));
uc->ud.last_use = now;
}
return &uc->ud;
}
}
@@ -736,97 +611,78 @@ void bot_join(ChannelInfo * ci)
if (!ci || !ci->c || !ci->bi)
return;
if (BSSmartJoin) {
if (Config.BSSmartJoin)
{
/* We check for bans */
if (ci->c->bans && ci->c->bans->count) {
char buf[BUFSIZE];
const char *av[4];
if (ci->c->bans && ci->c->bans->count)
{
Entry *ban, *next;
int ac;
if (ircdcap->tsmode) {
snprintf(buf, BUFSIZE - 1, "%ld", static_cast<long>(time(NULL)));
av[0] = ci->c->name;
av[1] = buf;
av[2] = "-b";
ac = 4;
} else {
av[0] = ci->c->name;
av[1] = "-b";
ac = 3;
}
for (ban = ci->c->bans->entries; ban; ban = next) {
for (ban = ci->c->bans->entries; ban; ban = next)
{
next = ban->next;
if (entry_match
(ban, ci->bi->nick, ci->bi->user, ci->bi->host, 0)) {
ircdproto->SendMode(whosends(ci), ci->name, "-b %s",
ban->mask);
if (ircdcap->tsmode)
av[3] = ban->mask;
else
av[2] = ban->mask;
do_cmode(whosends(ci)->nick, ac, av);
if (entry_match(ban, ci->bi->nick.c_str(), ci->bi->user.c_str(), ci->bi->host.c_str(), 0))
{
ci->c->RemoveMode(NULL, CMODE_BAN, ban->mask);
}
}
}
std::string Limit;
int limit = 0;
if (ci->c->GetParam(CMODE_LIMIT, Limit))
{
limit = atoi(Limit.c_str());
}
/* Should we be invited? */
if ((ci->c->mode & anope_get_invite_mode())
|| (ci->c->limit && ci->c->usercount >= ci->c->limit))
ircdproto->SendNoticeChanops(NULL, ci->c->name,
"%s invited %s into the channel.",
ci->bi->nick, ci->bi->nick);
if (ci->c->HasMode(CMODE_INVITE)
|| (limit && ci->c->users.size() >= limit))
ircdproto->SendNoticeChanops(ci->bi, ci->c,
"%s invited %s into the channel.",
ci->bi->nick.c_str(), ci->bi->nick.c_str());
}
ircdproto->SendJoin(ci->bi, ci->c->name.c_str(), ci->c->creation_time);
for (std::list<ChannelModeStatus *>::iterator it = BotModes.begin(); it != BotModes.end(); ++it)
{
ci->c->SetMode(ci->bi, *it, ci->bi->nick, false);
}
ircdproto->SendJoin(ci->bi, ci->c->name, ci->c->creation_time);
ircdproto->SendBotOp(ci->bi->nick, ci->c->name);
FOREACH_MOD(I_OnBotJoin, OnBotJoin(ci, ci->bi));
}
/*************************************************************************/
/* This makes a ban if the user has to have one. In every cases it increments
the kick count for the user. */
static void check_ban(ChannelInfo * ci, User * u, int ttbtype)
/** Check if a user should be banned by botserv
* @param ci The channel the user is on
* @param u The user
* @param ttbtype The type of bot kicker the user should be checked against
*/
static void check_ban(ChannelInfo *ci, User *u, int ttbtype)
{
BanData *bd = get_ban_data(ci->c, u);
if (!bd)
return;
/* Don't ban ulines */
if (is_ulined(u->server->name))
return;
bd->ttb[ttbtype]++;
if (ci->ttb[ttbtype] && bd->ttb[ttbtype] >= ci->ttb[ttbtype])
{
/* Should not use == here because bd->ttb[ttbtype] could possibly be > ci->ttb[ttbtype]
* if the TTB was changed after it was not set (0) before and the user had already been
* kicked a few times. Bug #1056 - Adam */
const char *av[4];
int ac;
char mask[BUFSIZE];
char buf[BUFSIZE];
bd->ttb[ttbtype] = 0;
get_idealban(ci, u, mask, sizeof(mask));
if (ircdcap->tsmode) {
snprintf(buf, BUFSIZE - 1, "%ld", static_cast<long>(time(NULL)));
av[0] = ci->name;
av[1] = buf;
av[2] = "+b";
av[3] = mask;
ac = 4;
} else {
av[0] = ci->name;
av[1] = "+b";
av[2] = mask;
ac = 3;
}
ircdproto->SendMode(ci->bi, ci->name, "+b %s", mask);
do_cmode(ci->bi->nick, ac, av);
if (ci->c)
ci->c->SetMode(NULL, CMODE_BAN, mask);
FOREACH_MOD(I_OnBotBan, OnBotBan(u, ci, mask));
}
}
@@ -840,7 +696,6 @@ static void bot_kick(ChannelInfo * ci, User * u, int message, ...)
va_list args;
char buf[1024];
const char *fmt;
const char *av[3];
if (!ci || !ci->bi || !ci->c || !u)
return;
@@ -852,190 +707,108 @@ static void bot_kick(ChannelInfo * ci, User * u, int message, ...)
vsnprintf(buf, sizeof(buf), fmt, args);
va_end(args);
av[0] = ci->name;
av[1] = u->nick;
av[2] = buf;
ircdproto->SendKick(ci->bi, av[0], av[1], "%s", av[2]);
do_kick(ci->bi->nick, 3, av);
FOREACH_MOD(I_OnBotKick, OnBotKick(u, ci, buf));
ci->c->Kick(ci->bi, u, "%s", buf);
}
/*************************************************************************/
/* Makes a simple ban and kicks the target */
void bot_raw_ban(User * requester, ChannelInfo * ci, char *nick,
const char *reason)
void bot_raw_ban(User * requester, ChannelInfo * ci, char *nick, const char *reason)
{
int ac;
const char *av[4];
const char *kav[4]; // seperate as not everything is constified XXX -- w00t
char mask[BUFSIZE];
char buf[BUFSIZE];
User *u = finduser(nick);
if (!u)
return;
if (ircd->protectedumode) {
if ((ModeManager::FindUserModeByName(UMODE_PROTECTED)))
{
if (is_protected(u) && (requester != u)) {
ircdproto->SendPrivmsg(ci->bi, ci->name, "%s",
getstring(ACCESS_DENIED));
ircdproto->SendPrivmsg(ci->bi, ci->name.c_str(), "%s", getstring(ACCESS_DENIED));
return;
}
}
if ((ci->flags & CI_PEACE) && stricmp(requester->nick, nick)
&& (get_access(u, ci) >= get_access(requester, ci)))
if (ci->HasFlag(CI_PEACE) && stricmp(requester->nick.c_str(), nick) && (get_access(u, ci) >= get_access(requester, ci)))
return;
if (ircd->except) {
if (ModeManager::FindChannelModeByName(CMODE_EXCEPT))
{
if (is_excepted(ci, u) == 1) {
ircdproto->SendPrivmsg(ci->bi, ci->name, "%s",
getstring(BOT_EXCEPT));
ircdproto->SendPrivmsg(ci->bi, ci->name.c_str(), "%s", getstring(BOT_EXCEPT));
return;
}
}
get_idealban(ci, u, mask, sizeof(mask));
if (ircdcap->tsmode) {
snprintf(buf, BUFSIZE - 1, "%ld", static_cast<long>(time(NULL)));
av[0] = ci->name;
av[1] = buf;
av[2] = "+b";
av[3] = mask;
ac = 4;
} else {
av[0] = ci->name;
av[1] = "+b";
av[2] = mask;
ac = 3;
}
ircdproto->SendMode(ci->bi, ci->name, "+b %s", mask);
do_cmode(ci->bi->nick, ac, av);
kav[0] = ci->name;
kav[1] = nick;
if (!reason) {
kav[2] = ci->bi->nick;
} else {
if (strlen(reason) > 200)
(*const_cast<char **>(&reason))[200] = '\0'; // Unsafe cast -- will review later -- CyberBotX
kav[2] = reason;
}
ci->c->SetMode(NULL, CMODE_BAN, mask);
/* Check if we need to do a signkick or not -GD */
if ((ci->flags & CI_SIGNKICK)
|| ((ci->flags & CI_SIGNKICK_LEVEL)
&& !check_access(requester, ci, CA_SIGNKICK)))
ircdproto->SendKick(ci->bi, kav[0], kav[1], "%s (%s)", kav[2],
requester->nick);
if (ci->HasFlag(CI_SIGNKICK) || (ci->HasFlag(CI_SIGNKICK_LEVEL) && !check_access(requester, ci, CA_SIGNKICK)))
ci->c->Kick(ci->bi, u, "%s (%s)", reason ? reason : ci->bi->nick.c_str(), requester->nick.c_str());
else
ircdproto->SendKick(ci->bi, kav[0], kav[1], "%s", kav[2]);
do_kick(ci->bi->nick, 3, kav);
FOREACH_MOD(I_OnBotKick, OnBotKick(u, ci, kav[2]));
ci->c->Kick(ci->bi, u, "%s", reason ? reason : ci->bi->nick.c_str());
}
/*************************************************************************/
/* Makes a kick with a "dynamic" reason ;) */
void bot_raw_kick(User * requester, ChannelInfo * ci, char *nick,
const char *reason)
void bot_raw_kick(User * requester, ChannelInfo * ci, char *nick, const char *reason)
{
const char *av[3];
User *u = finduser(nick);
if (!u || !is_on_chan(ci->c, u))
if (!u || !ci->c->FindUser(u))
return;
if (ircd->protectedumode) {
if ((ModeManager::FindUserModeByName(UMODE_PROTECTED)))
{
if (is_protected(u) && (requester != u)) {
ircdproto->SendPrivmsg(ci->bi, ci->name, "%s",
getstring(ACCESS_DENIED));
ircdproto->SendPrivmsg(ci->bi, ci->name.c_str(), "%s", getstring(ACCESS_DENIED));
return;
}
}
if ((ci->flags & CI_PEACE) && stricmp(requester->nick, nick)
&& (get_access(u, ci) >= get_access(requester, ci)))
if (ci->HasFlag(CI_PEACE) && stricmp(requester->nick.c_str(), nick) && (get_access(u, ci) >= get_access(requester, ci)))
return;
av[0] = ci->name;
av[1] = nick;
if (!reason) {
av[2] = ci->bi->nick;
} else {
if (strlen(reason) > 200)
(*const_cast<char **>(&reason))[200] = '\0'; // Unsafe cast -- will review later -- CyberBotX
av[2] = reason;
}
if ((ci->flags & CI_SIGNKICK)
|| ((ci->flags & CI_SIGNKICK_LEVEL)
&& !check_access(requester, ci, CA_SIGNKICK)))
ircdproto->SendKick(ci->bi, av[0], av[1], "%s (%s)", av[2],
requester->nick);
if (ci->HasFlag(CI_SIGNKICK) || (ci->HasFlag(CI_SIGNKICK_LEVEL) && !check_access(requester, ci, CA_SIGNKICK)))
ci->c->Kick(ci->bi, u, "%s (%s)", reason ? reason : ci->bi->nick.c_str(), requester->nick.c_str());
else
ircdproto->SendKick(ci->bi, av[0], av[1], "%s", av[2]);
do_kick(ci->bi->nick, 3, av);
FOREACH_MOD(I_OnBotKick, OnBotKick(u, ci, av[2]));
ci->c->Kick(ci->bi, u, "%s", reason ? reason : ci->bi->nick.c_str());
}
/*************************************************************************/
/* Makes a mode operation on a channel for a nick */
void bot_raw_mode(User * requester, ChannelInfo * ci, const char *mode,
char *nick)
void bot_raw_mode(User * requester, ChannelInfo * ci, const char *mode, char *nick)
{
const char *av[4];
int ac;
char buf[BUFSIZE];
User *u;
*buf = '\0';
u = finduser(nick);
if (!u || !is_on_chan(ci->c, u))
if (!u || !ci->c->FindUser(u))
return;
snprintf(buf, BUFSIZE - 1, "%ld", static_cast<long>(time(NULL)));
if (ircd->protectedumode) {
if ((ModeManager::FindUserModeByName(UMODE_PROTECTED))) {
if (is_protected(u) && *mode == '-' && (requester != u)) {
ircdproto->SendPrivmsg(ci->bi, ci->name, "%s",
getstring(ACCESS_DENIED));
ircdproto->SendPrivmsg(ci->bi, ci->name.c_str(), "%s", getstring(ACCESS_DENIED));
return;
}
}
if (*mode == '-' && (ci->flags & CI_PEACE)
&& stricmp(requester->nick, nick)
&& (get_access(u, ci) >= get_access(requester, ci)))
if (*mode == '-' && ci->HasFlag(CI_PEACE)
&& stricmp(requester->nick.c_str(), nick) && (get_access(u, ci) >= get_access(requester, ci)))
return;
if (ircdcap->tsmode) {
av[0] = ci->name;
av[1] = buf;
av[2] = mode;
av[3] = nick;
ac = 4;
ircdproto->SendMode(ci->bi, av[0], "%s %s", av[2], av[3]);
} else {
av[0] = ci->name;
av[1] = mode;
av[2] = nick;
ac = 3;
ircdproto->SendMode(ci->bi, av[0], "%s %s", av[1], av[2]);
}
do_cmode(ci->bi->nick, ac, av);
ci->c->SetModes(NULL, "%s %s", mode, nick);
}
/*************************************************************************/
+1233 -1633
View File
File diff suppressed because it is too large Load Diff
+405 -1467
View File
File diff suppressed because it is too large Load Diff
+4 -20
View File
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2008-2009 Robin Burchell <w00t@inspircd.org>
* Copyright (C) 2008-2009 Anope Team <team@anope.org>
* Copyright (C) 2008-2010 Robin Burchell <w00t@inspircd.org>
* Copyright (C) 2008-2010 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*
@@ -13,7 +13,6 @@
Command::Command(const std::string &sname, size_t min_params, size_t max_params, const std::string &spermission) : MaxParams(max_params), MinParams(min_params), name(sname), permission(spermission)
{
this->flags = 0;
this->core = 0;
this->mod_name = NULL;
this->service = NULL;
@@ -30,26 +29,11 @@ Command::~Command()
}
}
CommandReturn Command::Execute(User *u, std::vector<ci::string> &) { return MOD_CONT; }
CommandReturn Command::Execute(User *u, const std::vector<ci::string> &) { return MOD_CONT; }
bool Command::OnHelp(User *u, const ci::string &subcommand) { return false; }
void Command::OnSyntaxError(User *u) { }
void Command::SetFlag(CommandFlags flag)
{
this->flags |= flag;
}
void Command::UnsetFlag(CommandFlags flag)
{
this->flags &= ~flag;
}
bool Command::HasFlag(CommandFlags flag) const
{
return this->flags & flag;
}
void Command::OnSyntaxError(User *u, const ci::string &subcommand) { }
void Command::SetPermission(const std::string &reststr)
{
+29 -39
View File
@@ -1,6 +1,6 @@
/* Routines for looking up commands in a *Serv command list.
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -35,7 +35,6 @@ Command *lookup_cmd(Command * list, char *cmd)
return c;
}
}
return NULL;
}
/*************************************************************************/
@@ -49,44 +48,33 @@ Command *lookup_cmd(Command * list, char *cmd)
* @param cmd Command
* @return void
*/
void mod_run_cmd(char *service, User * u, CommandHash * cmdTable[], const char *cmd)
void mod_run_cmd(const std::string &service, User * u, CommandHash * cmdTable[], const char *cmd)
{
Command *c = findCommand(cmdTable, cmd);
int retVal = 0;
int retVal = MOD_CONT;
ChannelInfo *ci;
EventReturn MOD_RESULT;
FOREACH_RESULT(I_OnPreCommandRun, OnPreCommandRun(service, u, cmd, c));
if (MOD_RESULT == EVENT_STOP)
return;
if (!c)
{
if ((!checkDefCon(DEFCON_SILENT_OPER_ONLY)) || is_oper(u))
{
notice_lang(service, u, UNKNOWN_COMMAND_HELP, cmd, service);
}
notice_lang(service, u, UNKNOWN_COMMAND_HELP, cmd, service.c_str());
return;
}
if ((checkDefCon(DEFCON_OPER_ONLY) || checkDefCon(DEFCON_SILENT_OPER_ONLY)) && !is_oper(u))
{
if (!checkDefCon(DEFCON_SILENT_OPER_ONLY))
{
notice_lang(service, u, OPER_DEFCON_DENIED);
return;
}
}
if (!c->HasFlag(CFLAG_ALLOW_UNREGISTERED))
{
// Command requires registered users only
if (!nick_identified(u))
if (!u->IsIdentified())
{
notice_lang(service, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
alog("Access denied for unregistered user %s with service %s and command %s", u->nick, service, cmd);
notice_lang(service, u, NICK_IDENTIFY_REQUIRED, Config.s_NickServ);
Alog() << "Access denied for unregistered user " << u->nick << " with service " << service << " and command " << cmd;
return;
}
}
else
{
// Check whether or not access string is empty
}
std::vector<ci::string> params;
std::string curparam;
@@ -116,11 +104,10 @@ void mod_run_cmd(char *service, User * u, CommandHash * cmdTable[], const char *
if (params.size() < c->MinParams)
{
c->OnSyntaxError(u);
c->OnSyntaxError(u, !params.empty() ? params[params.size() - 1] : "");
return;
}
EventReturn MOD_RESULT = EVENT_CONTINUE;
FOREACH_RESULT(I_OnPreCommand, OnPreCommand(u, c->service, c->name.c_str(), params));
if (MOD_RESULT == EVENT_STOP)
return;
@@ -131,18 +118,18 @@ void mod_run_cmd(char *service, User * u, CommandHash * cmdTable[], const char *
{
if ((ci = cs_findchan(params[0].c_str())))
{
if ((ci->flags & CI_FORBIDDEN) && (!c->HasFlag(CFLAG_ALLOW_FORBIDDEN)))
if ((ci->HasFlag(CI_FORBIDDEN)) && (!c->HasFlag(CFLAG_ALLOW_FORBIDDEN)))
{
notice_lang(service, u, CHAN_X_FORBIDDEN, ci->name);
alog("Access denied for user %s with service %s and command %s because of FORBIDDEN channel %s",
u->nick, service, cmd, ci->name);
notice_lang(service, u, CHAN_X_FORBIDDEN, ci->name.c_str());
Alog() << "Access denied for user " << u->nick << " with service " << service
<< " and command " << cmd << " because of FORBIDDEN channel " << ci->name;
return;
}
else if ((ci->flags & CI_SUSPENDED) && (!c->HasFlag(CFLAG_ALLOW_SUSPENDED)))
else if ((ci->HasFlag(CI_SUSPENDED)) && (!c->HasFlag(CFLAG_ALLOW_SUSPENDED)))
{
notice_lang(service, u, CHAN_X_FORBIDDEN, ci->name);
alog("Access denied for user %s with service %s and command %s because of SUSPENDED channel %s",
u->nick, service, cmd, ci->name);
notice_lang(service, u, CHAN_X_FORBIDDEN, ci->name.c_str());
Alog() << "Access denied for user " << u->nick << " with service " << service
<<" and command " << cmd << " because of SUSPENDED channel " << ci->name;
return;
}
}
@@ -163,10 +150,10 @@ void mod_run_cmd(char *service, User * u, CommandHash * cmdTable[], const char *
// If the command requires a permission, and they aren't registered or don't have the required perm, DENIED
if (!c->permission.empty())
{
if (!u->nc->HasPriv(c->permission) && !u->nc->HasCommand(c->permission))
if (!u->Account()->HasCommand(c->permission))
{
notice_lang(service, u, ACCESS_DENIED);
alog("Access denied for user %s with service %s and command %s", u->nick, service, cmd);
Alog() << "Access denied for user " << u->nick << " with service " << service << " and command " << cmd;
return;
}
@@ -174,7 +161,10 @@ void mod_run_cmd(char *service, User * u, CommandHash * cmdTable[], const char *
retVal = c->Execute(u, params);
FOREACH_MOD(I_OnPostCommand, OnPostCommand(u, c->service, c->name.c_str(), params));
if (retVal == MOD_CONT)
{
FOREACH_MOD(I_OnPostCommand, OnPostCommand(u, c->service, c->name.c_str(), params));
}
}
/*************************************************************************/
@@ -208,10 +198,10 @@ void mod_help_cmd(char *service, User * u, CommandHash * cmdTable[], const char
notice_lang(service, u, COMMAND_REQUIRES_PERM, c->permission.c_str());
/* User isn't identified and needs to be to use this command */
if (!c->HasFlag(CFLAG_ALLOW_UNREGISTERED) && !nick_identified(u))
if (!c->HasFlag(CFLAG_ALLOW_UNREGISTERED) && !u->IsIdentified())
notice_lang(service, u, COMMAND_IDENTIFY_REQUIRED);
/* User doesn't have the proper permission to use this command */
else if (!c->permission.empty() && (!u->nc || (!u->nc->HasCommand(c->permission))))
else if (!c->permission.empty() && (!u->Account() || (!u->Account()->HasCommand(c->permission))))
notice_lang(service, u, COMMAND_CANNOT_USE);
/* User can use this command */
else
+1 -1
View File
@@ -1,6 +1,6 @@
/* Compatibility routines.
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
+355 -603
View File
File diff suppressed because it is too large Load Diff
+9 -9
View File
@@ -2,7 +2,7 @@
* | Inspire Internet Relay Chat Daemon |
* +------------------------------------+
*
* InspIRCd: (C) 2002-2009 InspIRCd Development Team
* InspIRCd: (C) 2002-2010 InspIRCd Development Team
* See: http://www.inspircd.org/wiki/index.php/Credits
*
* This program is free but copyrighted software; see
@@ -13,7 +13,7 @@
#include "services.h"
ConfigReader::ConfigReader() : data(&serverConfig.config_data), errorlog(new std::ostringstream(std::stringstream::in | std::stringstream::out)), privatehash(false), error(CONF_NO_ERROR)
ConfigReader::ConfigReader() : data(&Config.config_data), errorlog(new std::ostringstream(std::stringstream::in | std::stringstream::out)), privatehash(false), error(CONF_NO_ERROR)
{
}
@@ -27,7 +27,7 @@ ConfigReader::~ConfigReader()
ConfigReader::ConfigReader(const std::string &filename) : data(new ConfigDataHash), errorlog(new std::ostringstream(std::stringstream::in | std::stringstream::out)), privatehash(true), error(CONF_NO_ERROR)
{
serverConfig.ClearStack();
Config.ClearStack();
}
std::string ConfigReader::ReadValue(const std::string &tag, const std::string &name, const std::string &default_value, int index, bool allow_linefeeds)
@@ -35,7 +35,7 @@ std::string ConfigReader::ReadValue(const std::string &tag, const std::string &n
/* Don't need to strlcpy() tag and name anymore, ReadConf() takes const char* */
std::string result;
if (!serverConfig.ConfValue(*this->data, tag, name, default_value, index, result, allow_linefeeds))
if (!Config.ConfValue(*this->data, tag, name, default_value, index, result, allow_linefeeds))
this->error = CONF_VALUE_NOT_FOUND;
return result;
@@ -48,7 +48,7 @@ std::string ConfigReader::ReadValue(const std::string &tag, const std::string &n
bool ConfigReader::ReadFlag(const std::string &tag, const std::string &name, const std::string &default_value, int index)
{
return serverConfig.ConfValueBool(*this->data, tag, name, default_value, index);
return Config.ConfValueBool(*this->data, tag, name, default_value, index);
}
bool ConfigReader::ReadFlag(const std::string &tag, const std::string &name, int index)
@@ -60,7 +60,7 @@ int ConfigReader::ReadInteger(const std::string &tag, const std::string &name, c
{
int result;
if (!serverConfig.ConfValueInteger(*this->data, tag, name, default_value, index, result))
if (!Config.ConfValueInteger(*this->data, tag, name, default_value, index, result))
{
this->error = CONF_VALUE_NOT_FOUND;
return 0;
@@ -89,17 +89,17 @@ long ConfigReader::GetError()
void ConfigReader::DumpErrors(bool bail)
{
serverConfig.ReportConfigError(this->errorlog->str(), bail);
Config.ReportConfigError(this->errorlog->str(), bail);
}
int ConfigReader::Enumerate(const std::string &tag)
{
return serverConfig.ConfValueEnum(*this->data, tag);
return Config.ConfValueEnum(*this->data, tag);
}
int ConfigReader::EnumerateValues(const std::string &tag, int index)
{
return serverConfig.ConfVarEnum(*this->data, tag, index);
return Config.ConfVarEnum(*this->data, tag, index);
}
bool ConfigReader::Verify()
+5 -4
View File
@@ -27,10 +27,11 @@ foreach(SRC ${CORE_SRCS})
if(TEMP_INCLUDES)
append_to_list(EXTRA_INCLUDES ${TEMP_INCLUDES})
endif(TEMP_INCLUDES)
# For Visual Studio only, include win32_memory.cpp to the list of sources, required to override Visual Studio's overrides of the new/delete operators
# For Visual Studio only, include win32_memory static library, required to override Visual Studio's overrides of the new/delete operators
if(MSVC)
append_to_list(SRC ${Anope_SOURCE_DIR}/src/win32_memory.cpp)
set_source_files_properties(${Anope_SOURCE_DIR}/src/win32_memory.cpp LANGUAGE CXX COMPILE_FLAGS "${CXXFLAGS}")
set(WIN32_MEMORY win32_memory)
else(MSVC)
set(WIN32_MEMORY)
endif(MSVC)
# Generate the module and set it's linker flags, also set it to depend on the main Anope executable to be built beforehand
add_library(${SO} MODULE ${SRC})
@@ -38,7 +39,7 @@ foreach(SRC ${CORE_SRCS})
add_dependencies(${SO} ${PROGRAM_NAME})
# For Windows only, have the module link to the export library of Anope as well as the wsock32 library (most of the modules probably don't need this, but this is to be on the safe side), also set it's version
if(WIN32)
target_link_libraries(${SO} ${PROGRAM_NAME} wsock32)
target_link_libraries(${SO} ${PROGRAM_NAME} wsock32 ${WIN32_MEMORY})
set_target_properties(${PROGRAM_NAME} PROPERTIES VERSION "${VERSION_DOTTED}")
endif(WIN32)
# Set the module to be installed to the module directory under the data directory
+6 -4
View File
@@ -21,11 +21,13 @@ install:
distclean: spotless
%.so: %.c
$(MAKEBIN) $(CC) ${CFLAGS} ${CDEFS} ${MODULEFLAGS} -I../${INCLUDEDIR} -o $*.so $*.c
.SUFFIXES: .c .cpp .so
%.so: %.cpp
$(MAKEBIN) $(CC) ${CFLAGS} ${CDEFS} ${MODULEFLAGS} -I../${INCLUDEDIR} -o $*.so $*.cpp
.c.so:
$(MAKEBIN) $(CC) ${CFLAGS} ${CDEFS} ${MODULEFLAGS} -I../${INCLUDEDIR} -o $@ $<
.cpp.so:
$(MAKEBIN) $(CC) ${CFLAGS} ${CDEFS} ${MODULEFLAGS} -I../${INCLUDEDIR} -o $@ $<
subs:
@for i in $(SUBS); do \
+19 -16
View File
@@ -1,6 +1,6 @@
/* BotServ core functions
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -22,47 +22,48 @@ class CommandBSAct : public Command
{
}
CommandReturn Execute(User *u, std::vector<ci::string> &params)
CommandReturn Execute(User *u, const std::vector<ci::string> &params)
{
ChannelInfo *ci = cs_findchan(params[0].c_str());
ci::string message = params[1];
if (!check_access(u, ci, CA_SAY))
{
notice_lang(s_BotServ, u, ACCESS_DENIED);
notice_lang(Config.s_BotServ, u, ACCESS_DENIED);
return MOD_CONT;
}
if (!ci->bi)
{
notice_help(s_BotServ, u, BOT_NOT_ASSIGNED);
notice_help(Config.s_BotServ, u, BOT_NOT_ASSIGNED);
return MOD_CONT;
}
if (!ci->c || ci->c->usercount < BSMinUsers)
if (!ci->c || ci->c->users.size() < Config.BSMinUsers)
{
notice_lang(s_BotServ, u, BOT_NOT_ON_CHANNEL, ci->name);
notice_lang(Config.s_BotServ, u, BOT_NOT_ON_CHANNEL, ci->name.c_str());
return MOD_CONT;
}
size_t i = 0;
while ((i = params[1].find_first_of("\001"), i) && i != std::string::npos)
params[1].erase(i, 1);
while ((i = message.find_first_of("\001"), i) && i != std::string::npos)
message.erase(i, 1);
ircdproto->SendAction(ci->bi, ci->name, "%s", params[1].c_str());
ircdproto->SendAction(ci->bi, ci->name.c_str(), "%s", message.c_str());
ci->bi->lastmsg = time(NULL);
if (LogBot && LogChannel && logchan && !debug && findchan(LogChannel))
ircdproto->SendPrivmsg(ci->bi, LogChannel, "ACT %s %s %s", u->nick, ci->name, params[1].c_str());
if (Config.LogBot && Config.LogChannel && LogChan && !debug && findchan(Config.LogChannel))
ircdproto->SendPrivmsg(ci->bi, Config.LogChannel, "ACT %s %s %s", u->nick.c_str(), ci->name.c_str(), message.c_str());
return MOD_CONT;
}
void OnSyntaxError(User *u)
void OnSyntaxError(User *u, const ci::string &subcommand)
{
syntax_error(s_BotServ, u, "ACT", BOT_ACT_SYNTAX);
syntax_error(Config.s_BotServ, u, "ACT", BOT_ACT_SYNTAX);
}
bool OnHelp(User *u, const ci::string &subcommand)
{
notice_help(s_BotServ, u, BOT_HELP_ACT);
notice_help(Config.s_BotServ, u, BOT_HELP_ACT);
return true;
}
};
@@ -76,10 +77,12 @@ class BSAct : public Module
this->SetVersion("$Id$");
this->SetType(CORE);
this->AddCommand(BOTSERV, new CommandBSAct());
ModuleManager::Attach(I_OnBotServHelp, this);
}
void BotServHelp(User *u)
void OnBotServHelp(User *u)
{
notice_lang(s_BotServ, u, BOT_HELP_CMD_ACT);
notice_lang(Config.s_BotServ, u, BOT_HELP_CMD_ACT);
}
};
+18 -16
View File
@@ -1,6 +1,6 @@
/* BotServ core functions
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -22,7 +22,7 @@ class CommandBSAssign : public Command
{
}
CommandReturn Execute(User *u, std::vector<ci::string> &params)
CommandReturn Execute(User *u, const std::vector<ci::string> &params)
{
const char *chan = params[0].c_str();
const char *nick = params[1].c_str();
@@ -31,50 +31,50 @@ class CommandBSAssign : public Command
if (readonly)
{
notice_lang(s_BotServ, u, BOT_ASSIGN_READONLY);
notice_lang(Config.s_BotServ, u, BOT_ASSIGN_READONLY);
return MOD_CONT;
}
if (!(bi = findbot(nick)))
{
notice_lang(s_BotServ, u, BOT_DOES_NOT_EXIST, nick);
notice_lang(Config.s_BotServ, u, BOT_DOES_NOT_EXIST, nick);
return MOD_CONT;
}
ci = cs_findchan(chan);
if ((ci->botflags & BS_NOBOT) || (!check_access(u, ci, CA_ASSIGN) && !u->nc->HasPriv("botserv/administration")))
if (ci->botflags.HasFlag(BS_NOBOT) || (!check_access(u, ci, CA_ASSIGN) && !u->Account()->HasPriv("botserv/administration")))
{
notice_lang(s_BotServ, u, ACCESS_DENIED);
notice_lang(Config.s_BotServ, u, ACCESS_DENIED);
return MOD_CONT;
}
if (bi->flags & BI_PRIVATE && !u->nc->HasCommand("botserv/assign/private"))
if (bi->HasFlag(BI_PRIVATE) && !u->Account()->HasCommand("botserv/assign/private"))
{
notice_lang(s_BotServ, u, ACCESS_DENIED);
notice_lang(Config.s_BotServ, u, ACCESS_DENIED);
return MOD_CONT;
}
if ((ci->bi) && (stricmp(ci->bi->nick, nick) == 0))
if (ci->bi && ci::string(ci->bi->nick.c_str()) == nick)
{
notice_lang(s_BotServ, u, BOT_ASSIGN_ALREADY, ci->bi->nick, chan);
notice_lang(Config.s_BotServ, u, BOT_ASSIGN_ALREADY, ci->bi->nick.c_str(), chan);
return MOD_CONT;
}
bi->Assign(u, ci);
notice_lang(s_BotServ, u, BOT_ASSIGN_ASSIGNED, bi->nick, ci->name);
notice_lang(Config.s_BotServ, u, BOT_ASSIGN_ASSIGNED, bi->nick.c_str(), ci->name.c_str());
return MOD_CONT;
}
bool OnHelp(User *u, const ci::string &subcommand)
{
notice_help(s_BotServ, u, BOT_HELP_ASSIGN);
notice_help(Config.s_BotServ, u, BOT_HELP_ASSIGN);
return true;
}
void OnSyntaxError(User *u)
void OnSyntaxError(User *u, const ci::string &subcommand)
{
syntax_error(s_BotServ, u, "ASSIGN", BOT_ASSIGN_SYNTAX);
syntax_error(Config.s_BotServ, u, "ASSIGN", BOT_ASSIGN_SYNTAX);
}
};
@@ -87,10 +87,12 @@ class BSAssign : public Module
this->SetVersion("$Id$");
this->SetType(CORE);
this->AddCommand(BOTSERV, new CommandBSAssign);
ModuleManager::Attach(I_OnBotServHelp, this);
}
void BotServHelp(User *u)
void OnBotServHelp(User *u)
{
notice_lang(s_BotServ, u, BOT_HELP_CMD_ASSIGN);
notice_lang(Config.s_BotServ, u, BOT_HELP_CMD_ASSIGN);
}
};
+98 -168
View File
@@ -1,6 +1,6 @@
/* BotServ core functions
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -22,211 +22,145 @@ int badwords_list_callback(User * u, int num, va_list args);
class CommandBSBadwords : public Command
{
private:
CommandReturn DoList(User *u, ChannelInfo *ci, const char *word)
CommandReturn DoList(User *u, ChannelInfo *ci, const ci::string &word)
{
int sent_header = 0;
int i = 0;
if (ci->bwcount == 0)
if (!ci->GetBadWordCount())
{
notice_lang(s_BotServ, u, BOT_BADWORDS_LIST_EMPTY, ci->name);
notice_lang(Config.s_BotServ, u, BOT_BADWORDS_LIST_EMPTY, ci->name.c_str());
return MOD_CONT;
}
if (word && strspn(word, "1234567890,-") == strlen(word))
if (!word.empty() && strspn(word.c_str(), "1234567890,-") == word.length())
{
process_numlist(word, NULL, badwords_list_callback, u, ci, &sent_header);
process_numlist(word.c_str(), NULL, badwords_list_callback, u, ci, &sent_header);
}
else
{
for (i = 0; i < ci->bwcount; i++)
for (unsigned i = 0; i < ci->GetBadWordCount(); i++)
{
if (!(ci->badwords[i].in_use))
continue;
if (word && ci->badwords[i].word
&& !Anope::Match(ci->badwords[i].word, word, false))
BadWord *badword = ci->GetBadWord(i);
if (!word.empty() && !Anope::Match(badword->word, word.c_str(), false))
continue;
badwords_list(u, i, ci, &sent_header);
}
}
if (!sent_header)
notice_lang(s_BotServ, u, BOT_BADWORDS_NO_MATCH, ci->name);
notice_lang(Config.s_BotServ, u, BOT_BADWORDS_NO_MATCH, ci->name.c_str());
return MOD_CONT;
}
CommandReturn DoAdd(User *u, ChannelInfo *ci, const char *word)
CommandReturn DoAdd(User *u, ChannelInfo *ci, const ci::string &word)
{
char *opt, *pos;
int type = BW_ANY;
unsigned i = 0;
BadWord *bw;
size_t pos = word.find_last_of(" ");
BadWordType type = BW_ANY;
ci::string realword = word;
if (readonly)
if (pos != ci::string::npos)
{
notice_lang(s_BotServ, u, BOT_BADWORDS_DISABLED);
ci::string opt = ci::string(word, pos + 1);
if (!opt.empty())
{
if (opt == "SINGLE")
type = BW_SINGLE;
else if (opt == "START")
type = BW_START;
else if (opt == "END")
type = BW_END;
}
realword = ci::string(word, 0, pos);
}
if (ci->GetBadWordCount() >= Config.BSBadWordsMax)
{
notice_lang(Config.s_BotServ, u, BOT_BADWORDS_REACHED_LIMIT, Config.BSBadWordsMax);
return MOD_CONT;
}
pos = strrchr(const_cast<char *>(word), ' '); // XXX - Potentially unsafe cast
if (pos)
for (unsigned i = 0; i < ci->GetBadWordCount(); ++i)
{
opt = pos + 1;
if (*opt)
{
if (!stricmp(opt, "SINGLE"))
type = BW_SINGLE;
else if (!stricmp(opt, "START"))
type = BW_START;
else if (!stricmp(opt, "END"))
type = BW_END;
if (type != BW_ANY)
*pos = 0;
}
}
BadWord *bw = ci->GetBadWord(i);
for (bw = ci->badwords, i = 0; i < ci->bwcount; bw++, i++)
{
if (bw->word && ((BSCaseSensitive && (!strcmp(bw->word, word)))
|| (!BSCaseSensitive
&& (!stricmp(bw->word, word)))))
if (!bw->word.empty() && (Config.BSCaseSensitive && !stricmp(bw->word.c_str(), realword.c_str())
|| (!Config.BSCaseSensitive && bw->word == realword.c_str())))
{
notice_lang(s_BotServ, u, BOT_BADWORDS_ALREADY_EXISTS,
bw->word, ci->name);
notice_lang(Config.s_BotServ, u, BOT_BADWORDS_ALREADY_EXISTS, bw->word.c_str(), ci->name.c_str());
return MOD_CONT;
}
}
for (i = 0; i < ci->bwcount; i++)
{
if (!ci->badwords[i].in_use)
break;
}
if (i == ci->bwcount)
{
if (i < BSBadWordsMax)
{
ci->bwcount++;
ci->badwords =
static_cast<BadWord *>(srealloc(ci->badwords, sizeof(BadWord) * ci->bwcount));
}
else
{
notice_lang(s_BotServ, u, BOT_BADWORDS_REACHED_LIMIT,
BSBadWordsMax);
return MOD_CONT;
}
}
bw = &ci->badwords[i];
bw->in_use = 1;
bw->word = sstrdup(word);
bw->type = type;
ci->AddBadWord(realword.c_str(), type);
notice_lang(Config.s_BotServ, u, BOT_BADWORDS_ADDED, realword.c_str(), ci->name.c_str());
notice_lang(s_BotServ, u, BOT_BADWORDS_ADDED, bw->word, ci->name);
return MOD_CONT;
}
CommandReturn DoDelete(User *u, ChannelInfo *ci, const char *word)
CommandReturn DoDelete(User *u, ChannelInfo *ci, const ci::string &word)
{
int deleted = 0, a, b;
int i;
BadWord *bw;
/* Special case: is it a number/list? Only do search if it isn't. */
if (isdigit(*word) && strspn(word, "1234567890,-") == strlen(word))
if (!word.empty() && isdigit(word[0]) && strspn(word.c_str(), "1234567890,-") == word.length())
{
int count, last = -1;
deleted = process_numlist(word, &count, badwords_del_callback, u, ci, &last);
int count, deleted, last = -1;
deleted = process_numlist(word.c_str(), &count, badwords_del_callback, u, ci, &last);
if (!deleted)
{
if (count == 1)
{
notice_lang(s_BotServ, u, BOT_BADWORDS_NO_SUCH_ENTRY, last, ci->name);
notice_lang(Config.s_BotServ, u, BOT_BADWORDS_NO_SUCH_ENTRY, last, ci->name.c_str());
}
else
{
notice_lang(s_BotServ, u, BOT_BADWORDS_NO_MATCH, ci->name);
notice_lang(Config.s_BotServ, u, BOT_BADWORDS_NO_MATCH, ci->name.c_str());
}
}
else if (deleted == 1)
{
notice_lang(s_BotServ, u, BOT_BADWORDS_DELETED_ONE, ci->name);
notice_lang(Config.s_BotServ, u, BOT_BADWORDS_DELETED_ONE, ci->name.c_str());
}
else
{
notice_lang(s_BotServ, u, BOT_BADWORDS_DELETED_SEVERAL, deleted, ci->name);
notice_lang(Config.s_BotServ, u, BOT_BADWORDS_DELETED_SEVERAL, deleted, ci->name.c_str());
}
if (deleted)
ci->CleanBadWords();
}
else
{
unsigned i;
BadWord *badword;
for (i = 0; i < ci->bwcount; i++)
for (i = 0; i < ci->GetBadWordCount(); ++i)
{
if (ci->badwords[i].in_use && !stricmp(ci->badwords[i].word, word))
badword = ci->GetBadWord(i);
if (badword->word == word)
break;
}
if (i == ci->bwcount)
if (i == ci->GetBadWordCount())
{
notice_lang(s_BotServ, u, BOT_BADWORDS_NOT_FOUND, word, ci->name);
notice_lang(Config.s_BotServ, u, BOT_BADWORDS_NOT_FOUND, word.c_str(), ci->name.c_str());
return MOD_CONT;
}
ci->EraseBadWord(badword);
bw = &ci->badwords[i];
notice_lang(s_BotServ, u, BOT_BADWORDS_DELETED, bw->word, ci->name);
if (bw->word)
delete [] bw->word;
bw->word = NULL;
bw->in_use = 0;
deleted = 1;
}
if (deleted) {
/* Reordering - DrStein */
for (b = 0; b < ci->bwcount; b++) {
if (ci->badwords[b].in_use) {
for (a = 0; a < ci->bwcount; a++) {
if (a > b)
break;
if (!(ci->badwords[a].in_use)) {
ci->badwords[a].in_use = ci->badwords[b].in_use;
ci->badwords[a].type = ci->badwords[b].type;
if (ci->badwords[b].word) {
ci->badwords[a].word = sstrdup(ci->badwords[b].word);
delete [] ci->badwords[b].word;
}
ci->badwords[b].word = NULL;
ci->badwords[b].in_use = 0;
break;
}
}
}
}
/* After reordering only the entries at the end could still be empty.
* We ll free the places no longer in use... - Viper */
for (i = ci->bwcount - 1; i >= 0; i--) {
if (ci->badwords[i].in_use)
break;
ci->bwcount--;
}
ci->badwords =
static_cast<BadWord *>(srealloc(ci->badwords,sizeof(BadWord) * ci->bwcount));
notice_lang(Config.s_BotServ, u, BOT_BADWORDS_DELETED, badword->word.c_str(), ci->name.c_str());
}
return MOD_CONT;
}
CommandReturn DoClear(User *u, ChannelInfo *ci, const char *word)
CommandReturn DoClear(User *u, ChannelInfo *ci)
{
int i;
for (i = 0; i < ci->bwcount; i++)
if (ci->badwords[i].word)
delete [] ci->badwords[i].word;
free(ci->badwords);
ci->badwords = NULL;
ci->bwcount = 0;
notice_lang(s_BotServ, u, BOT_BADWORDS_CLEAR);
ci->ClearBadWords();
notice_lang(Config.s_BotServ, u, BOT_BADWORDS_CLEAR);
return MOD_CONT;
}
public:
@@ -234,31 +168,31 @@ class CommandBSBadwords : public Command
{
}
CommandReturn Execute(User *u, std::vector<ci::string> &params)
CommandReturn Execute(User *u, const std::vector<ci::string> &params)
{
const char *chan = params[0].c_str();
ci::string cmd = params[1];
const char *word = params.size() > 2 ? params[2].c_str() : NULL;
ci::string word = params.size() > 2 ? params[2].c_str() : "";
ChannelInfo *ci;
bool need_args = cmd == "LIST" || cmd == "CLEAR";
if (need_args ? 0 : !word)
if (!need_args && word.empty())
{
this->OnSyntaxError(u);
this->OnSyntaxError(u, cmd);
return MOD_CONT;
}
ci = cs_findchan(chan);
if (!check_access(u, ci, CA_BADWORDS) && (!need_args || !u->nc->HasPriv("botserv/administration")))
if (!check_access(u, ci, CA_BADWORDS) && (!need_args || !u->Account()->HasPriv("botserv/administration")))
{
notice_lang(s_BotServ, u, ACCESS_DENIED);
notice_lang(Config.s_BotServ, u, ACCESS_DENIED);
return MOD_CONT;
}
if (readonly)
{
notice_lang(s_BotServ, u, BOT_BADWORDS_DISABLED);
notice_lang(Config.s_BotServ, u, BOT_BADWORDS_DISABLED);
return MOD_CONT;
}
@@ -269,21 +203,22 @@ class CommandBSBadwords : public Command
else if (cmd == "LIST")
return this->DoList(u, ci, word);
else if (cmd == "CLEAR")
return this->DoClear(u, ci, word);
return this->DoClear(u, ci);
else
this->OnSyntaxError(u);
this->OnSyntaxError(u, "");
return MOD_CONT;
}
bool OnHelp(User *u, const ci::string &subcommand)
{
notice_help(s_BotServ, u, BOT_HELP_BADWORDS);
notice_help(Config.s_BotServ, u, BOT_HELP_BADWORDS);
return true;
}
void OnSyntaxError(User *u)
void OnSyntaxError(User *u, const ci::string &subcommand)
{
syntax_error(s_BotServ, u, "BADWORDS", BOT_BADWORDS_SYNTAX);
syntax_error(Config.s_BotServ, u, "BADWORDS", BOT_BADWORDS_SYNTAX);
}
};
@@ -296,52 +231,45 @@ class BSBadwords : public Module
this->SetVersion("$Id$");
this->SetType(CORE);
this->AddCommand(BOTSERV, new CommandBSBadwords);
ModuleManager::Attach(I_OnBotServHelp, this);
}
void BotServHelp(User *u)
void OnBotServHelp(User *u)
{
notice_lang(s_BotServ, u, BOT_HELP_CMD_BADWORDS);
notice_lang(Config.s_BotServ, u, BOT_HELP_CMD_BADWORDS);
}
};
int badwords_del_callback(User * u, int num, va_list args)
{
BadWord *bw;
ChannelInfo *ci = va_arg(args, ChannelInfo *);
int *last = va_arg(args, int *);
*last = num;
if (num < 1 || num > ci->bwcount)
if (num < 1 || num > ci->GetBadWordCount())
return 0;
bw = &ci->badwords[num - 1];
if (bw->word)
delete [] bw->word;
bw->word = NULL;
bw->in_use = 0;
ci->GetBadWord(num - 1)->InUse = false;
return 1;
}
int badwords_list(User * u, int index, ChannelInfo * ci, int *sent_header)
{
BadWord *bw = &ci->badwords[index];
BadWord *bw = ci->GetBadWord(index);
if (!bw->in_use)
return 0;
if (!*sent_header) {
notice_lang(s_BotServ, u, BOT_BADWORDS_LIST_HEADER, ci->name);
if (!*sent_header)
{
notice_lang(Config.s_BotServ, u, BOT_BADWORDS_LIST_HEADER, ci->name.c_str());
*sent_header = 1;
}
notice_lang(s_BotServ, u, BOT_BADWORDS_LIST_FORMAT, index + 1,
bw->word,
((bw->type ==
BW_SINGLE) ? "(SINGLE)" : ((bw->type ==
BW_START) ? "(START)"
: ((bw->type ==
BW_END) ? "(END)" : "")))
);
notice_lang(Config.s_BotServ, u, BOT_BADWORDS_LIST_FORMAT, index + 1, bw->word.c_str(),
((bw->type == BW_SINGLE) ? "(SINGLE)" : ((bw->type == BW_START) ? "(START)"
: ((bw->type == BW_END) ? "(END)" : "")))
);
return 1;
}
@@ -349,8 +277,10 @@ int badwords_list_callback(User * u, int num, va_list args)
{
ChannelInfo *ci = va_arg(args, ChannelInfo *);
int *sent_header = va_arg(args, int *);
if (num < 1 || num > ci->bwcount)
if (num < 1 || num > ci->GetBadWordCount())
return 0;
return badwords_list(u, num - 1, ci, sent_header);
}
+88 -104
View File
@@ -1,6 +1,6 @@
/* BotServ core functions
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -18,57 +18,51 @@
class CommandBSBot : public Command
{
private:
CommandReturn DoAdd(User *u, std::vector<ci::string> &params)
CommandReturn DoAdd(User *u, const std::vector<ci::string> &params)
{
const char *nick = params[1].c_str();
const char *user = params.size() > 2 ? params[2].c_str() : NULL;
const char *host = params.size() > 3 ? params[3].c_str() : NULL;
const char *real = params.size() > 4 ? params[4].c_str() : NULL;
const char *user = params[2].c_str();
const char *host = params[3].c_str();
const char *real = params[4].c_str();
const char *ch = NULL;
BotInfo *bi;
if (!nick || !user || !host || !real)
{
this->OnSyntaxError(u);
return MOD_CONT;
}
if (findbot(nick))
{
notice_lang(s_BotServ, u, BOT_BOT_ALREADY_EXISTS, nick);
notice_lang(Config.s_BotServ, u, BOT_BOT_ALREADY_EXISTS, nick);
return MOD_CONT;
}
if (strlen(nick) > NickLen)
if (strlen(nick) > Config.NickLen)
{
notice_lang(s_BotServ, u, BOT_BAD_NICK);
notice_lang(Config.s_BotServ, u, BOT_BAD_NICK);
return MOD_CONT;
}
if (strlen(user) >= USERMAX)
if (strlen(user) > Config.UserLen)
{
notice_lang(s_BotServ, u, BOT_LONG_IDENT, USERMAX - 1);
notice_lang(Config.s_BotServ, u, BOT_LONG_IDENT, Config.UserLen);
return MOD_CONT;
}
if (strlen(user) > HOSTMAX)
if (strlen(user) > Config.HostLen)
{
notice_lang(s_BotServ, u, BOT_LONG_HOST, HOSTMAX);
notice_lang(Config.s_BotServ, u, BOT_LONG_HOST, Config.HostLen);
return MOD_CONT;
}
/* Check the nick is valid re RFC 2812 */
if (isdigit(nick[0]) || nick[0] == '-')
{
notice_lang(s_BotServ, u, BOT_BAD_NICK);
notice_lang(Config.s_BotServ, u, BOT_BAD_NICK);
return MOD_CONT;
}
for (ch = nick; *ch && (ch - nick) < NICKMAX; ch++)
for (ch = nick; *ch && (ch - nick) < Config.NickLen; ch++)
{
if (!isvalidnick(*ch))
{
notice_lang(s_BotServ, u, BOT_BAD_NICK);
notice_lang(Config.s_BotServ, u, BOT_BAD_NICK);
return MOD_CONT;
}
}
@@ -76,22 +70,22 @@ class CommandBSBot : public Command
/* check for hardcored ircd forbidden nicks */
if (!ircdproto->IsNickValid(nick))
{
notice_lang(s_BotServ, u, BOT_BAD_NICK);
notice_lang(Config.s_BotServ, u, BOT_BAD_NICK);
return MOD_CONT;
}
/* Check the host is valid re RFC 2812 */
if (!isValidHost(host, 3))
{
notice_lang(s_BotServ, u, BOT_BAD_HOST);
notice_lang(Config.s_BotServ, u, BOT_BAD_HOST);
return MOD_CONT;
}
for (ch = user; *ch && (ch - user) < USERMAX; ch++)
for (ch = user; *ch && (ch - user) < Config.UserLen; ch++)
{
if (!isalnum(*ch))
{
notice_lang(s_BotServ, u, BOT_LONG_IDENT, USERMAX - 1);
notice_lang(Config.s_BotServ, u, BOT_BAD_IDENT, Config.UserLen);
return MOD_CONT;
}
}
@@ -103,27 +97,26 @@ class CommandBSBot : public Command
*/
if (findnick(nick))
{
notice_lang(s_BotServ, u, NICK_ALREADY_REGISTERED, nick);
notice_lang(Config.s_BotServ, u, NICK_ALREADY_REGISTERED, nick);
return MOD_CONT;
}
if (!(bi = new BotInfo(nick, user, host, real)))
{
notice_lang(s_BotServ, u, BOT_BOT_CREATION_FAILED);
notice_lang(Config.s_BotServ, u, BOT_BOT_CREATION_FAILED);
return MOD_CONT;
}
/* We check whether user with this nick is online, and kill it if so */
EnforceQlinedNick(nick, s_BotServ);
EnforceQlinedNick(nick, Config.s_BotServ);
notice_lang(s_BotServ, u, BOT_BOT_ADDED, bi->nick, bi->user,
bi->host, bi->real);
notice_lang(Config.s_BotServ, u, BOT_BOT_ADDED, bi->nick.c_str(), bi->user.c_str(), bi->host.c_str(), bi->real.c_str());
FOREACH_MOD(I_OnBotCreate, OnBotCreate(bi));
return MOD_CONT;
}
CommandReturn DoChange(User *u, std::vector<ci::string> &params)
CommandReturn DoChange(User *u, const std::vector<ci::string> &params)
{
const char *oldnick = params[1].c_str();
const char *nick = params.size() > 2 ? params[2].c_str() : NULL;
@@ -135,43 +128,43 @@ class CommandBSBot : public Command
if (!oldnick || !nick)
{
this->OnSyntaxError(u);
this->OnSyntaxError(u, "CHANGE");
return MOD_CONT;
}
if (!(bi = findbot(oldnick)))
{
notice_lang(s_BotServ, u, BOT_DOES_NOT_EXIST, oldnick);
notice_lang(Config.s_BotServ, u, BOT_DOES_NOT_EXIST, oldnick);
return MOD_CONT;
}
if (stricmp(oldnick, nick) && nickIsServices(oldnick, 0))
{
notice_lang(s_BotServ, u, BOT_DOES_NOT_EXIST, oldnick);
notice_lang(Config.s_BotServ, u, BOT_DOES_NOT_EXIST, oldnick);
return MOD_CONT;
}
if (strlen(nick) > NickLen)
if (strlen(nick) > Config.NickLen)
{
notice_lang(s_BotServ, u, BOT_BAD_NICK);
notice_lang(Config.s_BotServ, u, BOT_BAD_NICK);
return MOD_CONT;
}
if (user && strlen(user) >= USERMAX)
if (user && strlen(user) > Config.UserLen)
{
notice_lang(s_BotServ, u, BOT_LONG_IDENT, USERMAX - 1);
notice_lang(Config.s_BotServ, u, BOT_LONG_IDENT, Config.UserLen);
return MOD_CONT;
}
if (host && strlen(host) > HOSTMAX)
if (host && strlen(host) > Config.HostLen)
{
notice_lang(s_BotServ, u, BOT_LONG_HOST, HOSTMAX);
notice_lang(Config.s_BotServ, u, BOT_LONG_HOST, Config.HostLen);
return MOD_CONT;
}
if (stricmp(oldnick, nick) && nickIsServices(nick, 0))
{
notice_lang(s_BotServ, u, BOT_DOES_NOT_EXIST, oldnick);
notice_lang(Config.s_BotServ, u, BOT_DOES_NOT_EXIST, oldnick);
return MOD_CONT;
}
@@ -180,27 +173,24 @@ class CommandBSBot : public Command
* And we must finally check that the nick is not already
* taken by another bot.
*/
if (!strcmp(bi->nick, nick)
&& ((user) ? !strcmp(bi->user, user) : 1)
&& ((host) ? !strcmp(bi->host, host) : 1)
&& ((real) ? !strcmp(bi->real, real) : 1))
if (bi->nick == nick && (user ? bi->user == user : 1) && (host ? bi->host == host : 1) && (real ? bi->real == real : 1))
{
notice_lang(s_BotServ, u, BOT_BOT_ANY_CHANGES);
notice_lang(Config.s_BotServ, u, BOT_BOT_ANY_CHANGES);
return MOD_CONT;
}
/* Check the nick is valid re RFC 2812 */
if (isdigit(nick[0]) || nick[0] == '-')
{
notice_lang(s_BotServ, u, BOT_BAD_NICK);
notice_lang(Config.s_BotServ, u, BOT_BAD_NICK);
return MOD_CONT;
}
for (ch = nick; *ch && (ch - nick) < NICKMAX; ch++)
for (ch = nick; *ch && (ch - nick) < Config.NickLen; ch++)
{
if (!isvalidnick(*ch))
{
notice_lang(s_BotServ, u, BOT_BAD_NICK);
notice_lang(Config.s_BotServ, u, BOT_BAD_NICK);
return MOD_CONT;
}
}
@@ -208,35 +198,36 @@ class CommandBSBot : public Command
/* check for hardcored ircd forbidden nicks */
if (!ircdproto->IsNickValid(nick))
{
notice_lang(s_BotServ, u, BOT_BAD_NICK);
notice_lang(Config.s_BotServ, u, BOT_BAD_NICK);
return MOD_CONT;
}
if (host && !isValidHost(host, 3))
{
notice_lang(s_BotServ, u, BOT_BAD_HOST);
notice_lang(Config.s_BotServ, u, BOT_BAD_HOST);
return MOD_CONT;
}
if (user)
{
for (ch = user; *ch && (ch - user) < USERMAX; ch++)
for (ch = user; *ch && (ch - user) < Config.UserLen; ch++)
{
if (!isalnum(*ch))
{
notice_lang(s_BotServ, u, BOT_LONG_IDENT, USERMAX - 1);
notice_lang(Config.s_BotServ, u, BOT_BAD_IDENT, Config.UserLen);
return MOD_CONT;
}
}
}
if (stricmp(bi->nick, nick) && findbot(nick))
ci::string ci_bi_nick(bi->nick.c_str());
if (ci_bi_nick != nick && findbot(nick))
{
notice_lang(s_BotServ, u, BOT_BOT_ALREADY_EXISTS, nick);
notice_lang(Config.s_BotServ, u, BOT_BOT_ALREADY_EXISTS, nick);
return MOD_CONT;
}
if (stricmp(bi->nick, nick))
if (ci_bi_nick != nick)
{
/* We check whether the nick is registered, and inform the user
* if so. You need to drop the nick manually before you can use
@@ -244,7 +235,7 @@ class CommandBSBot : public Command
*/
if (findnick(nick))
{
notice_lang(s_BotServ, u, NICK_ALREADY_REGISTERED, nick);
notice_lang(Config.s_BotServ, u, NICK_ALREADY_REGISTERED, nick);
return MOD_CONT;
}
@@ -256,7 +247,7 @@ class CommandBSBot : public Command
}
/* We check whether user with this nick is online, and kill it if so */
EnforceQlinedNick(nick, s_BotServ);
EnforceQlinedNick(nick, Config.s_BotServ);
}
if (user)
@@ -266,24 +257,15 @@ class CommandBSBot : public Command
ircdproto->SendSQLine(bi->nick, "Reserved for services");
}
if (strcmp(nick, bi->nick))
if (bi->nick != nick)
bi->ChangeNick(nick);
if (user && strcmp(user, bi->user))
{
delete [] bi->user;
bi->user = sstrdup(user);
}
if (host && strcmp(host, bi->host))
{
delete [] bi->host;
bi->host = sstrdup(host);
}
if (real && strcmp(real, bi->real))
{
delete [] bi->real;
bi->real = sstrdup(real);
}
if (user && bi->user != user)
bi->user = user;
if (host && bi->host != host)
bi->host = host;
if (real && bi->real != real)
bi->real = real;
if (user)
{
@@ -291,48 +273,47 @@ class CommandBSBot : public Command
// This isn't the nicest way to do this, unfortunately.
bi->uid = ts6_uid_retrieve();
}
ircdproto->SendClientIntroduction(bi->nick, bi->user, bi->host, bi->real,
ircd->pseudoclient_mode, bi->uid.c_str());
ircdproto->SendClientIntroduction(bi->nick, bi->user, bi->host, bi->real, ircd->pseudoclient_mode, bi->uid);
ircdproto->SendSQLine(bi->nick, "Reserved for services");
bi->RejoinAll();
}
notice_lang(s_BotServ, u, BOT_BOT_CHANGED,
oldnick, bi->nick, bi->user, bi->host, bi->real);
notice_lang(Config.s_BotServ, u, BOT_BOT_CHANGED, oldnick, bi->nick.c_str(), bi->user.c_str(), bi->host.c_str(), bi->real.c_str());
FOREACH_MOD(I_OnBotChange, OnBotChange(bi));
return MOD_CONT;
}
CommandReturn DoDel(User *u, std::vector<ci::string> &params)
CommandReturn DoDel(User *u, const std::vector<ci::string> &params)
{
const char *nick = params[1].c_str();
BotInfo *bi;
if (!nick)
{
this->OnSyntaxError(u);
this->OnSyntaxError(u, "DEL");
return MOD_CONT;
}
if (!(bi = findbot(nick)))
{
notice_lang(s_BotServ, u, BOT_DOES_NOT_EXIST, nick);
notice_lang(Config.s_BotServ, u, BOT_DOES_NOT_EXIST, nick);
return MOD_CONT;
}
if (nickIsServices(nick, 0))
{
notice_lang(s_BotServ, u, BOT_DOES_NOT_EXIST, nick);
notice_lang(Config.s_BotServ, u, BOT_DOES_NOT_EXIST, nick);
return MOD_CONT;
}
FOREACH_MOD(I_OnBotDelete, OnBotDelete(bi));
ircdproto->SendQuit(bi, "Quit: Help! I'm being deleted by %s!", u->nick);
ircdproto->SendQuit(bi, "Quit: Help! I'm being deleted by %s!", u->nick.c_str());
ircdproto->SendSQLineDel(bi->nick);
delete bi;
notice_lang(s_BotServ, u, BOT_BOT_DELETED, nick);
notice_lang(Config.s_BotServ, u, BOT_BOT_DELETED, nick);
return MOD_CONT;
}
public:
@@ -341,50 +322,51 @@ class CommandBSBot : public Command
this->SetFlag(CFLAG_STRIP_CHANNEL);
}
CommandReturn Execute(User *u, std::vector<ci::string> &params)
CommandReturn Execute(User *u, const std::vector<ci::string> &params)
{
ci::string cmd = params[0];
if (readonly)
{
notice_lang(s_BotServ, u, BOT_BOT_READONLY);
notice_lang(Config.s_BotServ, u, BOT_BOT_READONLY);
return MOD_CONT;
}
if (cmd == "ADD")
{
// ADD nick user host real - 5
if (!u->nc->HasCommand("botserv/bot/add"))
if (!u->Account()->HasCommand("botserv/bot/add"))
{
notice_lang(s_BotServ, u, ACCESS_DENIED);
notice_lang(Config.s_BotServ, u, ACCESS_DENIED);
return MOD_CONT;
}
if (params.size() < 5)
{
this->OnSyntaxError(u);
this->OnSyntaxError(u, "ADD");
return MOD_CONT;
}
std::vector<ci::string> tempparams = params;
// ADD takes less params than CHANGE, so we need to take 6 if given and append it with a space to 5.
if (params.size() >= 6)
params[4] = params[4] + " " + params[5];
if (tempparams.size() >= 6)
tempparams[4] = tempparams[4] + " " + tempparams[5];
return this->DoAdd(u, params);
return this->DoAdd(u, tempparams);
}
else if (cmd == "CHANGE")
{
// CHANGE oldn newn user host real - 6
// but only oldn and newn are required
if (!u->nc->HasCommand("botserv/bot/change"))
if (!u->Account()->HasCommand("botserv/bot/change"))
{
notice_lang(s_BotServ, u, ACCESS_DENIED);
notice_lang(Config.s_BotServ, u, ACCESS_DENIED);
return MOD_CONT;
}
if (params.size() < 3)
{
this->OnSyntaxError(u);
this->OnSyntaxError(u, "CHANGE");
return MOD_CONT;
}
@@ -393,35 +375,35 @@ class CommandBSBot : public Command
else if (cmd == "DEL")
{
// DEL nick
if (!u->nc->HasCommand("botserv/bot/del"))
if (!u->Account()->HasCommand("botserv/bot/del"))
{
notice_lang(s_BotServ, u, ACCESS_DENIED);
notice_lang(Config.s_BotServ, u, ACCESS_DENIED);
return MOD_CONT;
}
if (params.size() < 1)
{
this->OnSyntaxError(u);
this->OnSyntaxError(u, "DEL");
return MOD_CONT;
}
return this->DoDel(u, params);
}
else
this->OnSyntaxError(u);
this->OnSyntaxError(u, "");
return MOD_CONT;
}
bool OnHelp(User *u, const ci::string &subcommand)
{
notice_lang(s_BotServ, u, BOT_SERVADMIN_HELP_BOT);
notice_lang(Config.s_BotServ, u, BOT_SERVADMIN_HELP_BOT);
return true;
}
void OnSyntaxError(User *u)
void OnSyntaxError(User *u, const ci::string &subcommand)
{
syntax_error(s_BotServ, u, "BOT", BOT_BOT_SYNTAX);
syntax_error(Config.s_BotServ, u, "BOT", BOT_BOT_SYNTAX);
}
};
@@ -434,10 +416,12 @@ class BSBot : public Module
this->SetVersion("$Id$");
this->SetType(CORE);
this->AddCommand(BOTSERV, new CommandBSBot());
ModuleManager::Attach(I_OnBotServHelp, this);
}
void BotServHelp(User *u)
void OnBotServHelp(User *u)
{
notice_lang(s_BotServ, u, BOT_HELP_CMD_BOT);
notice_lang(Config.s_BotServ, u, BOT_HELP_CMD_BOT);
}
};
+17 -15
View File
@@ -1,6 +1,6 @@
/* BotServ core functions
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -22,34 +22,34 @@ class CommandBSBotList : public Command
{
}
CommandReturn Execute(User *u, std::vector<ci::string> &params)
CommandReturn Execute(User *u, const std::vector<ci::string> &params)
{
int i, count = 0;
BotInfo *bi;
if (!nbots) {
notice_lang(s_BotServ, u, BOT_BOTLIST_EMPTY);
notice_lang(Config.s_BotServ, u, BOT_BOTLIST_EMPTY);
return MOD_CONT;
}
for (i = 0; i < 256; i++) {
for (bi = botlists[i]; bi; bi = bi->next) {
if (!(bi->flags & BI_PRIVATE)) {
if (!(bi->HasFlag(BI_PRIVATE))) {
if (!count)
notice_lang(s_BotServ, u, BOT_BOTLIST_HEADER);
notice_lang(Config.s_BotServ, u, BOT_BOTLIST_HEADER);
count++;
u->SendMessage(s_BotServ, " %-15s (%s@%s)", bi->nick, bi->user, bi->host);
u->SendMessage(Config.s_BotServ, " %-15s (%s@%s)", bi->nick.c_str(), bi->user.c_str(), bi->host.c_str());
}
}
}
if (u->nc->HasCommand("botserv/botlist") && count < nbots) {
notice_lang(s_BotServ, u, BOT_BOTLIST_PRIVATE_HEADER);
if (u->Account()->HasCommand("botserv/botlist") && count < nbots) {
notice_lang(Config.s_BotServ, u, BOT_BOTLIST_PRIVATE_HEADER);
for (i = 0; i < 256; i++) {
for (bi = botlists[i]; bi; bi = bi->next) {
if (bi->flags & BI_PRIVATE) {
u->SendMessage(s_BotServ, " %-15s (%s@%s)", bi->nick, bi->user, bi->host);
if (bi->HasFlag(BI_PRIVATE)) {
u->SendMessage(Config.s_BotServ, " %-15s (%s@%s)", bi->nick.c_str(), bi->user.c_str(), bi->host.c_str());
count++;
}
}
@@ -57,15 +57,15 @@ class CommandBSBotList : public Command
}
if (!count)
notice_lang(s_BotServ, u, BOT_BOTLIST_EMPTY);
notice_lang(Config.s_BotServ, u, BOT_BOTLIST_EMPTY);
else
notice_lang(s_BotServ, u, BOT_BOTLIST_FOOTER, count);
notice_lang(Config.s_BotServ, u, BOT_BOTLIST_FOOTER, count);
return MOD_CONT;
}
bool OnHelp(User *u, const ci::string &subcommand)
{
notice_help(s_BotServ, u, BOT_HELP_BOTLIST);
notice_help(Config.s_BotServ, u, BOT_HELP_BOTLIST);
return true;
}
};
@@ -79,10 +79,12 @@ class BSBotList : public Module
this->SetVersion("$Id$");
this->SetType(CORE);
this->AddCommand(BOTSERV, new CommandBSBotList());
ModuleManager::Attach(I_OnBotServHelp, this);
}
void BotServHelp(User *u)
void OnBotServHelp(User *u)
{
notice_lang(s_BotServ, u, BOT_HELP_CMD_BOTLIST);
notice_lang(Config.s_BotServ, u, BOT_HELP_CMD_BOTLIST);
}
};
+7 -7
View File
@@ -1,6 +1,6 @@
/* BotServ core functions
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -24,18 +24,18 @@ class CommandBSHelp : public Command
this->SetFlag(CFLAG_STRIP_CHANNEL);
}
CommandReturn Execute(User *u, std::vector<ci::string> &params)
CommandReturn Execute(User *u, const std::vector<ci::string> &params)
{
mod_help_cmd(s_BotServ, u, BOTSERV, params[0].c_str());
mod_help_cmd(Config.s_BotServ, u, BOTSERV, params[0].c_str());
return MOD_CONT;
}
void OnSyntaxError(User *u)
void OnSyntaxError(User *u, const ci::string &subcommand)
{
// Abuse syntax error to display general list help.
notice_help(s_BotServ, u, BOT_HELP);
moduleDisplayHelp(s_BotServ, u);
notice_help(s_BotServ, u, BOT_HELP_FOOTER, BSMinUsers);
notice_help(Config.s_BotServ, u, BOT_HELP);
FOREACH_MOD(I_OnBotServHelp, OnBotServHelp(u));
notice_help(Config.s_BotServ, u, BOT_HELP_FOOTER, Config.BSMinUsers);
}
};
+65 -67
View File
@@ -1,6 +1,6 @@
/* BotServ core functions
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -30,20 +30,20 @@ class CommandBSInfo : public Command
for (i = 0; i < 256; i++) {
for (ci = chanlists[i]; ci; ci = ci->next) {
if (ci->bi == bi) {
if (strlen(buf) + strlen(ci->name) > 300) {
u->SendMessage(s_BotServ, "%s", buf);
if (strlen(buf) + strlen(ci->name.c_str()) > 300) {
u->SendMessage(Config.s_BotServ, "%s", buf);
*buf = 0;
end = buf;
}
end +=
snprintf(end, sizeof(buf) - (end - buf), " %s ",
ci->name);
ci->name.c_str());
}
}
}
if (*buf)
u->SendMessage(s_BotServ, "%s", buf);
u->SendMessage(Config.s_BotServ, "%s", buf);
return;
}
public:
@@ -52,7 +52,7 @@ class CommandBSInfo : public Command
this->SetFlag(CFLAG_STRIP_CHANNEL);
}
CommandReturn Execute(User *u, std::vector<ci::string> &params)
CommandReturn Execute(User *u, const std::vector<ci::string> &params)
{
BotInfo *bi;
ChannelInfo *ci;
@@ -66,185 +66,181 @@ class CommandBSInfo : public Command
{
struct tm *tm;
notice_lang(s_BotServ, u, BOT_INFO_BOT_HEADER, bi->nick);
notice_lang(s_BotServ, u, BOT_INFO_BOT_MASK, bi->user, bi->host);
notice_lang(s_BotServ, u, BOT_INFO_BOT_REALNAME, bi->real);
notice_lang(Config.s_BotServ, u, BOT_INFO_BOT_HEADER, bi->nick.c_str());
notice_lang(Config.s_BotServ, u, BOT_INFO_BOT_MASK, bi->user.c_str(), bi->host.c_str());
notice_lang(Config.s_BotServ, u, BOT_INFO_BOT_REALNAME, bi->real.c_str());
tm = localtime(&bi->created);
strftime_lang(buf, sizeof(buf), u, STRFTIME_DATE_TIME_FORMAT, tm);
notice_lang(s_BotServ, u, BOT_INFO_BOT_CREATED, buf);
notice_lang(s_BotServ, u, BOT_INFO_BOT_OPTIONS,
getstring(u,
(bi->
flags & BI_PRIVATE) ? BOT_INFO_OPT_PRIVATE :
BOT_INFO_OPT_NONE));
notice_lang(s_BotServ, u, BOT_INFO_BOT_USAGE, bi->chancount);
notice_lang(Config.s_BotServ, u, BOT_INFO_BOT_CREATED, buf);
notice_lang(Config.s_BotServ, u, BOT_INFO_BOT_OPTIONS, getstring(u, (bi->HasFlag(BI_PRIVATE) ? BOT_INFO_OPT_PRIVATE : BOT_INFO_OPT_NONE)));
notice_lang(Config.s_BotServ, u, BOT_INFO_BOT_USAGE, bi->chancount);
if (u->nc->HasPriv("botserv/administration"))
if (u->Account()->HasPriv("botserv/administration"))
this->send_bot_channels(u, bi);
}
else if ((ci = cs_findchan(query)))
{
if (!is_founder(u, ci) && !u->nc->HasPriv("botserv/administration"))
if (!IsFounder(u, ci) && !u->Account()->HasPriv("botserv/administration"))
{
notice_lang(s_BotServ, u, ACCESS_DENIED);
notice_lang(Config.s_BotServ, u, ACCESS_DENIED);
return MOD_CONT;
}
notice_lang(s_BotServ, u, BOT_INFO_CHAN_HEADER, ci->name);
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_HEADER, ci->name.c_str());
if (ci->bi)
notice_lang(s_BotServ, u, BOT_INFO_CHAN_BOT, ci->bi->nick);
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_BOT, ci->bi->nick.c_str());
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_BOT_NONE);
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_BOT_NONE);
if (ci->botflags & BS_KICK_BADWORDS) {
if (ci->botflags.HasFlag(BS_KICK_BADWORDS)) {
if (ci->ttb[TTB_BADWORDS])
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_BADWORDS_BAN,
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_KICK_BADWORDS_BAN,
getstring(u, BOT_INFO_ACTIVE),
ci->ttb[TTB_BADWORDS]);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_BADWORDS,
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_KICK_BADWORDS,
getstring(u, BOT_INFO_ACTIVE));
} else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_BADWORDS,
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_KICK_BADWORDS,
getstring(u, BOT_INFO_INACTIVE));
if (ci->botflags & BS_KICK_BOLDS) {
if (ci->botflags.HasFlag(BS_KICK_BOLDS)) {
if (ci->ttb[TTB_BOLDS])
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_BOLDS_BAN,
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_KICK_BOLDS_BAN,
getstring(u, BOT_INFO_ACTIVE),
ci->ttb[TTB_BOLDS]);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_BOLDS,
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_KICK_BOLDS,
getstring(u, BOT_INFO_ACTIVE));
} else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_BOLDS,
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_KICK_BOLDS,
getstring(u, BOT_INFO_INACTIVE));
if (ci->botflags & BS_KICK_CAPS) {
if (ci->botflags.HasFlag(BS_KICK_CAPS)) {
if (ci->ttb[TTB_CAPS])
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_CAPS_BAN,
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_KICK_CAPS_BAN,
getstring(u, BOT_INFO_ACTIVE),
ci->ttb[TTB_CAPS], ci->capsmin,
ci->capspercent);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_CAPS_ON,
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_KICK_CAPS_ON,
getstring(u, BOT_INFO_ACTIVE), ci->capsmin,
ci->capspercent);
} else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_CAPS_OFF,
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_KICK_CAPS_OFF,
getstring(u, BOT_INFO_INACTIVE));
if (ci->botflags & BS_KICK_COLORS) {
if (ci->botflags.HasFlag(BS_KICK_COLORS)) {
if (ci->ttb[TTB_COLORS])
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_COLORS_BAN,
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_KICK_COLORS_BAN,
getstring(u, BOT_INFO_ACTIVE),
ci->ttb[TTB_COLORS]);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_COLORS,
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_KICK_COLORS,
getstring(u, BOT_INFO_ACTIVE));
} else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_COLORS,
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_KICK_COLORS,
getstring(u, BOT_INFO_INACTIVE));
if (ci->botflags & BS_KICK_FLOOD) {
if (ci->botflags.HasFlag(BS_KICK_FLOOD)) {
if (ci->ttb[TTB_FLOOD])
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_FLOOD_BAN,
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_KICK_FLOOD_BAN,
getstring(u, BOT_INFO_ACTIVE),
ci->ttb[TTB_FLOOD], ci->floodlines,
ci->floodsecs);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_FLOOD_ON,
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_KICK_FLOOD_ON,
getstring(u, BOT_INFO_ACTIVE),
ci->floodlines, ci->floodsecs);
} else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_FLOOD_OFF,
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_KICK_FLOOD_OFF,
getstring(u, BOT_INFO_INACTIVE));
if (ci->botflags & BS_KICK_REPEAT) {
if (ci->botflags.HasFlag(BS_KICK_REPEAT)) {
if (ci->ttb[TTB_REPEAT])
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_REPEAT_BAN,
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_KICK_REPEAT_BAN,
getstring(u, BOT_INFO_ACTIVE),
ci->ttb[TTB_REPEAT], ci->repeattimes);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_REPEAT_ON,
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_KICK_REPEAT_ON,
getstring(u, BOT_INFO_ACTIVE),
ci->repeattimes);
} else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_REPEAT_OFF,
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_KICK_REPEAT_OFF,
getstring(u, BOT_INFO_INACTIVE));
if (ci->botflags & BS_KICK_REVERSES) {
if (ci->botflags.HasFlag(BS_KICK_REVERSES)) {
if (ci->ttb[TTB_REVERSES])
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_REVERSES_BAN,
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_KICK_REVERSES_BAN,
getstring(u, BOT_INFO_ACTIVE),
ci->ttb[TTB_REVERSES]);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_REVERSES,
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_KICK_REVERSES,
getstring(u, BOT_INFO_ACTIVE));
} else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_REVERSES,
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_KICK_REVERSES,
getstring(u, BOT_INFO_INACTIVE));
if (ci->botflags & BS_KICK_UNDERLINES) {
if (ci->botflags.HasFlag(BS_KICK_UNDERLINES)) {
if (ci->ttb[TTB_UNDERLINES])
notice_lang(s_BotServ, u,
notice_lang(Config.s_BotServ, u,
BOT_INFO_CHAN_KICK_UNDERLINES_BAN,
getstring(u, BOT_INFO_ACTIVE),
ci->ttb[TTB_UNDERLINES]);
else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_UNDERLINES,
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_KICK_UNDERLINES,
getstring(u, BOT_INFO_ACTIVE));
} else
notice_lang(s_BotServ, u, BOT_INFO_CHAN_KICK_UNDERLINES,
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_KICK_UNDERLINES,
getstring(u, BOT_INFO_INACTIVE));
end = buf;
*end = 0;
if (ci->botflags & BS_DONTKICKOPS) {
if (ci->botflags.HasFlag(BS_DONTKICKOPS)) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s",
getstring(u, BOT_INFO_OPT_DONTKICKOPS));
need_comma = 1;
}
if (ci->botflags & BS_DONTKICKVOICES) {
if (ci->botflags.HasFlag(BS_DONTKICKVOICES)) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u, BOT_INFO_OPT_DONTKICKVOICES));
need_comma = 1;
}
if (ci->botflags & BS_FANTASY) {
if (ci->botflags.HasFlag(BS_FANTASY)) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u, BOT_INFO_OPT_FANTASY));
need_comma = 1;
}
if (ci->botflags & BS_GREET) {
if (ci->botflags.HasFlag(BS_GREET)) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u, BOT_INFO_OPT_GREET));
need_comma = 1;
}
if (ci->botflags & BS_NOBOT) {
if (ci->botflags.HasFlag(BS_NOBOT)) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u, BOT_INFO_OPT_NOBOT));
need_comma = 1;
}
if (ci->botflags & BS_SYMBIOSIS) {
if (ci->botflags.HasFlag(BS_SYMBIOSIS)) {
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s",
need_comma ? commastr : "",
getstring(u, BOT_INFO_OPT_SYMBIOSIS));
need_comma = 1;
}
notice_lang(s_BotServ, u, BOT_INFO_CHAN_OPTIONS,
notice_lang(Config.s_BotServ, u, BOT_INFO_CHAN_OPTIONS,
*buf ? buf : getstring(u, BOT_INFO_OPT_NONE));
} else
notice_lang(s_BotServ, u, BOT_INFO_NOT_FOUND, query);
notice_lang(Config.s_BotServ, u, BOT_INFO_NOT_FOUND, query);
return MOD_CONT;
}
bool OnHelp(User *u, const ci::string &subcommand)
{
notice_help(s_BotServ, u, BOT_HELP_INFO);
notice_help(Config.s_BotServ, u, BOT_HELP_INFO);
return true;
}
void OnSyntaxError(User *u)
void OnSyntaxError(User *u, const ci::string &subcommand)
{
syntax_error(s_BotServ, u, "INFO", BOT_INFO_SYNTAX);
syntax_error(Config.s_BotServ, u, "INFO", BOT_INFO_SYNTAX);
}
};
@@ -257,10 +253,12 @@ class BSInfo : public Module
this->SetVersion("$Id$");
this->SetType(CORE);
this->AddCommand(BOTSERV, new CommandBSInfo());
ModuleManager::Attach(I_OnBotServHelp, this);
}
void BotServHelp(User *u)
void OnBotServHelp(User *u)
{
notice_lang(s_BotServ, u, BOT_HELP_CMD_INFO);
notice_lang(Config.s_BotServ, u, BOT_HELP_CMD_INFO);
}
};
+103 -121
View File
@@ -1,6 +1,6 @@
/* BotServ core functions
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -15,16 +15,14 @@
#include "module.h"
int do_kickcmd(User * u);
class CommandBSKick : public Command
{
public:
CommandBSKick() : Command("KICK", 3, 4)
CommandBSKick() : Command("KICK", 3, 6)
{
}
CommandReturn Execute(User *u, std::vector<ci::string> &params)
CommandReturn Execute(User *u, const std::vector<ci::string> &params)
{
const char *chan = params[0].c_str();
ci::string option = params[1];
@@ -34,88 +32,81 @@ class CommandBSKick : public Command
ChannelInfo *ci = cs_findchan(chan);
if (readonly)
notice_lang(s_BotServ, u, BOT_KICK_DISABLED);
notice_lang(Config.s_BotServ, u, BOT_KICK_DISABLED);
else if (!chan || option.empty() || value.empty())
syntax_error(s_BotServ, u, "KICK", BOT_KICK_SYNTAX);
syntax_error(Config.s_BotServ, u, "KICK", BOT_KICK_SYNTAX);
else if (value != "ON" && value != "OFF")
syntax_error(s_BotServ, u, "KICK", BOT_KICK_SYNTAX);
else if (!check_access(u, ci, CA_SET) && !u->nc->HasPriv("botserv/administration"))
notice_lang(s_BotServ, u, ACCESS_DENIED);
syntax_error(Config.s_BotServ, u, "KICK", BOT_KICK_SYNTAX);
else if (!check_access(u, ci, CA_SET) && !u->Account()->HasPriv("botserv/administration"))
notice_lang(Config.s_BotServ, u, ACCESS_DENIED);
else if (!ci->bi)
notice_help(s_BotServ, u, BOT_NOT_ASSIGNED);
notice_help(Config.s_BotServ, u, BOT_NOT_ASSIGNED);
else {
if (option == "BADWORDS") {
if (value == "ON") {
if (ttb) {
errno = 0;
ci->ttb[TTB_BADWORDS] =
strtol(ttb, NULL, 10);
ci->ttb[TTB_BADWORDS] = strtol(ttb, NULL, 10);
/* Only error if errno returns ERANGE or EINVAL or we are less then 0 - TSL */
if (errno == ERANGE || errno == EINVAL
|| ci->ttb[TTB_BADWORDS] < 0) {
if (errno == ERANGE || errno == EINVAL || ci->ttb[TTB_BADWORDS] < 0)
{
/* leaving the debug behind since we might want to know what these are */
if (debug) {
alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_BADWORDS]);
}
Alog(LOG_DEBUG) << "errno is " << errno << " ERANGE " << ERANGE << " EINVAL " << EINVAL << " ttb " << ci->ttb[TTB_BADWORDS];
/* reset the value back to 0 - TSL */
ci->ttb[TTB_BADWORDS] = 0;
notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
notice_lang(Config.s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
return MOD_CONT;
}
} else {
ci->ttb[TTB_BADWORDS] = 0;
}
ci->botflags |= BS_KICK_BADWORDS;
ci->botflags.SetFlag(BS_KICK_BADWORDS);
if (ci->ttb[TTB_BADWORDS])
notice_lang(s_BotServ, u, BOT_KICK_BADWORDS_ON_BAN,
notice_lang(Config.s_BotServ, u, BOT_KICK_BADWORDS_ON_BAN,
ci->ttb[TTB_BADWORDS]);
else
notice_lang(s_BotServ, u, BOT_KICK_BADWORDS_ON);
notice_lang(Config.s_BotServ, u, BOT_KICK_BADWORDS_ON);
} else {
ci->botflags &= ~BS_KICK_BADWORDS;
notice_lang(s_BotServ, u, BOT_KICK_BADWORDS_OFF);
ci->botflags.UnsetFlag(BS_KICK_BADWORDS);
notice_lang(Config.s_BotServ, u, BOT_KICK_BADWORDS_OFF);
}
} else if (option == "BOLDS") {
if (value == "ON") {
if (ttb) {
errno = 0;
ci->ttb[TTB_BOLDS] = strtol(ttb, NULL, 10);
if (errno == ERANGE || errno == EINVAL
|| ci->ttb[TTB_BOLDS] < 0) {
if (debug) {
alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_BOLDS]);
}
if (errno == ERANGE || errno == EINVAL || ci->ttb[TTB_BOLDS] < 0)
{
Alog(LOG_DEBUG) << "errno is " << errno << " ERANGE " << ERANGE << " EINVAL " << EINVAL << " ttb " << ci->ttb[TTB_BOLDS];
ci->ttb[TTB_BOLDS] = 0;
notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
notice_lang(Config.s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
return MOD_CONT;
}
} else
ci->ttb[TTB_BOLDS] = 0;
ci->botflags |= BS_KICK_BOLDS;
ci->botflags.SetFlag(BS_KICK_BOLDS);
if (ci->ttb[TTB_BOLDS])
notice_lang(s_BotServ, u, BOT_KICK_BOLDS_ON_BAN,
notice_lang(Config.s_BotServ, u, BOT_KICK_BOLDS_ON_BAN,
ci->ttb[TTB_BOLDS]);
else
notice_lang(s_BotServ, u, BOT_KICK_BOLDS_ON);
notice_lang(Config.s_BotServ, u, BOT_KICK_BOLDS_ON);
} else {
ci->botflags &= ~BS_KICK_BOLDS;
notice_lang(s_BotServ, u, BOT_KICK_BOLDS_OFF);
ci->botflags.UnsetFlag(BS_KICK_BOLDS);
notice_lang(Config.s_BotServ, u, BOT_KICK_BOLDS_OFF);
}
} else if (option == "CAPS") {
if (value == "ON") {
char *min = strtok(NULL, " ");
char *percent = strtok(NULL, " ");
const char *min = params.size() > 4 ? params[4].c_str() : NULL;
const char *percent = params.size() > 5 ? params[5].c_str() : NULL;
if (ttb) {
errno = 0;
ci->ttb[TTB_CAPS] = strtol(ttb, NULL, 10);
if (errno == ERANGE || errno == EINVAL
|| ci->ttb[TTB_CAPS] < 0) {
if (debug) {
alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_CAPS]);
}
if (errno == ERANGE || errno == EINVAL || ci->ttb[TTB_CAPS] < 0)
{
Alog(LOG_DEBUG) << "errno is " << errno << " ERANGE " << ERANGE << " EINVAL " << EINVAL << " ttb " << ci->ttb[TTB_CAPS];
ci->ttb[TTB_CAPS] = 0;
notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
notice_lang(Config.s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
return MOD_CONT;
}
} else
@@ -135,59 +126,54 @@ class CommandBSKick : public Command
if (ci->capspercent < 1 || ci->capspercent > 100)
ci->capspercent = 25;
ci->botflags |= BS_KICK_CAPS;
ci->botflags.SetFlag(BS_KICK_CAPS);
if (ci->ttb[TTB_CAPS])
notice_lang(s_BotServ, u, BOT_KICK_CAPS_ON_BAN,
notice_lang(Config.s_BotServ, u, BOT_KICK_CAPS_ON_BAN,
ci->capsmin, ci->capspercent,
ci->ttb[TTB_CAPS]);
else
notice_lang(s_BotServ, u, BOT_KICK_CAPS_ON,
notice_lang(Config.s_BotServ, u, BOT_KICK_CAPS_ON,
ci->capsmin, ci->capspercent);
} else {
ci->botflags &= ~BS_KICK_CAPS;
notice_lang(s_BotServ, u, BOT_KICK_CAPS_OFF);
ci->botflags.UnsetFlag(BS_KICK_CAPS);
notice_lang(Config.s_BotServ, u, BOT_KICK_CAPS_OFF);
}
} else if (option == "COLORS") {
if (value == "ON") {
if (ttb) {
errno = 0;
ci->ttb[TTB_COLORS] = strtol(ttb, NULL, 10);
if (errno == ERANGE || errno == EINVAL
|| ci->ttb[TTB_COLORS] < 0) {
if (debug) {
alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_COLORS]);
}
if (errno == ERANGE || errno == EINVAL || ci->ttb[TTB_COLORS] < 0)
{
Alog(LOG_DEBUG) << "errno is " << errno << " ERANGE " << ERANGE << " EINVAL " << EINVAL << " ttb " << ci->ttb[TTB_COLORS];
ci->ttb[TTB_COLORS] = 0;
notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
notice_lang(Config.s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
return MOD_CONT;
}
} else
ci->ttb[TTB_COLORS] = 0;
ci->botflags |= BS_KICK_COLORS;
ci->botflags.SetFlag(BS_KICK_COLORS);
if (ci->ttb[TTB_COLORS])
notice_lang(s_BotServ, u, BOT_KICK_COLORS_ON_BAN,
notice_lang(Config.s_BotServ, u, BOT_KICK_COLORS_ON_BAN,
ci->ttb[TTB_COLORS]);
else
notice_lang(s_BotServ, u, BOT_KICK_COLORS_ON);
notice_lang(Config.s_BotServ, u, BOT_KICK_COLORS_ON);
} else {
ci->botflags &= ~BS_KICK_COLORS;
notice_lang(s_BotServ, u, BOT_KICK_COLORS_OFF);
ci->botflags.UnsetFlag(BS_KICK_COLORS);
notice_lang(Config.s_BotServ, u, BOT_KICK_COLORS_OFF);
}
} else if (option == "FLOOD") {
if (value == "ON") {
char *lines = strtok(NULL, " ");
char *secs = strtok(NULL, " ");
const char *lines = params.size() > 4 ? params[4].c_str() : NULL;
const char *secs = params.size() > 5 ? params[5].c_str() : NULL;
if (ttb) {
errno = 0;
ci->ttb[TTB_FLOOD] = strtol(ttb, NULL, 10);
if (errno == ERANGE || errno == EINVAL
|| ci->ttb[TTB_FLOOD] < 0) {
if (debug) {
alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_FLOOD]);
}
if (errno == ERANGE || errno == EINVAL || ci->ttb[TTB_FLOOD] < 0) {
Alog(LOG_DEBUG) << "errno is " << errno << " ERANGE " << ERANGE << " EINVAL " << EINVAL << " ttb " << ci->ttb[TTB_FLOOD];
ci->ttb[TTB_FLOOD] = 0;
notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
notice_lang(Config.s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
return MOD_CONT;
}
} else
@@ -204,35 +190,33 @@ class CommandBSKick : public Command
ci->floodsecs = 10;
else
ci->floodsecs = atol(secs);
if (ci->floodsecs < 1 || ci->floodsecs > BSKeepData)
if (ci->floodsecs < 1 || ci->floodsecs > Config.BSKeepData)
ci->floodsecs = 10;
ci->botflags |= BS_KICK_FLOOD;
ci->botflags.SetFlag(BS_KICK_FLOOD);
if (ci->ttb[TTB_FLOOD])
notice_lang(s_BotServ, u, BOT_KICK_FLOOD_ON_BAN,
notice_lang(Config.s_BotServ, u, BOT_KICK_FLOOD_ON_BAN,
ci->floodlines, ci->floodsecs,
ci->ttb[TTB_FLOOD]);
else
notice_lang(s_BotServ, u, BOT_KICK_FLOOD_ON,
notice_lang(Config.s_BotServ, u, BOT_KICK_FLOOD_ON,
ci->floodlines, ci->floodsecs);
} else {
ci->botflags &= ~BS_KICK_FLOOD;
notice_lang(s_BotServ, u, BOT_KICK_FLOOD_OFF);
ci->botflags.UnsetFlag(BS_KICK_FLOOD);
notice_lang(Config.s_BotServ, u, BOT_KICK_FLOOD_OFF);
}
} else if (option == "REPEAT") {
if (value == "ON") {
char *times = strtok(NULL, " ");
const char *times = params.size() > 4 ? params[4].c_str() : NULL;
if (ttb) {
errno = 0;
ci->ttb[TTB_REPEAT] = strtol(ttb, NULL, 10);
if (errno == ERANGE || errno == EINVAL
|| ci->ttb[TTB_REPEAT] < 0) {
if (debug) {
alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_REPEAT]);
}
if (errno == ERANGE || errno == EINVAL || ci->ttb[TTB_REPEAT] < 0)
{
Alog(LOG_DEBUG) << "errno is " << errno << " ERANGE " << ERANGE << " EINVAL " << EINVAL << " ttb " << ci->ttb[TTB_REPEAT];
ci->ttb[TTB_REPEAT] = 0;
notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
notice_lang(Config.s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
return MOD_CONT;
}
} else
@@ -245,16 +229,16 @@ class CommandBSKick : public Command
if (ci->repeattimes < 2)
ci->repeattimes = 3;
ci->botflags |= BS_KICK_REPEAT;
ci->botflags.SetFlag(BS_KICK_REPEAT);
if (ci->ttb[TTB_REPEAT])
notice_lang(s_BotServ, u, BOT_KICK_REPEAT_ON_BAN,
notice_lang(Config.s_BotServ, u, BOT_KICK_REPEAT_ON_BAN,
ci->repeattimes, ci->ttb[TTB_REPEAT]);
else
notice_lang(s_BotServ, u, BOT_KICK_REPEAT_ON,
notice_lang(Config.s_BotServ, u, BOT_KICK_REPEAT_ON,
ci->repeattimes);
} else {
ci->botflags &= ~BS_KICK_REPEAT;
notice_lang(s_BotServ, u, BOT_KICK_REPEAT_OFF);
ci->botflags.UnsetFlag(BS_KICK_REPEAT);
notice_lang(Config.s_BotServ, u, BOT_KICK_REPEAT_OFF);
}
} else if (option == "REVERSES") {
if (value == "ON") {
@@ -262,26 +246,24 @@ class CommandBSKick : public Command
errno = 0;
ci->ttb[TTB_REVERSES] =
strtol(ttb, NULL, 10);
if (errno == ERANGE || errno == EINVAL
|| ci->ttb[TTB_REVERSES] < 0) {
if (debug) {
alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_REVERSES]);
}
if (errno == ERANGE || errno == EINVAL || ci->ttb[TTB_REVERSES] < 0)
{
Alog(LOG_DEBUG) << "errno is " << errno << " ERANGE " << ERANGE << " EINVAL " << EINVAL << " ttb " << ci->ttb[TTB_REVERSES];
ci->ttb[TTB_REVERSES] = 0;
notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
notice_lang(Config.s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
return MOD_CONT;
}
} else
ci->ttb[TTB_REVERSES] = 0;
ci->botflags |= BS_KICK_REVERSES;
ci->botflags.SetFlag(BS_KICK_REVERSES);
if (ci->ttb[TTB_REVERSES])
notice_lang(s_BotServ, u, BOT_KICK_REVERSES_ON_BAN,
notice_lang(Config.s_BotServ, u, BOT_KICK_REVERSES_ON_BAN,
ci->ttb[TTB_REVERSES]);
else
notice_lang(s_BotServ, u, BOT_KICK_REVERSES_ON);
notice_lang(Config.s_BotServ, u, BOT_KICK_REVERSES_ON);
} else {
ci->botflags &= ~BS_KICK_REVERSES;
notice_lang(s_BotServ, u, BOT_KICK_REVERSES_OFF);
ci->botflags.UnsetFlag(BS_KICK_REVERSES);
notice_lang(Config.s_BotServ, u, BOT_KICK_REVERSES_OFF);
}
} else if (option == "UNDERLINES") {
if (value == "ON") {
@@ -289,29 +271,27 @@ class CommandBSKick : public Command
errno = 0;
ci->ttb[TTB_UNDERLINES] =
strtol(ttb, NULL, 10);
if (errno == ERANGE || errno == EINVAL
|| ci->ttb[TTB_UNDERLINES] < 0) {
if (debug) {
alog("debug: errno is %d ERANGE %d EINVAL %d ttb %d", errno, ERANGE, EINVAL, ci->ttb[TTB_UNDERLINES]);
}
if (errno == ERANGE || errno == EINVAL || ci->ttb[TTB_UNDERLINES] < 0)
{
Alog(LOG_DEBUG) << "errno is " << errno << " ERANGE " << ERANGE << " EINVAL " << EINVAL << " ttb " << ci->ttb[TTB_UNDERLINES];
ci->ttb[TTB_UNDERLINES] = 0;
notice_lang(s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
notice_lang(Config.s_BotServ, u, BOT_KICK_BAD_TTB, ttb);
return MOD_CONT;
}
} else
ci->ttb[TTB_UNDERLINES] = 0;
ci->botflags |= BS_KICK_UNDERLINES;
ci->botflags.SetFlag(BS_KICK_UNDERLINES);
if (ci->ttb[TTB_UNDERLINES])
notice_lang(s_BotServ, u, BOT_KICK_UNDERLINES_ON_BAN,
notice_lang(Config.s_BotServ, u, BOT_KICK_UNDERLINES_ON_BAN,
ci->ttb[TTB_UNDERLINES]);
else
notice_lang(s_BotServ, u, BOT_KICK_UNDERLINES_ON);
notice_lang(Config.s_BotServ, u, BOT_KICK_UNDERLINES_ON);
} else {
ci->botflags &= ~BS_KICK_UNDERLINES;
notice_lang(s_BotServ, u, BOT_KICK_UNDERLINES_OFF);
ci->botflags.UnsetFlag(BS_KICK_UNDERLINES);
notice_lang(Config.s_BotServ, u, BOT_KICK_UNDERLINES_OFF);
}
} else
notice_help(s_BotServ, u, BOT_KICK_UNKNOWN, option.c_str());
notice_help(Config.s_BotServ, u, BOT_KICK_UNKNOWN, option.c_str());
}
return MOD_CONT;
}
@@ -319,32 +299,32 @@ class CommandBSKick : public Command
bool OnHelp(User *u, const ci::string &subcommand)
{
if (subcommand.empty())
notice_help(s_BotServ, u, BOT_HELP_KICK);
notice_help(Config.s_BotServ, u, BOT_HELP_KICK);
else if (subcommand == "BADWORDS")
notice_help(s_BotServ, u, BOT_HELP_KICK_BADWORDS);
notice_help(Config.s_BotServ, u, BOT_HELP_KICK_BADWORDS);
else if (subcommand == "BOLDS")
notice_help(s_BotServ, u, BOT_HELP_KICK_BOLDS);
notice_help(Config.s_BotServ, u, BOT_HELP_KICK_BOLDS);
else if (subcommand == "CAPS")
notice_help(s_BotServ, u, BOT_HELP_KICK_CAPS);
notice_help(Config.s_BotServ, u, BOT_HELP_KICK_CAPS);
else if (subcommand == "COLORS")
notice_help(s_BotServ, u, BOT_HELP_KICK_COLORS);
notice_help(Config.s_BotServ, u, BOT_HELP_KICK_COLORS);
else if (subcommand == "FLOOD")
notice_help(s_BotServ, u, BOT_HELP_KICK_FLOOD);
notice_help(Config.s_BotServ, u, BOT_HELP_KICK_FLOOD);
else if (subcommand == "REPEAT")
notice_help(s_BotServ, u, BOT_HELP_KICK_REPEAT);
notice_help(Config.s_BotServ, u, BOT_HELP_KICK_REPEAT);
else if (subcommand == "REVERSES")
notice_help(s_BotServ, u, BOT_HELP_KICK_REVERSES);
notice_help(Config.s_BotServ, u, BOT_HELP_KICK_REVERSES);
else if (subcommand == "UNDERLINES")
notice_help(s_BotServ, u, BOT_HELP_KICK_UNDERLINES);
notice_help(Config.s_BotServ, u, BOT_HELP_KICK_UNDERLINES);
else
return false;
return true;
}
void OnSyntaxError(User *u)
void OnSyntaxError(User *u, const ci::string &subcommand)
{
syntax_error(s_BotServ, u, "KICK", BOT_KICK_SYNTAX);
syntax_error(Config.s_BotServ, u, "KICK", BOT_KICK_SYNTAX);
}
};
@@ -357,10 +337,12 @@ class BSKick : public Module
this->SetVersion("$Id$");
this->SetType(CORE);
this->AddCommand(BOTSERV, new CommandBSKick());
ModuleManager::Attach(I_OnBotServHelp, this);
}
void BotServHelp(User *u)
void OnBotServHelp(User *u)
{
notice_lang(s_BotServ, u, BOT_HELP_CMD_KICK);
notice_lang(Config.s_BotServ, u, BOT_HELP_CMD_KICK);
}
};
+17 -15
View File
@@ -1,6 +1,6 @@
/* BotServ core functions
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -22,7 +22,7 @@ class CommandBSSay : public Command
{
}
CommandReturn Execute(User *u, std::vector<ci::string> &params)
CommandReturn Execute(User *u, const std::vector<ci::string> &params)
{
ChannelInfo *ci;
@@ -33,44 +33,44 @@ class CommandBSSay : public Command
if (!check_access(u, ci, CA_SAY))
{
notice_lang(s_BotServ, u, ACCESS_DENIED);
notice_lang(Config.s_BotServ, u, ACCESS_DENIED);
return MOD_CONT;
}
if (!ci->bi)
{
notice_help(s_BotServ, u, BOT_NOT_ASSIGNED);
notice_help(Config.s_BotServ, u, BOT_NOT_ASSIGNED);
return MOD_CONT;
}
if (!ci->c || ci->c->usercount < BSMinUsers)
if (!ci->c || ci->c->users.size() < Config.BSMinUsers)
{
notice_lang(s_BotServ, u, BOT_NOT_ON_CHANNEL, ci->name);
notice_lang(Config.s_BotServ, u, BOT_NOT_ON_CHANNEL, ci->name.c_str());
return MOD_CONT;
}
if (text[0] == '\001')
{
this->OnSyntaxError(u);
this->OnSyntaxError(u, "");
return MOD_CONT;
}
ircdproto->SendPrivmsg(ci->bi, ci->name, "%s", text);
ircdproto->SendPrivmsg(ci->bi, ci->name.c_str(), "%s", text);
ci->bi->lastmsg = time(NULL);
if (LogBot && LogChannel && logchan && !debug && findchan(LogChannel))
ircdproto->SendPrivmsg(ci->bi, LogChannel, "SAY %s %s %s", u->nick, ci->name, text);
if (Config.LogBot && Config.LogChannel && LogChan && !debug && findchan(Config.LogChannel))
ircdproto->SendPrivmsg(ci->bi, Config.LogChannel, "SAY %s %s %s", u->nick.c_str(), ci->name.c_str(), text);
return MOD_CONT;
}
bool OnHelp(User *u, const ci::string &subcommand)
{
notice_help(s_BotServ, u, BOT_HELP_SAY);
notice_help(Config.s_BotServ, u, BOT_HELP_SAY);
return true;
}
void OnSyntaxError(User *u)
void OnSyntaxError(User *u, const ci::string &subcommand)
{
syntax_error(s_BotServ, u, "SAY", BOT_SAY_SYNTAX);
syntax_error(Config.s_BotServ, u, "SAY", BOT_SAY_SYNTAX);
}
};
@@ -83,10 +83,12 @@ class BSSay : public Module
this->SetVersion("$Id$");
this->SetType(CORE);
this->AddCommand(BOTSERV, new CommandBSSay());
ModuleManager::Attach(I_OnBotServHelp, this);
}
void BotServHelp(User *u)
void OnBotServHelp(User *u)
{
notice_lang(s_BotServ, u, BOT_HELP_CMD_SAY);
notice_lang(Config.s_BotServ, u, BOT_HELP_CMD_SAY);
}
};
+65 -63
View File
@@ -1,6 +1,6 @@
/* BotServ core functions
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -23,7 +23,7 @@ class CommandBSSet : public Command
this->SetFlag(CFLAG_STRIP_CHANNEL);
}
CommandReturn Execute(User *u, std::vector<ci::string> &params)
CommandReturn Execute(User *u, const std::vector<ci::string> &params)
{
const char *chan = params[0].c_str();
ci::string option = params[1];
@@ -32,114 +32,114 @@ class CommandBSSet : public Command
if (readonly)
{
notice_lang(s_BotServ, u, BOT_SET_DISABLED);
notice_lang(Config.s_BotServ, u, BOT_SET_DISABLED);
return MOD_CONT;
}
if (u->nc->HasCommand("botserv/set/private") && option == "PRIVATE")
if (u->Account()->HasCommand("botserv/set/private") && option == "PRIVATE")
{
BotInfo *bi;
if (!(bi = findbot(chan)))
{
notice_lang(s_BotServ, u, BOT_DOES_NOT_EXIST, chan);
notice_lang(Config.s_BotServ, u, BOT_DOES_NOT_EXIST, chan);
return MOD_CONT;
}
if (value == "ON")
{
bi->flags |= BI_PRIVATE;
notice_lang(s_BotServ, u, BOT_SET_PRIVATE_ON, bi->nick);
bi->SetFlag(BI_PRIVATE);
notice_lang(Config.s_BotServ, u, BOT_SET_PRIVATE_ON, bi->nick.c_str());
}
else if (value == "OFF")
{
bi->flags &= ~BI_PRIVATE;
notice_lang(s_BotServ, u, BOT_SET_PRIVATE_OFF, bi->nick);
bi->UnsetFlag(BI_PRIVATE);
notice_lang(Config.s_BotServ, u, BOT_SET_PRIVATE_OFF, bi->nick.c_str());
}
else
{
syntax_error(s_BotServ, u, "SET PRIVATE", BOT_SET_PRIVATE_SYNTAX);
syntax_error(Config.s_BotServ, u, "SET PRIVATE", BOT_SET_PRIVATE_SYNTAX);
}
return MOD_CONT;
} else if (!(ci = cs_findchan(chan)))
notice_lang(s_BotServ, u, CHAN_X_NOT_REGISTERED, chan);
else if (!u->nc->HasPriv("botserv/administration") && !check_access(u, ci, CA_SET))
notice_lang(s_BotServ, u, ACCESS_DENIED);
notice_lang(Config.s_BotServ, u, CHAN_X_NOT_REGISTERED, chan);
else if (!u->Account()->HasPriv("botserv/administration") && !check_access(u, ci, CA_SET))
notice_lang(Config.s_BotServ, u, ACCESS_DENIED);
else {
if (option == "DONTKICKOPS") {
if (value == "ON") {
ci->botflags |= BS_DONTKICKOPS;
notice_lang(s_BotServ, u, BOT_SET_DONTKICKOPS_ON,
ci->name);
ci->botflags.SetFlag(BS_DONTKICKOPS);
notice_lang(Config.s_BotServ, u, BOT_SET_DONTKICKOPS_ON,
ci->name.c_str());
} else if (value == "OFF") {
ci->botflags &= ~BS_DONTKICKOPS;
notice_lang(s_BotServ, u, BOT_SET_DONTKICKOPS_OFF,
ci->name);
ci->botflags.UnsetFlag(BS_DONTKICKOPS);
notice_lang(Config.s_BotServ, u, BOT_SET_DONTKICKOPS_OFF,
ci->name.c_str());
} else {
syntax_error(s_BotServ, u, "SET DONTKICKOPS",
syntax_error(Config.s_BotServ, u, "SET DONTKICKOPS",
BOT_SET_DONTKICKOPS_SYNTAX);
}
} else if (option == "DONTKICKVOICES") {
if (value == "ON") {
ci->botflags |= BS_DONTKICKVOICES;
notice_lang(s_BotServ, u, BOT_SET_DONTKICKVOICES_ON,
ci->name);
ci->botflags.SetFlag(BS_DONTKICKVOICES);
notice_lang(Config.s_BotServ, u, BOT_SET_DONTKICKVOICES_ON,
ci->name.c_str());
} else if (value == "OFF") {
ci->botflags &= ~BS_DONTKICKVOICES;
notice_lang(s_BotServ, u, BOT_SET_DONTKICKVOICES_OFF,
ci->name);
ci->botflags.UnsetFlag(BS_DONTKICKVOICES);
notice_lang(Config.s_BotServ, u, BOT_SET_DONTKICKVOICES_OFF,
ci->name.c_str());
} else {
syntax_error(s_BotServ, u, "SET DONTKICKVOICES",
syntax_error(Config.s_BotServ, u, "SET DONTKICKVOICES",
BOT_SET_DONTKICKVOICES_SYNTAX);
}
} else if (option == "FANTASY") {
if (value == "ON") {
ci->botflags |= BS_FANTASY;
notice_lang(s_BotServ, u, BOT_SET_FANTASY_ON, ci->name);
ci->botflags.SetFlag(BS_FANTASY);
notice_lang(Config.s_BotServ, u, BOT_SET_FANTASY_ON, ci->name.c_str());
} else if (value == "OFF") {
ci->botflags &= ~BS_FANTASY;
notice_lang(s_BotServ, u, BOT_SET_FANTASY_OFF, ci->name);
ci->botflags.UnsetFlag(BS_FANTASY);
notice_lang(Config.s_BotServ, u, BOT_SET_FANTASY_OFF, ci->name.c_str());
} else {
syntax_error(s_BotServ, u, "SET FANTASY",
syntax_error(Config.s_BotServ, u, "SET FANTASY",
BOT_SET_FANTASY_SYNTAX);
}
} else if (option == "GREET") {
if (value == "ON") {
ci->botflags |= BS_GREET;
notice_lang(s_BotServ, u, BOT_SET_GREET_ON, ci->name);
ci->botflags.SetFlag(BS_GREET);
notice_lang(Config.s_BotServ, u, BOT_SET_GREET_ON, ci->name.c_str());
} else if (value == "OFF") {
ci->botflags &= ~BS_GREET;
notice_lang(s_BotServ, u, BOT_SET_GREET_OFF, ci->name);
ci->botflags.UnsetFlag(BS_GREET);
notice_lang(Config.s_BotServ, u, BOT_SET_GREET_OFF, ci->name.c_str());
} else {
syntax_error(s_BotServ, u, "SET GREET",
syntax_error(Config.s_BotServ, u, "SET GREET",
BOT_SET_GREET_SYNTAX);
}
} else if (u->nc->HasCommand("botserv/set/nobot") && option == "NOBOT") {
} else if (u->Account()->HasCommand("botserv/set/nobot") && option == "NOBOT") {
if (value == "ON") {
ci->botflags |= BS_NOBOT;
ci->botflags.SetFlag(BS_NOBOT);
if (ci->bi)
ci->bi->UnAssign(u, ci);
notice_lang(s_BotServ, u, BOT_SET_NOBOT_ON, ci->name);
notice_lang(Config.s_BotServ, u, BOT_SET_NOBOT_ON, ci->name.c_str());
} else if (value == "OFF") {
ci->botflags &= ~BS_NOBOT;
notice_lang(s_BotServ, u, BOT_SET_NOBOT_OFF, ci->name);
ci->botflags.UnsetFlag(BS_NOBOT);
notice_lang(Config.s_BotServ, u, BOT_SET_NOBOT_OFF, ci->name.c_str());
} else {
syntax_error(s_BotServ, u, "SET NOBOT",
syntax_error(Config.s_BotServ, u, "SET NOBOT",
BOT_SET_NOBOT_SYNTAX);
}
} else if (option == "SYMBIOSIS") {
if (value == "ON") {
ci->botflags |= BS_SYMBIOSIS;
notice_lang(s_BotServ, u, BOT_SET_SYMBIOSIS_ON, ci->name);
ci->botflags.SetFlag(BS_SYMBIOSIS);
notice_lang(Config.s_BotServ, u, BOT_SET_SYMBIOSIS_ON, ci->name.c_str());
} else if (value == "OFF") {
ci->botflags &= ~BS_SYMBIOSIS;
notice_lang(s_BotServ, u, BOT_SET_SYMBIOSIS_OFF, ci->name);
ci->botflags.UnsetFlag(BS_SYMBIOSIS);
notice_lang(Config.s_BotServ, u, BOT_SET_SYMBIOSIS_OFF, ci->name.c_str());
} else {
syntax_error(s_BotServ, u, "SET SYMBIOSIS",
syntax_error(Config.s_BotServ, u, "SET SYMBIOSIS",
BOT_SET_SYMBIOSIS_SYNTAX);
}
} else {
notice_help(s_BotServ, u, BOT_SET_UNKNOWN, option.c_str());
notice_help(Config.s_BotServ, u, BOT_SET_UNKNOWN, option.c_str());
}
}
return MOD_CONT;
@@ -149,33 +149,33 @@ class CommandBSSet : public Command
{
if (subcommand.empty())
{
notice_help(s_BotServ, u, BOT_HELP_SET);
if (u->nc && u->nc->IsServicesOper())
notice_help(s_BotServ, u, BOT_SERVADMIN_HELP_SET);
notice_help(Config.s_BotServ, u, BOT_HELP_SET);
if (u->Account() && u->Account()->IsServicesOper())
notice_help(Config.s_BotServ, u, BOT_SERVADMIN_HELP_SET);
}
else if (subcommand == "DONTKICKOPS")
notice_help(s_BotServ, u, BOT_HELP_SET_DONTKICKOPS);
notice_help(Config.s_BotServ, u, BOT_HELP_SET_DONTKICKOPS);
else if (subcommand == "DONTKICKVOICES")
notice_help(s_BotServ, u, BOT_HELP_SET_DONTKICKVOICES);
notice_help(Config.s_BotServ, u, BOT_HELP_SET_DONTKICKVOICES);
else if (subcommand == "FANTASY")
notice_help(s_BotServ, u, BOT_HELP_SET_FANTASY);
notice_help(Config.s_BotServ, u, BOT_HELP_SET_FANTASY);
else if (subcommand == "GREET")
notice_help(s_BotServ, u, BOT_HELP_SET_GREET);
notice_help(Config.s_BotServ, u, BOT_HELP_SET_GREET);
else if (subcommand == "SYMBIOSIS")
notice_lang(s_BotServ, u, BOT_HELP_SET_SYMBIOSIS, s_ChanServ);
notice_lang(Config.s_BotServ, u, BOT_HELP_SET_SYMBIOSIS, Config.s_ChanServ);
else if (subcommand == "NOBOT")
notice_lang(s_BotServ, u, BOT_SERVADMIN_HELP_SET_NOBOT);
notice_lang(Config.s_BotServ, u, BOT_SERVADMIN_HELP_SET_NOBOT);
else if (subcommand == "PRIVATE")
notice_lang(s_BotServ, u, BOT_SERVADMIN_HELP_SET_PRIVATE);
notice_lang(Config.s_BotServ, u, BOT_SERVADMIN_HELP_SET_PRIVATE);
else
return false;
return true;
}
void OnSyntaxError(User *u)
void OnSyntaxError(User *u, const ci::string &subcommand)
{
syntax_error(s_BotServ, u, "SET", BOT_SET_SYNTAX);
syntax_error(Config.s_BotServ, u, "SET", BOT_SET_SYNTAX);
}
};
class BSSet : public Module
@@ -187,10 +187,12 @@ class BSSet : public Module
this->SetVersion("$Id$");
this->SetType(CORE);
this->AddCommand(BOTSERV, new CommandBSSet());
ModuleManager::Attach(I_OnBotServHelp, this);
}
void BotServHelp(User *u)
void OnBotServHelp(User *u)
{
notice_lang(s_BotServ, u, BOT_HELP_CMD_SET);
notice_lang(Config.s_BotServ, u, BOT_HELP_CMD_SET);
}
};
+19 -15
View File
@@ -1,6 +1,6 @@
/* BotServ core functions
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -15,8 +15,6 @@
#include "module.h"
int do_unassign(User * u);
class CommandBSUnassign : public Command
{
public:
@@ -24,33 +22,37 @@ class CommandBSUnassign : public Command
{
}
CommandReturn Execute(User *u, std::vector<ci::string> &params)
CommandReturn Execute(User *u, const std::vector<ci::string> &params)
{
const char *chan = params[0].c_str();
ChannelInfo *ci = cs_findchan(chan);
ChannelMode *cm = ModeManager::FindChannelModeByName(CMODE_PERM);
if (readonly)
notice_lang(s_BotServ, u, BOT_ASSIGN_READONLY);
else if (!u->nc->HasPriv("botserv/administration") && !check_access(u, ci, CA_ASSIGN))
notice_lang(s_BotServ, u, ACCESS_DENIED);
notice_lang(Config.s_BotServ, u, BOT_ASSIGN_READONLY);
else if (!u->Account()->HasPriv("botserv/administration") && !check_access(u, ci, CA_ASSIGN))
notice_lang(Config.s_BotServ, u, ACCESS_DENIED);
else if (!ci->bi)
notice_help(s_BotServ, u, BOT_NOT_ASSIGNED);
else {
notice_help(Config.s_BotServ, u, BOT_NOT_ASSIGNED);
else if (ci->HasFlag(CI_PERSIST) && !cm)
notice_help(Config.s_BotServ, u, BOT_UNASSIGN_PERSISTANT_CHAN);
else
{
ci->bi->UnAssign(u, ci);
notice_lang(s_BotServ, u, BOT_UNASSIGN_UNASSIGNED, ci->name);
notice_lang(Config.s_BotServ, u, BOT_UNASSIGN_UNASSIGNED, ci->name.c_str());
}
return MOD_CONT;
}
bool OnHelp(User *u, const ci::string &subcommand)
{
notice_help(s_BotServ, u, BOT_HELP_UNASSIGN);
notice_help(Config.s_BotServ, u, BOT_HELP_UNASSIGN);
return true;
}
void OnSyntaxError(User *u)
void OnSyntaxError(User *u, const ci::string &subcommand)
{
syntax_error(s_BotServ, u, "UNASSIGN", BOT_UNASSIGN_SYNTAX);
syntax_error(Config.s_BotServ, u, "UNASSIGN", BOT_UNASSIGN_SYNTAX);
}
};
@@ -63,10 +65,12 @@ class BSUnassign : public Module
this->SetVersion("$Id$");
this->SetType(CORE);
this->AddCommand(BOTSERV, new CommandBSUnassign);
ModuleManager::Attach(I_OnBotServHelp, this);
}
void BotServHelp(User *u)
void OnBotServHelp(User *u)
{
notice_lang(s_BotServ, u, BOT_HELP_CMD_UNASSIGN);
notice_lang(Config.s_BotServ, u, BOT_HELP_CMD_UNASSIGN);
}
};

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