mirror of
https://github.com/anope/anope.git
synced 2026-06-27 14:46:38 +02:00
Compare commits
61 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b382c27bb0 | |||
| 9f9e83c65c | |||
| 4ab0bd3a8e | |||
| 68b1abc6f7 | |||
| 86ff426642 | |||
| 1aa0905241 | |||
| 255d76ccc1 | |||
| d0746ae8d6 | |||
| dbc19768b1 | |||
| 8d64d91742 | |||
| ed4c5e1457 | |||
| fdcb7e56ae | |||
| 0d1a0e8db9 | |||
| b9fb2f8e63 | |||
| 1a1665ba56 | |||
| 634e9af9cb | |||
| b6ab031fc1 | |||
| ebe0ce6610 | |||
| b2e52553a7 | |||
| 032c30dd5d | |||
| fb0f7649b4 | |||
| 92fb9844ec | |||
| d8b92f1c70 | |||
| b354d4d1ab | |||
| 81d8858e56 | |||
| d7206c8f38 | |||
| 7c30d223fb | |||
| 0db220812f | |||
| a2f5edf977 | |||
| 2631eb2e48 | |||
| 49970524c8 | |||
| 11a144ad61 | |||
| 1bdadde68a | |||
| 39d34f7174 | |||
| c7979d98fa | |||
| 58c2f0c409 | |||
| 851c0a990e | |||
| c68933e547 | |||
| e9f84a0db9 | |||
| 87141253a1 | |||
| 0c686e7168 | |||
| b5091a373e | |||
| 8e898c2e3e | |||
| 821995bf60 | |||
| 673f6cb2f9 | |||
| 852ed51ed7 | |||
| 5144b63a3a | |||
| 0f63790b4c | |||
| 4f6232e628 | |||
| 4e303566dc | |||
| 4f7144e513 | |||
| c7a44bfd8e | |||
| 839fb4e5f0 | |||
| a2a6708f1a | |||
| faf1e3710e | |||
| e54cffd9b7 | |||
| 75098739e6 | |||
| 12d6e2ef3f | |||
| 00ec71f81d | |||
| 479fc1ce3f | |||
| 667419a460 |
+4
-6
@@ -220,15 +220,11 @@ find_package(Gettext)
|
||||
option(USE_RUN_CC_PL "Use run-cc.pl for building" OFF)
|
||||
|
||||
# Use the following directories as includes
|
||||
# Note that it is important the binary include directory comes before the
|
||||
# source include directory so the precompiled headers work correctly.
|
||||
include_directories(${Anope_BINARY_DIR}/include ${Anope_SOURCE_DIR}/include ${Anope_BINARY_DIR}/language)
|
||||
include_directories(${Anope_SOURCE_DIR}/include ${Anope_BINARY_DIR}/include ${Anope_BINARY_DIR}/lang)
|
||||
|
||||
# If using Windows, always add the _WIN32 define
|
||||
if(WIN32)
|
||||
add_definitions(-D_WIN32)
|
||||
# And include the windows specific folder for our anope_windows.h
|
||||
include_directories(${Anope_SOURCE_DIR}/src/win32)
|
||||
endif(WIN32)
|
||||
|
||||
# If using Visual Studio, set the C++ flags accordingly
|
||||
@@ -331,9 +327,11 @@ endif(CMAKE_BUILD_TYPE STREQUAL "DEBUG" OR CMAKE_BUILD_TYPE STREQUAL "RELWITHDEB
|
||||
# Check for the existance of the following include files
|
||||
check_include_file(sys/types.h HAVE_SYS_TYPES_H)
|
||||
check_include_file(strings.h HAVE_STRINGS_H)
|
||||
check_include_file(sys/select.h HAVE_SYS_SELECT_H)
|
||||
check_include_file(sys/eventfd.h HAVE_SYS_EVENTFD_H)
|
||||
|
||||
# Check for the existance of the following functions
|
||||
check_function_exists(gettimeofday HAVE_GETTIMEOFDAY)
|
||||
check_function_exists(setgrent HAVE_SETGRENT)
|
||||
check_function_exists(strcasecmp HAVE_STRCASECMP)
|
||||
check_function_exists(stricmp HAVE_STRICMP)
|
||||
@@ -451,7 +449,7 @@ endif(${Anope_SOURCE_DIR} STREQUAL ${Anope_BINARY_DIR})
|
||||
# Go into the following directories and run their CMakeLists.txt as well
|
||||
add_subdirectory(data)
|
||||
add_subdirectory(docs)
|
||||
add_subdirectory(language)
|
||||
add_subdirectory(lang)
|
||||
add_subdirectory(src)
|
||||
add_subdirectory(modules)
|
||||
add_subdirectory(include)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# Configuration script for Services.
|
||||
#
|
||||
# Anope (c) 2003-2011 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
|
||||
@@ -153,17 +153,6 @@ done
|
||||
|
||||
###########################################################################
|
||||
|
||||
which cmake > /dev/null
|
||||
if [ $? -ne 0 ] ; then
|
||||
clear
|
||||
echo "Anope requires CMake 2.4 or newer to be configured, which can"
|
||||
echo "be downloaded at http://www.cmake.org/. If you have installed"
|
||||
echo "CMake already, ensure it is in your PATH environment variable."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
###########################################################################
|
||||
|
||||
if [ ! "$NO_INTRO" ] ; then
|
||||
case `uname -s` in
|
||||
MINGW*)
|
||||
|
||||
@@ -20,7 +20,7 @@ endif(NOT WIN32)
|
||||
|
||||
# If we found everything we need set variables correctly for lang/CMakeLists.txt to use
|
||||
if(GETTEXT_FOUND)
|
||||
include_directories("${GETTEXT_INCLUDE}")
|
||||
set(LIBINTL_INCLUDE "${GETTEXT_INCLUDE}/libintl.h")
|
||||
set(GETTEXT_MSGFMT_EXECUTABLE ${GETTEXT_MSGFMT})
|
||||
|
||||
if(WIN32)
|
||||
|
||||
+211
-539
File diff suppressed because it is too large
Load Diff
+45
-37
@@ -3,7 +3,7 @@
|
||||
-- http://www.phpmyadmin.net
|
||||
--
|
||||
-- Host: localhost
|
||||
-- Generation Time: Apr 28, 2011 at 07:08 PM
|
||||
-- Generation Time: Oct 31, 2010 at 03:02 AM
|
||||
-- Server version: 5.1.50
|
||||
-- PHP Version: 5.3.3-pl1-gentoo
|
||||
|
||||
@@ -108,6 +108,10 @@ CREATE TABLE IF NOT EXISTS `anope_cs_info` (
|
||||
`forbidby` text NOT NULL,
|
||||
`forbidreason` text NOT NULL,
|
||||
`bantype` smallint(6) NOT NULL DEFAULT '0',
|
||||
`mlock_on` text NOT NULL,
|
||||
`mlock_off` text NOT NULL,
|
||||
`mlock_params` text NOT NULL,
|
||||
`entry_message` text NOT NULL,
|
||||
`memomax` smallint(5) unsigned NOT NULL DEFAULT '0',
|
||||
`botnick` varchar(255) NOT NULL DEFAULT '',
|
||||
`botflags` text NOT NULL,
|
||||
@@ -147,23 +151,6 @@ CREATE TABLE IF NOT EXISTS `anope_cs_levels` (
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `anope_cs_mlock`
|
||||
--
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `anope_cs_mlock` (
|
||||
`channel` varchar(255) NOT NULL,
|
||||
`mode` varchar(127) NOT NULL,
|
||||
`status` int(11) NOT NULL,
|
||||
`setter` varchar(255) NOT NULL,
|
||||
`created` int(11) NOT NULL,
|
||||
`param` varchar(255) NOT NULL,
|
||||
UNIQUE KEY `entry` (`channel`,`mode`,`status`,`setter`,`param`),
|
||||
KEY `FK_anope_cs_mlock` (`channel`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `anope_cs_ttb`
|
||||
--
|
||||
@@ -283,7 +270,7 @@ CREATE TABLE IF NOT EXISTS `anope_ns_core` (
|
||||
`email` text NOT NULL,
|
||||
`greet` text NOT NULL,
|
||||
`flags` text NOT NULL,
|
||||
`language` varchar(5) 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`)
|
||||
@@ -303,6 +290,21 @@ CREATE TABLE IF NOT EXISTS `anope_ns_core_metadata` (
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `anope_ns_request`
|
||||
--
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `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=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `anope_os_akills`
|
||||
--
|
||||
@@ -369,77 +371,83 @@ CREATE TABLE IF NOT EXISTS `anope_os_xlines` (
|
||||
-- Constraints for table `anope_bs_badwords`
|
||||
--
|
||||
ALTER TABLE `anope_bs_badwords`
|
||||
ADD CONSTRAINT `FK_anope_bs_badwords_channel` FOREIGN KEY (`channel`) REFERENCES `anope_cs_info` (`name`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
ADD CONSTRAINT `FK_anope_bs_badwords_channel` FOREIGN KEY (`channel`) REFERENCES `anope_cs_info` (`name`) ON DELETE CASCADE
|
||||
ON UPDATE CASCADE;
|
||||
|
||||
--
|
||||
-- Constraints for table `anope_bs_info_metadata`
|
||||
--
|
||||
ALTER TABLE `anope_bs_info_metadata`
|
||||
ADD CONSTRAINT `FK_anope_bs_info_metadata_botname` FOREIGN KEY (`botname`) REFERENCES `anope_bs_core` (`nick`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
ADD CONSTRAINT `FK_anope_bs_info_metadata_botname` FOREIGN KEY (`botname`) REFERENCES `anope_bs_core` (`nick`) ON DELETE
|
||||
CASCADE ON UPDATE CASCADE;
|
||||
|
||||
--
|
||||
-- Constraints for table `anope_cs_access`
|
||||
--
|
||||
ALTER TABLE `anope_cs_access`
|
||||
ADD CONSTRAINT `FK_anope_cs_access_channel` FOREIGN KEY (`channel`) REFERENCES `anope_cs_info` (`name`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
ADD CONSTRAINT `FK_anope_cs_access_channel` FOREIGN KEY (`channel`) REFERENCES `anope_cs_info` (`name`) ON DELETE CASCADE ON
|
||||
UPDATE CASCADE;
|
||||
|
||||
--
|
||||
-- Constraints for table `anope_cs_akick`
|
||||
--
|
||||
ALTER TABLE `anope_cs_akick`
|
||||
ADD CONSTRAINT `FK_anope_cs_akick_channel` FOREIGN KEY (`channel`) REFERENCES `anope_cs_info` (`name`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
ADD CONSTRAINT `FK_anope_cs_akick_channel` FOREIGN KEY (`channel`) REFERENCES `anope_cs_info` (`name`) ON DELETE CASCADE ON
|
||||
UPDATE CASCADE;
|
||||
|
||||
--
|
||||
-- Constraints for table `anope_cs_info_metadata`
|
||||
--
|
||||
ALTER TABLE `anope_cs_info_metadata`
|
||||
ADD CONSTRAINT `FK_anope_cs_info_metadata_channel` FOREIGN KEY (`channel`) REFERENCES `anope_cs_info` (`name`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
ADD CONSTRAINT `FK_anope_cs_info_metadata_channel` FOREIGN KEY (`channel`) REFERENCES `anope_cs_info` (`name`) ON DELETE
|
||||
CASCADE ON UPDATE CASCADE;
|
||||
|
||||
--
|
||||
-- Constraints for table `anope_cs_levels`
|
||||
--
|
||||
ALTER TABLE `anope_cs_levels`
|
||||
ADD CONSTRAINT `FK_anope_cs_levels_channel` FOREIGN KEY (`channel`) REFERENCES `anope_cs_info` (`name`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
--
|
||||
-- Constraints for table `anope_cs_mlock`
|
||||
--
|
||||
ALTER TABLE `anope_cs_mlock`
|
||||
ADD CONSTRAINT `FK_anope_cs_mlock_channel` FOREIGN KEY (`channel`) REFERENCES `anope_cs_info` (`name`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
ADD CONSTRAINT `FK_anope_cs_levels_channel` FOREIGN KEY (`channel`) REFERENCES `anope_cs_info` (`name`) ON DELETE CASCADE ON
|
||||
UPDATE CASCADE;
|
||||
|
||||
--
|
||||
-- Constraints for table `anope_cs_ttb`
|
||||
--
|
||||
ALTER TABLE `anope_cs_ttb`
|
||||
ADD CONSTRAINT `FK_anope_cs_ttb_channel` FOREIGN KEY (`channel`) REFERENCES `anope_cs_info` (`name`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
ADD CONSTRAINT `FK_anope_cs_ttb_channel` FOREIGN KEY (`channel`) REFERENCES `anope_cs_info` (`name`) ON DELETE CASCADE ON
|
||||
UPDATE CASCADE;
|
||||
|
||||
--
|
||||
-- Constraints for table `anope_hs_core`
|
||||
--
|
||||
ALTER TABLE `anope_hs_core`
|
||||
ADD CONSTRAINT `FK_anope_hs_core_nick` FOREIGN KEY (`nick`) REFERENCES `anope_ns_alias` (`nick`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
ADD CONSTRAINT `FK_anope_hs_core_nick` FOREIGN KEY (`nick`) REFERENCES `anope_ns_alias` (`nick`) ON DELETE CASCADE ON UPDATE
|
||||
CASCADE;
|
||||
|
||||
--
|
||||
-- Constraints for table `anope_ms_info`
|
||||
--
|
||||
ALTER TABLE `anope_ms_info`
|
||||
ADD CONSTRAINT `FK_anope_ms_info_receiver` FOREIGN KEY (`receiver`) REFERENCES `anope_ns_alias` (`nick`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
ADD CONSTRAINT `FK_anope_ms_info_receiver` FOREIGN KEY (`receiver`) REFERENCES `anope_ns_alias` (`nick`) ON DELETE CASCADE ON
|
||||
UPDATE CASCADE;
|
||||
|
||||
--
|
||||
-- Constraints for table `anope_ns_access`
|
||||
--
|
||||
ALTER TABLE `anope_ns_access`
|
||||
ADD CONSTRAINT `FK_anope_ns_access_display` FOREIGN KEY (`display`) REFERENCES `anope_ns_core` (`display`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
ADD CONSTRAINT `FK_anope_ns_access_display` FOREIGN KEY (`display`) REFERENCES `anope_ns_core` (`display`) ON DELETE CASCADE
|
||||
ON UPDATE CASCADE;
|
||||
|
||||
--
|
||||
-- Constraints for table `anope_ns_alias`
|
||||
--
|
||||
ALTER TABLE `anope_ns_alias`
|
||||
ADD CONSTRAINT `FK_anope_ns_alias_display` FOREIGN KEY (`display`) REFERENCES `anope_ns_core` (`display`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
ADD CONSTRAINT `FK_anope_ns_alias_display` FOREIGN KEY (`display`) REFERENCES `anope_ns_core` (`display`) ON DELETE CASCADE
|
||||
ON UPDATE CASCADE;
|
||||
|
||||
--
|
||||
-- Constraints for table `anope_ns_alias_metadata`
|
||||
--
|
||||
ALTER TABLE `anope_ns_alias_metadata`
|
||||
ADD CONSTRAINT `FK_anope_ns_alias_metadata_nick` FOREIGN KEY (`nick`) REFERENCES `anope_ns_alias` (`nick`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
ADD CONSTRAINT `FK_anope_ns_alias_metadata_nick` FOREIGN KEY (`nick`) REFERENCES `anope_ns_alias` (`nick`) ON DELETE CASCADE
|
||||
ON UPDATE CASCADE;
|
||||
|
||||
|
||||
+1
-281
@@ -1,283 +1,3 @@
|
||||
Revision 3f3657a - Sat, 27 Aug 2011 21:11:01 -0400 - Fixed windows build
|
||||
Revision 49b81a5 - Sat, 27 Aug 2011 21:05:48 -0400 - Update changes.conf, bump version to 1.9.4-p1-git
|
||||
Revision 99e4eae - Sat, 27 Aug 2011 15:35:09 -0400 - Fixed /ns logout on other users
|
||||
Revision 232af7f - Sun, 21 Aug 2011 14:56:53 -0400 - Moved the ERROR log message out of debug (cherry picked from commit a68d17c17e904881b580d29290ae37bb2627b51b)
|
||||
Revision 9c8a789 - Thu, 18 Aug 2011 00:46:17 -0400 - Fixed ns alist min level
|
||||
Revision 389341b - Sat, 13 Aug 2011 21:59:12 -0400 - Fixed number list position when requesting custom lists from akill and sqline
|
||||
Revision 949f869 - Wed, 10 Aug 2011 17:36:24 -0400 - Use case insensitive matching for server names
|
||||
Revision 8d551f2 - Tue, 9 Aug 2011 18:37:33 -0400 - Fixed crash in /ns set
|
||||
Revision 962002b - Tue, 9 Aug 2011 18:36:23 -0400 - Fixed JOIN on plexus & fixed UMODE_NETADMIN
|
||||
Revision 1ce0199 - Tue, 9 Aug 2011 17:50:15 -0400 - Fixed build
|
||||
Revision 5d6f4cf - Tue, 9 Aug 2011 17:39:25 -0400 - Added a few sanity checks which never really should happen to db-convert (cherry picked from commit b7542fd6f29b5fec45314dbf65f599c5bd2b3650)
|
||||
Revision 2b03500 - Tue, 9 Aug 2011 17:38:32 -0400 - Updated TODO
|
||||
Revision 4d6b824 - Tue, 9 Aug 2011 17:37:12 -0400 - Made /os stats work like the help describes
|
||||
Revision 389dde0 - Tue, 9 Aug 2011 17:29:38 -0400 - Bug #1291 - fixed parsing JOIN on ratbox (cherry picked from commit e2b47e001fe0f4560bbf050964d9e60d20cb4e2b)
|
||||
Revision 59fad58 - Tue, 9 Aug 2011 17:29:14 -0400 - Fixed nickserv help output
|
||||
Revision d5d2a31 - Tue, 9 Aug 2011 17:27:39 -0400 - Fixed appending diff@* to some access list entries that are valid hosts
|
||||
Revision 7f4eb85 - Tue, 9 Aug 2011 17:25:40 -0400 - Bug #1285 - Fixed setting -P on channels with only a service bot in it (cherry picked from commit b5ec57a3f9fdc9e7c7321392082dec0d475c623c)
|
||||
Revision e9ce53f - Tue, 9 Aug 2011 17:25:22 -0400 - Use getrlimit instead of ulimit, fixes freebsd build of poll()
|
||||
Revision 7c06078 - Tue, 9 Aug 2011 17:24:02 -0400 - Do not send news when a server is syncing
|
||||
Revision 205eb1c - Tue, 9 Aug 2011 17:22:50 -0400 - Fixed chanserv/access/modify permission on non-xop channels (cherry picked from commit ffd5c045e4018849c3ff7084955d50c0f852d00b)
|
||||
Revision 11fdf16 - Tue, 9 Aug 2011 17:22:31 -0400 - Send account data once an account is confirmed (cherry picked from commit cc3c2b6999fa58a1be791b1ace1f4e7dc83cf9ec)
|
||||
Revision 0c47383 - Tue, 9 Aug 2011 17:21:58 -0400 - Fixed mail delay time (cherry picked from commit 3e9888092a7859dbf2c7b1cc6baffa192a007132)
|
||||
Revision fa9f6a3 - Tue, 9 Aug 2011 17:21:28 -0400 - Fixed sending account data for unconfirmed accounts
|
||||
Revision 6574bca - Tue, 9 Aug 2011 17:14:23 -0400 - Fixed destructing bots with commands and fixed quitting services enforcers
|
||||
Revision ae72c25 - Tue, 9 Aug 2011 17:12:56 -0400 - Bugs #1271 and #1272
|
||||
Revision 469a04e - Mon, 16 May 2011 02:58:06 -0400 - Anope 1.9.4 Release
|
||||
Revision 605b5d5 - Mon, 16 May 2011 02:57:28 -0400 - Removed ngircd as we've decided not to support it at this time
|
||||
Revision f7aa46f - Mon, 16 May 2011 02:47:23 -0400 - Note m_async_commands is experimental
|
||||
Revision b445029 - Sun, 15 May 2011 21:02:06 -0400 - Fixed Windows build
|
||||
Revision 57327a5 - Sun, 15 May 2011 19:54:35 -0400 - Fixed akill log message when there is no expiry time
|
||||
Revision 4a3c642 - Sun, 1 May 2011 18:41:54 -0400 - Fixed sometimes not removing nick masks from the access list when the group is dropped
|
||||
Revision 036b3c9 - Fri, 29 Apr 2011 18:03:04 -0400 - Temporary fix for /os restart with m_async_commands loaded, is fixed properly in 1.9.5
|
||||
Revision 7da3334 - Thu, 28 Apr 2011 19:13:44 -0400 - Added a unique key for the anope_cs_mlock table
|
||||
Revision cbdb9f5 - Wed, 27 Apr 2011 11:15:02 -0400 - Fixed bug #1265
|
||||
Revision 5d3d6bc - Wed, 27 Apr 2011 09:26:51 -0400 - Fixed a crash if an expiring channel had the founder also on the access list
|
||||
Revision 0cdc628 - Mon, 25 Apr 2011 15:58:46 -0400 - Fixed crash when certain nicks expire
|
||||
Revision 4a733c9 - Mon, 25 Apr 2011 04:17:21 -0400 - Don't attempt to connect to the uplink if given invalid hostnames
|
||||
Revision 03d2378 - Mon, 25 Apr 2011 07:08:57 +0200 - resolve hosts when connecting with ssl
|
||||
Revision 5e027c1 - Sat, 23 Apr 2011 02:36:42 -0400 - Two small SQL fixes
|
||||
Revision 3aeaef5 - Wed, 20 Apr 2011 15:39:44 -0400 - A few more small fixes
|
||||
Revision 4d26070 - Wed, 20 Apr 2011 09:35:09 -0400 - This actually isn't necessary
|
||||
Revision f601b04 - Tue, 19 Apr 2011 23:42:16 -0400 - Fixed logging messages with an empty category to everything
|
||||
Revision ca16948 - Mon, 18 Apr 2011 21:07:54 -0400 - Allow unidentified users to still get access by non nickcore access entries
|
||||
Revision 713c2eb - Mon, 18 Apr 2011 17:09:30 -0400 - Fixed /ns help register reply
|
||||
Revision 660e0c7 - Sun, 17 Apr 2011 19:00:01 -0400 - Fixed /ns help access
|
||||
Revision 0862de6 - Sat, 16 Apr 2011 16:06:52 -0400 - Fixed the mlock depreciated message
|
||||
Revision 2cd511d - Sat, 16 Apr 2011 04:35:14 -0400 - Fixed botserv kicker logic
|
||||
Revision efe5fed - Fri, 15 Apr 2011 19:51:34 -0400 - Fixed caps kicker
|
||||
Revision c8c6845 - Sun, 10 Apr 2011 22:05:48 -0400 - Fixed /ns list unconfirmed
|
||||
Revision bd62c48 - Sat, 9 Apr 2011 20:52:25 -0400 - Fixed disabling channel levels
|
||||
Revision 9535541 - Wed, 6 Apr 2011 10:13:03 -0400 - Fixed setting +r on nick ownership, lost somewhere in revision fbae33
|
||||
Revision 711a570 - Wed, 6 Apr 2011 09:41:39 -0400 - Run OnCheckAuthentication with the account name if there is one
|
||||
Revision cb9ccc4 - Tue, 5 Apr 2011 19:11:23 -0400 - Fixed bug #1261
|
||||
Revision c681bdd - Sun, 3 Apr 2011 18:23:17 -0400 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
|
||||
Revision 74844c0 - Sun, 3 Apr 2011 18:19:29 -0400 - Use dynamic_reference to check for users being killed from commands
|
||||
Revision 9052070 - Sun, 3 Apr 2011 18:07:58 -0400 - Made LDAP support recover, release, resetpass, etc.
|
||||
Revision 73a944f - Sun, 3 Apr 2011 08:54:40 +0200 - fixed some duplicate messages and updated the german langfile (10% done)
|
||||
Revision d1328d8 - Fri, 1 Apr 2011 01:57:12 -0400 - Fixed a typo making ns_register crash
|
||||
Revision faa8556 - Thu, 31 Mar 2011 14:41:30 -0400 - Removed some unneeded/unused code from m_ldap
|
||||
Revision 8dec0c1 - Wed, 30 Mar 2011 23:59:57 -0400 - Fixed bug #1258, more Windows stuff, and more language strings
|
||||
Revision 8098ed8 - Wed, 30 Mar 2011 00:55:45 -0400 - Fixed windows build more, including ldap
|
||||
Revision 77c98f0 - Tue, 29 Mar 2011 14:02:35 -0400 - Regenerated language files.
|
||||
Revision 8dbdfa9 - Tue, 29 Mar 2011 13:43:40 -0400 - Fixed windows build
|
||||
Revision 685e99b - Tue, 29 Mar 2011 13:43:22 -0400 - Fixed some left over useprivmsg problems and fixed some compiler warnings.
|
||||
Revision b14b7bd - Sat, 26 Mar 2011 08:44:21 +0100 - burned all %R and %S in the .po files
|
||||
Revision 365769d - Sat, 26 Mar 2011 08:20:05 +0100 - replaced all %R with %s in the language strings
|
||||
Revision 01b901e - Fri, 25 Mar 2011 20:56:42 +0100 - ignore additional parameters for /chanserv info
|
||||
Revision 26de1d9 - Fri, 25 Mar 2011 17:42:13 +0100 - 1. when dropping nicks, dont add the dropped nick as successor for a channel 2. set -r on dropped channels
|
||||
Revision 451fb82 - Tue, 22 Mar 2011 23:58:53 -0400 - Bug #1203
|
||||
Revision c02d51f - Tue, 22 Mar 2011 18:16:05 -0400 - Bug #1256
|
||||
Revision b95027b - Wed, 16 Mar 2011 01:16:15 -0400 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
|
||||
Revision 5b476a2 - Wed, 16 Mar 2011 06:14:28 +0100 - added a description for the HELP command
|
||||
Revision bceeda8 - Wed, 16 Mar 2011 05:36:12 +0100 - fixed displaying the RESEND command in /nickserv help output
|
||||
Revision ee9636b - Tue, 15 Mar 2011 19:23:08 -0400 - Fixed some logic fail in User::IsRecognized
|
||||
Revision ddfb16d - Mon, 14 Mar 2011 20:16:38 -0400 - Fixed compile
|
||||
Revision 2555d0d - Mon, 14 Mar 2011 21:39:53 +0000 - Removed include/patricia.h due to oversight in attribution. This breaks compile, please do not use until this is fixed later.
|
||||
Revision ed73d76 - Mon, 14 Mar 2011 13:52:26 -0400 - Rewrote some of the opertype system, added os_login
|
||||
Revision 4fe49af - Sun, 13 Mar 2011 22:59:50 -0400 - Fixed a crash in m_ldap is unloaded
|
||||
Revision beabbb3 - Sun, 13 Mar 2011 19:15:53 -0400 - When a server quits use its quit reason for all of its links
|
||||
Revision b4888c2 - Sun, 13 Mar 2011 17:20:44 -0400 - Fixed a typo in os_stats
|
||||
Revision b75fa1c - Sun, 13 Mar 2011 14:03:02 -0400 - Fixed a crash in /cs help register
|
||||
Revision 3fbf39b - Sun, 13 Mar 2011 03:42:30 -0400 - Added some useful Anope::Version functions to prevent some files from unnecessarily rebuilding on every make
|
||||
Revision 15a8332 - Sun, 13 Mar 2011 03:38:42 -0400 - Set the locale to the default system locale on startup
|
||||
Revision 5a0d04b - Sun, 13 Mar 2011 07:09:17 +0100 - fixed a typo in os_news, thanks to Dan for reporting it
|
||||
Revision fbae334 - Sat, 12 Mar 2011 09:27:16 +0100 - added ns_cert
|
||||
Revision 95469fd - Sat, 12 Mar 2011 02:40:08 -0500 - Added some access checks to cs_mode and fixed some language strings
|
||||
Revision 9f46972 - Fri, 11 Mar 2011 17:26:27 -0500 - _()ify Command::SetDesc
|
||||
Revision 46a3afa - Fri, 11 Mar 2011 17:09:49 -0500 - Fixed validating users on all server syncs
|
||||
Revision 1b2f3bf - Fri, 11 Mar 2011 15:10:30 -0500 - Fixed some problems with m_alias and fantasy
|
||||
Revision bb3b421 - Fri, 11 Mar 2011 04:27:32 -0500 - Global should send logon news
|
||||
Revision 1ee3d3d - Fri, 11 Mar 2011 00:47:28 -0500 - Added os_config and support for including additional configuration files.
|
||||
Revision 97c2e09 - Thu, 10 Mar 2011 19:20:58 -0500 - Bug #1251 - Fixed logging inspircd logging us logging inspircd. Also moved the Server::Find messages to debug level 2
|
||||
Revision 09a5791 - Wed, 9 Mar 2011 12:29:59 -0500 - ngIRCd protocol: announce Anope with its version
|
||||
Revision 8db5ecd - Wed, 9 Mar 2011 12:28:24 -0500 - Fixed sending CHANINFO on ngIRCd with two parameters if the channel has no modes locked.
|
||||
Revision e9aa04a - Wed, 9 Mar 2011 01:25:49 -0500 - Store mlock in the databases and removed some unused functions from misc.cpp
|
||||
Revision 8eb23e7 - Mon, 7 Mar 2011 19:54:51 -0500 - Added support for extbans
|
||||
Revision 093b3d2 - Sun, 6 Mar 2011 19:36:52 -0500 - Change the mode name code to use Flags names in preparation for extban support
|
||||
Revision 48e6221 - Sat, 5 Mar 2011 22:00:27 -0500 - Expire unconfirmed nicks, forgot to add this earlier..
|
||||
Revision ef0c095 - Sat, 5 Mar 2011 18:18:51 -0500 - Made m_ldap_oper understand deopering
|
||||
Revision a0355df - Sat, 5 Mar 2011 17:43:51 -0500 - Fixed /bs badword del to show what word was deleted
|
||||
Revision 6fe2d8a - Sat, 5 Mar 2011 17:23:22 -0500 - Removed nickrequests, instead have unconfirmed registrations. Also made ns_resetpass allow remote-id to get past things such as kill immed.
|
||||
Revision 90e5d0f - Fri, 4 Mar 2011 20:47:58 -0500 - Added LDAP support
|
||||
Revision d79e22b - Fri, 4 Mar 2011 12:50:50 -0500 - Updated TODO
|
||||
Revision a9fb6ba - Fri, 4 Mar 2011 02:41:29 -0500 - Just use blocking sql queries if m_asynch_commands isn't loaded - it's not that bad.
|
||||
Revision dd968c0 - Fri, 4 Mar 2011 02:19:20 -0500 - Fixed some logic fail when detecting who should be akicked
|
||||
Revision feb81c5 - Fri, 4 Mar 2011 02:17:51 -0500 - Clarify the module dependency messages generated by cmake are non fatal
|
||||
Revision aecf675 - Sun, 27 Feb 2011 23:32:07 -0500 - Fixed os_sqline del
|
||||
Revision bcaf406 - Sun, 27 Feb 2011 16:47:23 -0500 - Made akills work on IRCds that do not support bans (ngircd)
|
||||
Revision f234a2b - Sat, 26 Feb 2011 17:54:03 -0500 - Replaced the few language strings we use with #defines to prevent accidentally translating them if we shouldnt
|
||||
Revision 28d17a4 - Fri, 25 Feb 2011 21:41:27 -0500 - Fixed session exception limit of 0 to mean unlimited
|
||||
Revision 7cfca37 - Fri, 25 Feb 2011 21:41:18 -0500 - Fixed build on freebsd with precompiled headers
|
||||
Revision c38b639 - Fri, 25 Feb 2011 21:41:08 -0500 - More fixes. Also made db_mysql_live not keep bots updated because thats pointless and made m_asynch_commands respect user language settings.
|
||||
Revision ee38756 - Fri, 25 Feb 2011 21:40:43 -0500 - Fixed a lot of small problems
|
||||
Revision eea7d2e - Tue, 22 Feb 2011 20:44:47 -0500 - Fixed the first half of #1235
|
||||
Revision b15410f - Tue, 22 Feb 2011 20:30:45 -0500 - Store modes in the databases told to us during runtime that we don't have information any about. Allows mlocking things like InspIRCds +w etc. Also fixes part of #1235
|
||||
Revision c83b2b7 - Sun, 20 Feb 2011 01:05:16 -0500 - Much more work on the live SQL. Should work pretty decently now under heavy load.
|
||||
Revision dfbb526 - Sat, 19 Feb 2011 21:17:53 -0500 - Inspircd does not send CAPAB NOQUIT, assume it
|
||||
Revision f49a3e0 - Sat, 19 Feb 2011 19:03:05 -0500 - Fixed aborting because of invalid values given to mode +f on inspircd
|
||||
Revision 109d174 - Fri, 18 Feb 2011 11:49:52 -0500 - Update SQL when a nick is deleted
|
||||
Revision 470f8af - Fri, 18 Feb 2011 11:48:29 -0500 - Fixed some logic fail when determining when a recognized user gets access
|
||||
Revision a1296a3 - Fri, 18 Feb 2011 11:48:20 -0500 - Changed the OnNickDrop event to call before the nick is deleted
|
||||
Revision f38fe24 - Thu, 17 Feb 2011 14:32:51 -0500 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
|
||||
Revision 536ea21 - Thu, 17 Feb 2011 14:31:21 -0500 - Split db_mysql_live into two modules so other modules can make use of the asynchronous command interface
|
||||
Revision ab0422b - Thu, 17 Feb 2011 07:00:03 +0100 - set the vhost before we call ns_ajoin or other modules on identify
|
||||
Revision 18bd33f - Wed, 16 Feb 2011 12:50:23 -0500 - Use precompiled headers when building with gnu g++ to speed up build time
|
||||
Revision d436e4c - Sun, 13 Feb 2011 20:06:01 +0100 - added Anope::printf()
|
||||
Revision 1372dc1 - Sat, 12 Feb 2011 16:17:17 -0500 - Removed the Wallop config options and replaced them with the new log system
|
||||
Revision 9ef7352 - Fri, 11 Feb 2011 18:30:58 -0500 - Merged os_umode into os_mode
|
||||
Revision 2529ff6 - Fri, 11 Feb 2011 03:12:39 -0500 - Made the help command description code more sane
|
||||
Revision 7bdf592 - Wed, 9 Feb 2011 21:54:28 -0500 - Log rawio when in debug mode and fixed expiring session exceptions
|
||||
Revision f463b77 - Wed, 9 Feb 2011 20:09:26 -0500 - Removed a lot of the old capab flags we dont/have never used
|
||||
Revision eec8977 - Wed, 9 Feb 2011 17:41:07 -0500 - Enable quitstorm for ngircd
|
||||
Revision f87c665 - Wed, 9 Feb 2011 13:31:47 -0500 - Foward port ebe0ce6610e1 / b6ab031fc1822
|
||||
Revision 36d3fd1 - Wed, 9 Feb 2011 13:25:28 -0500 - Do not crash if a user is introduced with a nonexistant server
|
||||
Revision d26a19b - Wed, 9 Feb 2011 01:12:43 -0500 - Made ./Config output a userful error message if cmake is not found
|
||||
Revision a55b374 - Sat, 5 Feb 2011 18:35:20 -0500 - Removed the LIBINTL include hack
|
||||
Revision 8355666 - Fri, 4 Feb 2011 21:01:33 -0500 - try/catch-ified all instances of convertTo to keep from aborting when a user gives too large or too small a number
|
||||
Revision faf5f31 - Fri, 4 Feb 2011 19:31:02 -0500 - Merge 032c30dd5dc4
|
||||
Revision a53a797 - Fri, 4 Feb 2011 18:32:04 -0500 - Replaced all of the old %S's in the language strings that were used for service nicks
|
||||
Revision 08583dc - Fri, 4 Feb 2011 15:30:31 -0500 - Moved the language strings which are only used once out of the core and into the modules that use them.
|
||||
Revision c362a1e - Sat, 29 Jan 2011 12:05:34 +0000 - DP in "an user" grammar police mode.
|
||||
Revision 140208e - Sat, 29 Jan 2011 12:00:12 +0000 - Another typo pointed out by the grammar police. ;)
|
||||
Revision 679d3c3 - Sat, 29 Jan 2011 11:58:59 +0000 - Fixing leftover spaces and other rubbish I missed on the first pass.
|
||||
Revision 557ecee - Sat, 29 Jan 2011 11:06:38 +0000 - Updated some docs/ & removed TROUBLESHOOTING as it is redundant.
|
||||
Revision 9704ccc - Sat, 29 Jan 2011 10:44:27 +0000 - QA fixes / refinements for example.conf
|
||||
Revision e626641 - Fri, 28 Jan 2011 23:09:25 -0500 - Added patricia_tree::iterator
|
||||
Revision 3eadc15 - Fri, 28 Jan 2011 13:19:26 -0500 - Fixed setting usermode +k on our clients on InspIRCd 2.0
|
||||
Revision 9910aa3 - Fri, 28 Jan 2011 00:09:34 +0000 - Bug #1237 - only set umode +h on a user joining help chan if they have op access
|
||||
Revision 2a53e5f - Mon, 24 Jan 2011 19:03:15 -0500 - Fixed the order queries are done during sqlsync to make the new foreign keys happy
|
||||
Revision 2e8acfb - Mon, 24 Jan 2011 17:50:34 -0500 - Fixed some SQL queries
|
||||
Revision 48fa096 - Mon, 24 Jan 2011 02:54:09 -0500 - Added %N for network name in dnsbl:reason
|
||||
Revision bf559d7 - Mon, 24 Jan 2011 01:11:10 -0500 - Fixed loading forbidden nicks
|
||||
Revision 3bfc8e9 - Sun, 23 Jan 2011 12:56:21 -0500 - std::stringstream::clear doesn't clear it
|
||||
Revision a162f1d - Fri, 21 Jan 2011 23:01:48 -0500 - Bug #1234 - Fix reading resolv.conf if it has multiple spaces or tabs
|
||||
Revision a86873c - Fri, 21 Jan 2011 16:49:25 +0000 - fixed some minor presentation, grammar mis-use and copyright date in DP's ngircd
|
||||
Revision 05933e9 - Thu, 20 Jan 2011 19:42:27 -0500 - Removed db-upgrade, its no longer needed
|
||||
Revision ab2e34d - Wed, 19 Jan 2011 00:31:18 -0500 - Added options:nomlock
|
||||
Revision e7a8bcc - Tue, 18 Jan 2011 18:47:08 -0500 - Bug #1232 - Fixed db-convert to properly convert mode lock parameters
|
||||
Revision 34c6c66 - Tue, 18 Jan 2011 18:41:16 -0500 - Added amsg kicker settings to /bs info
|
||||
Revision 4a3ee91 - Tue, 18 Jan 2011 19:05:20 +0100 - fixed a bug in the ngircd protocol module
|
||||
Revision 6f0d1af - Mon, 17 Jan 2011 20:41:57 -0500 - Made db_plain buffer database writes which prevents databases from coming corrupted if we crash or if write fails. Also fixed loading all ajoin channels.
|
||||
Revision 01feb5b - Mon, 17 Jan 2011 20:29:33 -0500 - Fixed ns_ajoins list output formatting
|
||||
Revision 8975b52 - Mon, 17 Jan 2011 15:46:53 -0500 - Added ns_ajoin
|
||||
Revision 7acbbbb - Sat, 15 Jan 2011 21:02:14 -0500 - Fixed flag names to match 1.9.3s
|
||||
Revision 4fecafa - Sat, 15 Jan 2011 16:45:48 -0500 - Made db_plain save amsg settings
|
||||
Revision a4ded88 - Sat, 15 Jan 2011 16:29:17 -0500 - Made CA_SET always be accessable, even if db-converter messes up levels
|
||||
Revision 1b6aab0 - Sat, 15 Jan 2011 16:13:31 -0500 - Fixed /ns confirm's log message to show the nick of who was confirmed
|
||||
Revision c669820 - Sat, 15 Jan 2011 16:11:31 -0500 - Added an amsg kicker
|
||||
Revision ecc2fc6 - Fri, 14 Jan 2011 04:50:01 +0000 - Fix CODINGs formatting and a missed typo
|
||||
Revision e490202 - Tue, 11 Jan 2011 22:19:46 -0500 - Bug #1230 - Fixed unknown CTCPs from crashing services
|
||||
Revision fd2412a - Mon, 10 Jan 2011 17:41:09 -0500 - Send new memo replies to the receiver of the memo
|
||||
Revision 07528ea - Sun, 9 Jan 2011 13:38:15 -0500 - Fixed CanAdd() to use safe iteration and make SNLine::Check really work (cherry picked from commit 1bdadde68aed5a93225a5a625484505f1126a8a9)
|
||||
Revision ce8a069 - Sat, 8 Jan 2011 18:55:12 -0500 - Changed db_mysql_live to use a safer mutex system to prevent deadlocks
|
||||
Revision 2ba97ae - Sat, 8 Jan 2011 03:35:04 -0500 - Ignore EINTR error from poll()
|
||||
Revision a674d81 - Sat, 8 Jan 2011 08:38:16 +0100 - updated the README file
|
||||
Revision efb61ed - Sat, 8 Jan 2011 08:21:18 +0100 - enabled modeonid in example.conf
|
||||
Revision 2e7d08c - Sat, 8 Jan 2011 08:18:46 +0100 - fixed a small bug in the ratbox protocol module
|
||||
Revision 47b87e9 - Sat, 8 Jan 2011 08:15:48 +0100 - added support for ngIRCd protocol
|
||||
Revision ddeff72 - Sat, 8 Jan 2011 00:52:46 -0500 - Process flag changes from SQL
|
||||
Revision 43995b4 - Sat, 8 Jan 2011 00:25:30 -0500 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
|
||||
Revision 512d23d - Sat, 8 Jan 2011 00:25:11 -0500 - Made the Flag class able to convert flags to strings and back
|
||||
Revision 0eb9152 - Fri, 7 Jan 2011 23:01:19 +0000 - fix some more copyright and typos (not mine) spotted by chaz :P
|
||||
Revision 4403849 - Fri, 7 Jan 2011 15:57:13 -0500 - Added db_mysql_live which allows Anope to pull data from the four main SQL tables in realtime, which effectively gives us "live" SQL. Changed eventfd pipe engine to not use buffered write. Added TryLock to threading engines. Made blocking SQL queries in our SQL API thread-safe.
|
||||
Revision 9efebe5 - Wed, 5 Jan 2011 18:34:38 +0000 - update copyrights for 2011
|
||||
Revision 7198fa7 - Tue, 4 Jan 2011 07:33:34 +0100 - removed SendSVSPart(), we dont use it
|
||||
Revision 03ba592 - Tue, 4 Jan 2011 07:14:50 +0100 - removed SendSVSMode(), we dont use it
|
||||
Revision 57a06f7 - Fri, 31 Dec 2010 21:20:34 +0000 - fixed a crash bug when a server squits
|
||||
Revision 3019ba6 - Thu, 30 Dec 2010 06:44:18 +0100 - restoring topic for permchans on burst
|
||||
Revision 2784cd1 - Thu, 30 Dec 2010 05:50:55 +0100 - Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9
|
||||
Revision 03cc9eb - Wed, 29 Dec 2010 23:30:28 -0500 - Assign bots to new empty permanent channels on IRCds without permchannel mode not just join
|
||||
Revision 72b8f46 - Wed, 29 Dec 2010 23:12:26 -0500 - Use empty SJOINs when allowed to create empty permanent channels
|
||||
Revision d36e53f - Wed, 29 Dec 2010 20:19:37 -0500 - Added a ConvertException to be thrown when convertTo fails
|
||||
Revision a36f14c - Wed, 29 Dec 2010 19:59:26 -0500 - Automatically quit bots when they are deleted
|
||||
Revision 292e187 - Wed, 29 Dec 2010 22:39:20 +0100 - Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9
|
||||
Revision 16cab97 - Tue, 28 Dec 2010 16:32:18 -0500 - Bug #1225 - Made REGISTER show in /cs help
|
||||
Revision fd7f542 - Tue, 28 Dec 2010 07:00:47 +0100 - Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9
|
||||
Revision 5ead326 - Mon, 27 Dec 2010 15:33:49 -0500 - Fixed build on debian lenny
|
||||
Revision a1c635b - Mon, 27 Dec 2010 01:35:08 -0500 - Load session exceptions on start when using SQL
|
||||
Revision d896bf9 - Mon, 27 Dec 2010 01:00:12 -0500 - Bug #1222 - Fixed crash from reading to read a range of memos
|
||||
Revision 49dd1c3 - Mon, 27 Dec 2010 00:42:38 -0500 - Bug #1220 - Fixed an event in /hs activate and /ms del
|
||||
Revision fce491e - Mon, 27 Dec 2010 00:41:04 -0500 - Made socket engine stop processing once all sockets have been checked
|
||||
Revision 87d0fc8 - Sun, 26 Dec 2010 20:15:54 -0500 - Fixed poll engine to not reorder sockets if we remove the last socket because there is no need
|
||||
Revision f638d10 - Sun, 26 Dec 2010 09:36:45 +0100 - Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9
|
||||
Revision 8af2465 - Sun, 26 Dec 2010 00:31:11 -0500 - Bug #1219 - Correctly restrict people from registering potentential guest names
|
||||
Revision 1b3f256 - Sun, 26 Dec 2010 00:14:49 -0500 - Fixed a potential crash from dropping nicks
|
||||
Revision 036d451 - Sat, 25 Dec 2010 15:27:02 +0000 - updated crontab instructions in INSTALL
|
||||
Revision 80721d1 - Sat, 25 Dec 2010 02:30:39 -0500 - Forward port part of 821995bf604b5c6e18e6c0c93a31e149565160c8
|
||||
Revision aa9e33c - Fri, 24 Dec 2010 19:55:09 -0500 - Bug #1216 - Do not apply SQLines on our own clients
|
||||
Revision 8690017 - Fri, 24 Dec 2010 19:07:47 -0500 - Made clearing SXLines remove the XLine from the IRCd too
|
||||
Revision d5c1d6e - Fri, 24 Dec 2010 16:12:08 -0500 - Do not allow xop del to delete users on another list
|
||||
Revision 35e328b - Fri, 24 Dec 2010 01:23:22 -0500 - Fixed Windows build
|
||||
Revision befb4b3 - Fri, 24 Dec 2010 01:22:07 -0500 - Made the default socket poller use poll() because it is supported on most platforms
|
||||
Revision 4235df2 - Fri, 24 Dec 2010 06:42:55 +0100 - Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9
|
||||
Revision a6c8a6a - Thu, 23 Dec 2010 23:33:02 -0500 - Prevent version.cpp from prepending version.sh's VERSION_EXTRA on every build
|
||||
Revision 1a3ba00 - Thu, 23 Dec 2010 21:56:06 -0500 - Fixed noexpire channels expiring
|
||||
Revision e8a2072 - Thu, 23 Dec 2010 19:18:25 -0500 - Added a missing os_ignore.h
|
||||
Revision 4886b56 - Thu, 23 Dec 2010 19:14:07 -0500 - Fixed a crash in m_alias
|
||||
Revision 15d29ed - Thu, 23 Dec 2010 18:50:27 -0500 - Do not clear want write on a socket if we are unable to completely write its buffer
|
||||
Revision 3009540 - Thu, 23 Dec 2010 18:39:54 -0500 - Rewrote the ignore code. Adds creator and reason to /os ignore list.
|
||||
Revision a0ad3c4 - Thu, 23 Dec 2010 07:15:32 +0100 - Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9
|
||||
Revision 265006b - Thu, 23 Dec 2010 00:03:50 -0500 - Fixed deleting expired SXLines
|
||||
Revision 11b3b8a - Wed, 22 Dec 2010 19:12:04 -0500 - Made SQLine clear work
|
||||
Revision 2783c82 - Wed, 22 Dec 2010 18:28:22 -0500 - Removed match_usermask
|
||||
Revision 184e7b3 - Wed, 22 Dec 2010 07:05:40 +0100 - Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9
|
||||
Revision 18377ac - Tue, 21 Dec 2010 15:57:57 -0500 - Allow hostmasks to be in uplink:host
|
||||
Revision 184e14e - Sun, 19 Dec 2010 08:56:31 +0100 - Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9
|
||||
Revision 21125cf - Sat, 18 Dec 2010 19:53:32 -0500 - Made the version generator code work right when we are on a tag because git describe just gives the tag name and nothing else.
|
||||
Revision 0d20c47 - Sat, 18 Dec 2010 19:41:13 -0500 - Don't send SXLines until after we start bursting with our uplink
|
||||
Revision 7f9a5e0 - Fri, 17 Dec 2010 03:09:51 -0500 - NULL the core *serv pointers when core clients are deleted
|
||||
Revision eb9b12e - Wed, 15 Dec 2010 12:47:35 -0500 - Bug #1211 - Fixed loading and saving anope_os_sxlines
|
||||
Revision 4a4c088 - Wed, 15 Dec 2010 12:18:20 -0500 - Bug #1212 - Fixed some bad logic in /os exception preventing valid exceptions from being added
|
||||
Revision 0247633 - Tue, 14 Dec 2010 08:13:09 +0100 - Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9
|
||||
Revision 49d3c97 - Mon, 13 Dec 2010 16:36:36 -0500 - Bug #1079 - Don't use users real host and IPs when matching against bans and excepts, except when a user is unbanning themselves, in an attempt to prevent people from gaining other users IPs. This removes support for Unreal and Bahamuts SVSMode -b because it will unban users by real host and IP.
|
||||
Revision 97467cb - Mon, 13 Dec 2010 13:26:01 -0500 - Bug #1113 - Document the fantasy character in /bs help
|
||||
Revision 6a43886 - Mon, 13 Dec 2010 07:34:06 +0100 - removed an unused variable
|
||||
Revision 5d56a24 - Mon, 13 Dec 2010 07:26:05 +0100 - changed a few 'if' to 'else if'
|
||||
Revision eb138a0 - Sun, 12 Dec 2010 19:37:04 -0500 - Do not validate users during netburst until after the server is done syncing
|
||||
Revision 2a4d0e3 - Sun, 12 Dec 2010 19:37:04 -0500 - Allow getting users opertype from XMLRPC requests
|
||||
Revision 9f7a2e4 - Sun, 12 Dec 2010 19:37:04 -0500 - Bug #1177 - Readded in support for cs_mode to act on every channel
|
||||
Revision 25e995b - Sun, 12 Dec 2010 19:37:04 -0500 - Fixed a few places in the plexus protocol module where we were sending nick not UID
|
||||
Revision ad5da2a - Sun, 12 Dec 2010 19:37:03 -0500 - Handle not being able to completely flush our write buffer correctly
|
||||
Revision 6ab7cf9 - Sun, 12 Dec 2010 19:37:03 -0500 - fixed a compile error in plexus protocol module
|
||||
Revision 099ead0 - Sun, 12 Dec 2010 19:37:03 -0500 - store the ssl fingerprint in the userstruct
|
||||
Revision f1d04a2 - Sun, 12 Dec 2010 19:37:03 -0500 - Allow command aliases to be redirected to different pseudo clients
|
||||
Revision aed53db - Sun, 12 Dec 2010 19:37:03 -0500 - Cleaned up some things, made the protocol modules use some basic inheritance to cut back on their code duplication. More work can be done in the future to remove even more of it.
|
||||
Revision a507816 - Sun, 12 Dec 2010 19:37:03 -0500 - Fixed looking up users to use case insensitivity
|
||||
Revision c41c828 - Sun, 12 Dec 2010 19:37:03 -0500 - Do not use wildcard matching when looking up hosts on access add/del
|
||||
Revision 5fe41fb - Sun, 12 Dec 2010 19:37:02 -0500 - Document that /cs owner and deowner allow nick args
|
||||
Revision 0ba5664 - Sun, 12 Dec 2010 19:37:02 -0500 - Allowing adding hostmasks to channel access lists
|
||||
Revision 2a4d57a - Sun, 12 Dec 2010 19:37:02 -0500 - Fixed subcommands
|
||||
Revision 71c433c - Sun, 12 Dec 2010 19:37:00 -0500 - The rest of the earlier command changes
|
||||
Revision 2b10cc8 - Sun, 12 Dec 2010 19:36:19 -0500 - Added /bs set msg
|
||||
Revision cb6ef57 - Sun, 12 Dec 2010 19:36:19 -0500 - Send replies from fantasy commands back to the channel, this will be expanded on later
|
||||
Revision 37e02a3 - Sun, 12 Dec 2010 19:36:19 -0500 - Added cs_entrymsg
|
||||
Revision 7d1cfe9 - Sun, 12 Dec 2010 19:36:18 -0500 - Fixed some sed failure
|
||||
Revision 9870ee0 - Sun, 12 Dec 2010 19:36:18 -0500 - Removed some unused code paths in some of the modules
|
||||
Revision 1a28639 - Sun, 12 Dec 2010 19:36:16 -0500 - Added a plexus3 protocol module
|
||||
Revision 697dc89 - Sun, 12 Dec 2010 19:36:01 -0500 - Added a default expiry time for suspended and forbidden nicks and channels
|
||||
Revision 4d342d9 - Sun, 12 Dec 2010 19:35:58 -0500 - Fixed some of the language strings
|
||||
Revision c5eb349 - Sun, 12 Dec 2010 19:35:30 -0500 - Removed the AUTODEOP level, it is unnecessary now because of cs_mode
|
||||
Revision 7790a7f - Sun, 12 Dec 2010 19:35:30 -0500 - Allow the patricia tree to store non-pointers
|
||||
Revision 246f44b - Sun, 12 Dec 2010 19:35:27 -0500 - Added cs_mode, rewrote the old list mode code, and added CIDR support
|
||||
Revision a851121 - Sun, 12 Dec 2010 19:33:59 -0500 - Removed and deprecated /cs set mlock, removed /cs clear, removed /os clearmodes, removed /cs akick (un)stick, added /cs clearusers
|
||||
Revision 5f18cb0 - Sun, 12 Dec 2010 19:33:58 -0500 - Allow users to drop their own nickrequests
|
||||
Revision 872bc3f - Sun, 12 Dec 2010 19:33:58 -0500 - Allow users to remove their own access in channels
|
||||
Revision 1625a5a - Sun, 12 Dec 2010 19:33:58 -0500 - Added /chanserv clone command
|
||||
Revision 2e9a632 - Sun, 12 Dec 2010 19:33:58 -0500 - Allow akill/szline/sqline to accept user names as a mask argument
|
||||
Revision 3c9d4e9 - Sun, 12 Dec 2010 19:33:58 -0500 - Added command aliases
|
||||
Revision c792c7f - Sun, 12 Dec 2010 19:33:58 -0500 - Switched the system for storing users, channels, and sesions to a patricia tree from STL's unordered_map, which was giving horrible performance.
|
||||
Revision e512760 - Sun, 12 Dec 2010 19:33:50 -0500 - Fixed DNS caching and made DNS cache empty results
|
||||
Revision ac41137 - Sun, 12 Dec 2010 19:31:00 -0500 - Added /ms ignore
|
||||
Revision 28aba58 - Sun, 12 Dec 2010 19:30:28 -0500 - Just store lang strings in a char array, no need for the extra overhead of STL strings
|
||||
Revision 4ec661c - Sun, 12 Dec 2010 19:30:14 -0500 - If a channel drops because a nick drops, set the channel founder to the user with the highest access if there is no successor
|
||||
Revision 87bdf73 - Sun, 12 Dec 2010 19:30:14 -0500 - Document XMLRPC calls and added a .php class wrapper for them
|
||||
Revision 21c8e89 - Sun, 12 Dec 2010 19:30:14 -0500 - Do not allow ghosting unidentified users if the recover command exists
|
||||
Revision 8fbe366 - Sun, 12 Dec 2010 19:30:14 -0500 - Added m_xmlrpc and m_xmlrpc main, which allows remote programs to execute remote RPC calls to Anope in realtime and receive responses
|
||||
Revision 5cd4fef - Sun, 12 Dec 2010 19:30:11 -0500 - Bump for 1.9.4-git
|
||||
Revision 82e588a - Sun, 12 Dec 2010 18:42:14 -0500 - Anope 1.9.3 Release
|
||||
Revision 7b7301e - Sun, 12 Dec 2010 18:40:04 -0500 - Made ./Config with a .git directory work ok if we are on a git tag
|
||||
Revision 70d6537 - Sun, 12 Dec 2010 17:58:19 -0500 - Updated version.log
|
||||
Revision af8cf44 - Sun, 12 Dec 2010 17:58:09 -0500 - Made version.cpp ok with an empty VERSION_EXTRA
|
||||
Revision be4ec3c - Sun, 12 Dec 2010 16:54:46 -0500 - Updated docs/WIN32.txt with instructions on how to get the libraries to build with gettext, ssl, and mysql
|
||||
Revision 587e5d9 - Thu, 9 Dec 2010 19:58:41 -0500 - Fixed build on cmake 2.4.x
|
||||
@@ -2967,7 +2687,7 @@ Revision 17d9d5a - Fri, 31 Dec 2004 06:09:37 +0000 - BUILD : 1.7.6 (517) BUGS :
|
||||
Revision 2a8bc51 - Thu, 30 Dec 2004 17:38:35 +0000 - BUILD : 1.7.6 (516) BUGS : 261 NOTES : This should be it finally! The moduleAddData function was using the old head to append/prepend the new moduleData to, but it had to use the new head. Thanks to DrStein for finding the cause! :)
|
||||
Revision 35096db - Thu, 30 Dec 2004 17:12:06 +0000 - BUILD : 1.7.6 (515) BUGS : 261 NOTES : Fixed a few memleaks with moduleData functions returning early, and fixed the list handling with deleting moduleData (thanks DrStein)
|
||||
Revision ae23e2f - Thu, 30 Dec 2004 16:51:04 +0000 - BUILD : 1.7.6 (514) BUGS : 261 NOTES : Modules can no longer call addCommand directly. The mod_name of the command MUST be set if it is a module.
|
||||
Revision ae0f3c48 - Thu, 30 Dec 2004 15:00:22 +0000 - BUILD : 1.7.6 (513) BUGS : NOTES : Added warnings for NULL-args with sstrdup, and NULL modname with module*Data functions. Fixed Catserv to use moduleAddCommand instead of addCommand.
|
||||
Revision ae0f3c4 - Thu, 30 Dec 2004 15:00:22 +0000 - BUILD : 1.7.6 (513) BUGS : NOTES : Added warnings for NULL-args with sstrdup, and NULL modname with module*Data functions. Fixed Catserv to use moduleAddCommand instead of addCommand.
|
||||
Revision 2be6713 - Thu, 30 Dec 2004 14:27:22 +0000 - BUILD : 1.7.6 (512) BUGS : NOTES : Indenting src/modules.c correctly.... it got skipped somehow...
|
||||
Revision 1fe375c - Thu, 30 Dec 2004 14:25:56 +0000 - BUILD : 1.7.6 (511) BUGS : NOTES : Rollback to 507
|
||||
Revision 428c78c - Thu, 30 Dec 2004 05:55:10 +0000 - BUILD : 1.7.6 (510) BUGS : N/A NOTES : Clean up after the last commit
|
||||
|
||||
+18
-37
@@ -1,41 +1,22 @@
|
||||
Anope Version 1.9.4-p1
|
||||
---------------------
|
||||
F Fixed using /ns logout on other users
|
||||
F Fixed number list position when requesting /os akill list and /os sqline list
|
||||
F Fixed server matching to be case insensitive
|
||||
F Fixed a crash in /ns set
|
||||
F Fixed parsing TMODE on ratbox
|
||||
F Fixed parsing JOIN on ratbox and plexus
|
||||
F Fixed nickserv help output
|
||||
F Fixed appending !*@* to some access list entries
|
||||
F Fixed setting -P on channels with only a service bot in it
|
||||
F Fixed freebsd build of poll engine
|
||||
F Fixed the chanserv/access/modify permission to work on non-xop channels
|
||||
F Fixed the mail delay error message to show the correct time
|
||||
F Fixed sending account data for unconfirmed nicks on InspIRCd
|
||||
F Fixed deleting bots sometimes causing crashes/other weird behaviors
|
||||
F Fixed /ms ignore syntax errors
|
||||
|
||||
Anope Version 1.9.4
|
||||
Anope Version 1.9.3-p1
|
||||
--------------------
|
||||
A Automatically set channel founder to the user with the highest access if there is no successor
|
||||
A /chanserv clone command to copy settings from one channel to another.
|
||||
A /chanserv mode command
|
||||
A Ability for users to delete their own access in channels
|
||||
A Added support for Plexus 3
|
||||
A Readded in support for /cs op/deop/etc to op/deop you in all channels
|
||||
A Added LDAP support
|
||||
A Added live SQL support
|
||||
A Added support for learning tracking/storing/locking all modes at runtime
|
||||
A Added m_alias
|
||||
A Added support for XMLRPC queries
|
||||
A Added /botserv set msg
|
||||
A Added /operserv config
|
||||
A Added /ns cert
|
||||
A Added /operserv login
|
||||
F Changed the GHOST command to not allow ghosting unidentified users if the RECOVER command exists
|
||||
F Some failed logic in /operserv exception that prevents proper exceptions from being added
|
||||
F Fixed the anope_os_sxlines MySQL table and code to work after restarting
|
||||
F Fixed bad logic in /os exception preventing valid hosts from being added
|
||||
F Fixed /os sqline clear
|
||||
F Fixed not applying SQLines to our own clients
|
||||
F Fixed crash from deleting nonexistant users on the XOP access lists
|
||||
F Fixed crash when /cs set mlock is given an empty string
|
||||
F Fixed a potential crash from expiring nicks
|
||||
F Fixed build on Debian Lenny
|
||||
F Fixed /bs badword del to show what word was deleted
|
||||
F Fixed using /ns release with a password
|
||||
F Fixed allowing setting a valid TTB with /bs kick repeat
|
||||
F Fixed caps kicker
|
||||
F Fixed many SQL issues
|
||||
F Fixed reading resolv.conf if it has multiple spaces or tabs
|
||||
F Fixed creating permanent channels on burst and setting their topics
|
||||
F Fixed /cs register to show in HELP
|
||||
F Fixed restricting people from registering guest nick names
|
||||
F Fixed a potential crash from dropping nicks
|
||||
|
||||
Anope Version 1.9.3
|
||||
--------------------
|
||||
|
||||
@@ -1,25 +1,3 @@
|
||||
Anope Version 1.9.4
|
||||
-------------------
|
||||
** ADDED CONFIGURATION DIRECTIVES **
|
||||
memoserv:modules added ms_ignore
|
||||
chanserv:modules added cs_clone and cs_mode
|
||||
nickserv:suspendexpire and nickserv:forbidexpire added
|
||||
chanserv:suspendexpire and chanserv:forbidexpire added
|
||||
module added cs_entrymsg
|
||||
nickserv:modules added ns_ajoin, ns_cert
|
||||
options:nomlock added
|
||||
log:target added globops
|
||||
nickserv:confirmemailchanges added
|
||||
operserv:modules added os_config, os_login
|
||||
|
||||
** MODIFIED CONFIGURATION DIRECTIVES **
|
||||
operserv:notifications removed osglobal, osmode, oskick, osakill, ossnline, ossqline, osszline, osnoop, osjupe, getpass, setpass, forbid, drop
|
||||
renamed nickserv:preregexpire to nickserv:unconfirmedexpire
|
||||
|
||||
** DELETED CONFIGURATION DIRECTIVES **
|
||||
opertype:commands removed operserv/umode
|
||||
operserv:modules removed os_umode
|
||||
|
||||
Anope Version 1.9.3
|
||||
------------------
|
||||
** ADDED CONFIGURATION DIRECTIVES **
|
||||
|
||||
+4
-4
@@ -183,16 +183,16 @@ Note: You should also read the README and FAQ files!
|
||||
still running, and restart it if not.
|
||||
|
||||
First rename the example.chk script that is in Anope path (by default,
|
||||
this is ~/services/data) to services.chk and edit it. You'll need to
|
||||
modify the CONFIGURATION part of the file. Then ensure that the file is
|
||||
marked as executable by typing chmod +x services.chk, and try to launch the
|
||||
this is ~/services) to services.chk and edit it. You'll need to modify
|
||||
the CONFIGURATION part of the file. Then ensure that the file is marked
|
||||
as executable by typing chmod +x services.chk, and try to launch the
|
||||
script to see if it works (Anope must not be running when you do this ;))
|
||||
|
||||
When this is done, you'll have to add the crontab entry. Type crontab -e.
|
||||
This will open the default text editor with the crontab file. Enter the
|
||||
following (with correct path):
|
||||
|
||||
*/5 * * * * /home/ircd/services/data/services.chk >/dev/null 2>&1
|
||||
*/5 * * * * /home/ircd/services/services.chk >/dev/null 2>&1
|
||||
|
||||
The */5 at the beginning means "check every 5 minutes". You may replace
|
||||
the 5 with other another number if you want (but less than 60). Consult
|
||||
|
||||
@@ -106,10 +106,18 @@ How To Add IRCd Support
|
||||
|
||||
23) TS6: Does the IRCd support TS6? Use 1 for yes, 0 for no.
|
||||
|
||||
24) Global TLD Prefix: Prefix used to send global messages, should probably
|
||||
24) 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.
|
||||
|
||||
25) Global TLD Prefix: Prefix used to send global messages, should probably
|
||||
be "$"
|
||||
|
||||
25) Max Modes: The max number of mode changes we can send in one line
|
||||
26) Max Modes: The max number of mode changes we can send in one line
|
||||
|
||||
3) Modes
|
||||
|
||||
@@ -147,6 +155,12 @@ How To Add IRCd Support
|
||||
|
||||
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 Anope::string &value) { }
|
||||
|
||||
4) Functions and Events
|
||||
|
||||
A brief word about functions and events. All events are captured by creating a Message struct
|
||||
@@ -169,19 +183,74 @@ How To Add IRCd Support
|
||||
|
||||
5) CAPAB/PROTOCTL
|
||||
|
||||
Most IRCDs send a CAPAB or PROTOCTL line so that they can work out what
|
||||
the other end of the connection is capable of doing. The protocol module should
|
||||
handle all of these without the cores knowledge with the exception of the following:
|
||||
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_QS | Quitstorm - same as NOQUIT
|
||||
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
|
||||
|
||||
You can override the default OnCapab method in IRCdMessage if required.
|
||||
2) Ensure that the CAPAB/PROTOCTL event his handled correctly.
|
||||
|
||||
A) In the function module constructor make sure that you have the
|
||||
following two lines:
|
||||
|
||||
Message message_capab("CAPAB", event_capab);
|
||||
|
||||
B) Add the function to handle the event
|
||||
|
||||
bool event_capab(const Anope::string &source, const std::vector<Anope::string> ¶ms)
|
||||
{
|
||||
CapabParse(params);
|
||||
return true;
|
||||
}
|
||||
|
||||
This function should call the CapabParse function which parses
|
||||
the received CAPAB/PROTOCTL line.
|
||||
|
||||
6) IRCDProto Class
|
||||
|
||||
|
||||
@@ -200,6 +200,7 @@ Table of Contents
|
||||
* Ratbox 2.0.6 or later
|
||||
* UnrealIRCd 3.2 or later
|
||||
* Plexus 3 or later
|
||||
* ngIRCd 17.1 or later
|
||||
|
||||
Anope could also work with some of the daemons derived by the ones listed
|
||||
above, but there's no support for them if they work or don't work.
|
||||
|
||||
@@ -3,43 +3,56 @@ Legend:
|
||||
? = unsure
|
||||
+ = in progress
|
||||
|
||||
1.9.4
|
||||
1.9.3
|
||||
-----
|
||||
[x] MS IGNORE. Make it take nick (accounts) or n!u@h masks. Fake success of memo send still, but send to opers?
|
||||
[x] Allow users to delete their own access
|
||||
[x] ChanServ CLONE command
|
||||
[x] XMLRPC to execute commands and get data from Anope
|
||||
[+] fantasy: allow replies/notifications to fantasy commands to go to the channel via notice
|
||||
[x] Method to store listmodes (more generically than AKICK, too) for e.g. +beI and extbans, etc.
|
||||
[x] understanding extbans for /cs unban etc.
|
||||
[x] (optional?) A way to confirm email changes by users
|
||||
[x] Auto identify through SSL key
|
||||
[x] Optional os_login system that can also use SSL keys.
|
||||
[x] os_info module to show useful configuration settings to services opers.
|
||||
[x] Remove nick requests. Instead use an unconfirmed nick group which cant recieve umode +r and auto expires after 1d?
|
||||
[x] LDAP
|
||||
[x] Add in a subcommand system, ns_set, cs_set, etc.
|
||||
[x] Threading
|
||||
[x] Mail sending needs to be threaded
|
||||
[x] process_numlist needs to die
|
||||
[x] SList needs to die
|
||||
[x] SSL
|
||||
[x] Command handling system needs to die, strtok() needs to die more
|
||||
[x] Asynchronous DNS
|
||||
[x] Hashing system for storing just about everything needs to die
|
||||
[x] Add support for +k, +q, etc type umodes
|
||||
[x] Language system is disgusting, it must die.
|
||||
[x] Modules should also have a way to add strings programatically
|
||||
[x] Should be able to add many strings by dropping a file in a set location.
|
||||
[x] Config bailing on /os reload needs to be non fatal
|
||||
[x] AutoID needs to be able to live through /os restart, current system is just annoying.
|
||||
[x] SQL tables need to changed to have references etc
|
||||
[x] Merge NS INFO blah ALL with NS INFO blah, if you're requesting info, you really want the info anyway.
|
||||
[x] More "friendly" date displays of some things like registration time ("November 7th 2006 (2 years, 0 months, 0 days ago)")
|
||||
[?] Remote identification
|
||||
[x] Move a (lot) of stuff to class members as a defined interface rather than copypasta everywhere (ns_set, ns_saset!)
|
||||
[x] Store vhosts in SQL.
|
||||
|
||||
Future
|
||||
------
|
||||
[+] Method to store listmodes (more generically than AKICK, too) for e.g. +beI and extbans, etc.
|
||||
[ ] XMLRPC to execute commands and get data from Anope
|
||||
[ ] 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
|
||||
[ ] 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)
|
||||
[ ] MS IGNORE. Make it take nick (accounts) or n!u@h masks. Fake success of memo send still, but send to opers?
|
||||
[ ] Allow channel founders to change the fantasy trigger for their channel.
|
||||
[ ] CIDR Akills, session exceptions, etc
|
||||
[?] Language charset stuff, including collation (1.9.1? phoenix?)
|
||||
[ ] Language charset stuff, including collation (1.9.1? phoenix?)
|
||||
[ ] 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
|
||||
[ ] Useful/common "third party" modules to core distro
|
||||
[ ] NS AJOIN
|
||||
[x] CS ENTRYMSG
|
||||
[ ] CS ENTRYMSG
|
||||
[?] Don't allow soper accounts to expire
|
||||
[?] Reason for CS SET RESTRICTED
|
||||
[x] AKILL/SGLINE/etc..
|
||||
[x] Setter
|
||||
[x] Time added
|
||||
[+] Time modified (can they be modified?)
|
||||
[x] Time until expiry/expiry time (YES, time until expiry *instead of* expiry time, more human)
|
||||
[ ] 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)
|
||||
[?] Drop CS SET ENTRYMSG, replace with a 'news' type system? (limited to a configured number of items, default 3)
|
||||
|
||||
+1
-1
@@ -104,7 +104,7 @@ Anope for Windows
|
||||
Building Anope with gettext requires libintl, libiconv, libgcc and
|
||||
libmingex. We have precompiled these libraries for you that you may
|
||||
use if you want. They are avaiable at http://anope.org/downloads/anope-extra.zip
|
||||
The OpenSSL, MySQL, and OpenLDAP header files and libraries are also included in
|
||||
The OpenSSL and MySQL header files and libraries are also included in
|
||||
this package. Once downloaded and extracted, you should run install.bat
|
||||
then give Config the path to the new 'installed' directory.
|
||||
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
Starting with Anope 1.9.4 XMLRPC using PHP's xmlrpc_encode_request and xmlrpc_decode functions is supported.
|
||||
This allows external applications, such as websites, to execute remote procedure calls to Anope in real time.
|
||||
|
||||
Currently there are 5 supported XMLRPC calls, provided by m_xmlrpc_main:
|
||||
|
||||
checkAuthetication - Takes two parameters, an account name and a password. Checks if the account name is valid and the password
|
||||
is correct for the account name, useful for making login pages on websites.
|
||||
|
||||
command - Takes three parameters, a service name (BotServ, ChanServ, NickServ), a user name (whether online or not), and the command
|
||||
to execute. This will execute a the given command to Anope using the given service name. If the user given is online, the
|
||||
command reply will go to them, if not it is returned by XMLRPC.
|
||||
|
||||
stats - Takes no parameters, returns miscellaneous stats that can be found in the /operserv stats command.
|
||||
|
||||
channel - Takes one parameter, a channel name, and returns real time information regarding that channel, such as users, modes
|
||||
(ban lists and such), topic etc.
|
||||
|
||||
user - Takes one parameter, a user name, and returns real time information regarding that user.
|
||||
|
||||
XMLRPC was designed to be used with db_mysql, and will not return any information that can be pulled from the SQL
|
||||
database, such as accounts and registered channel information. It is instead used for pulling realtime data such
|
||||
as users and channels currently onlive. For examples on how to use these calls in PHP, see xmlrpc.php in docs/XMLRPC.
|
||||
|
||||
Also note that the parameter named "id" is reserved for query ID. If you pass a query to Anope containing a value for id. it will
|
||||
be stored by Anope and the same id will be passed back in the result.
|
||||
|
||||
@@ -1,101 +0,0 @@
|
||||
<?php
|
||||
/* XMLRPC Functions
|
||||
*
|
||||
* (C) 2003-2011 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
*/
|
||||
|
||||
class AnopeXMLRPC
|
||||
{
|
||||
private $Host, $Bind, $Port;
|
||||
|
||||
private $Socket;
|
||||
|
||||
function __construct($Host, $Port, $Bind = NULL)
|
||||
{
|
||||
$this->Host = $Host;
|
||||
$this->Port = $Port;
|
||||
$this->Bind = $Bind;
|
||||
|
||||
$this->Socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
|
||||
if ($Bind && socket_bind($this->Socket, $this->Bind) == false)
|
||||
$his->Socket = false;
|
||||
if (socket_connect($this->Socket, $this->Host, $this->Port) == false)
|
||||
$this->Socket = false;
|
||||
}
|
||||
|
||||
function __destruct()
|
||||
{
|
||||
@socket_close($this->Socket);
|
||||
}
|
||||
|
||||
/** Run an XMLRPC command. Name should be a query name and params an array of parameters, eg:
|
||||
* $this->RunXMLRPC("checkAuthentication", array("adam", "qwerty"));
|
||||
* If successful returns back an array of useful information.
|
||||
*
|
||||
* Note that $params["id"] is reserved for query ID, you may set it to something if you wish.
|
||||
* If you do, the same ID will be passed back with the reply from Anope.
|
||||
*/
|
||||
function RunXMLRPC($name, $params)
|
||||
{
|
||||
$xmlquery = xmlrpc_encode_request($name, $params);
|
||||
socket_write($this->Socket, $xmlquery);
|
||||
|
||||
$inbuf = socket_read($this->Socket, 4096);
|
||||
$inbuf = substr($inbuf, strpos($inbuf, "\r\n\r\n") + 4);
|
||||
$response = xmlrpc_decode($inbuf);
|
||||
|
||||
if (isset($response[0]))
|
||||
return $response[0];
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/** Do Command on Service as User, eg:
|
||||
* $anope->DoCommand("ChanServ", "Adam", "REGISTER #adam");
|
||||
* Returns an array of information regarding the command execution, if
|
||||
* If 'online' is set to yes, then the reply to the command was sent to the user on IRC.
|
||||
* If 'online' is set to no, then the reply to the command is in the array member 'return'
|
||||
*/
|
||||
function DoCommand($Service, $User, $Command)
|
||||
{
|
||||
return $this->RunXMLRPC("command", array($Service, $User, $Command));
|
||||
}
|
||||
|
||||
/** Check an account/nick name and password to see if they are valid
|
||||
* Returns the account display name if valid
|
||||
*/
|
||||
function CheckAuthentication($Account, $Pass)
|
||||
{
|
||||
$ret = $this->RunXMLRPC("checkAuthentication", array($Account, $Pass));
|
||||
|
||||
if ($ret && $ret["result"] == "Success")
|
||||
return $ret["account"];
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Returns an array of misc stats regarding Anope
|
||||
*/
|
||||
function DoStats()
|
||||
{
|
||||
return $this->RunXMLRPC("stats", NULL);
|
||||
}
|
||||
|
||||
/* Look up data for a channel
|
||||
* Returns an array containing channel information, or an array of size one
|
||||
* (just containing the name) if the channel does not exist
|
||||
*/
|
||||
function DoChannel($Channel)
|
||||
{
|
||||
return $this->RunXMLRPC("channel", NULL);
|
||||
}
|
||||
|
||||
/* Like DoChannel(), but different.
|
||||
*/
|
||||
function DoUser($User)
|
||||
{
|
||||
return $this->RunXMLRPC("user", array($User));
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
+1
-28
@@ -16,32 +16,5 @@ if(NOT WIN32)
|
||||
add_to_cpack_ignored_files("version.h$" TRUE)
|
||||
endif(NOT WIN32)
|
||||
|
||||
set(PCH_SOURCES_GCH "")
|
||||
if(CMAKE_COMPILER_IS_GNUCXX)
|
||||
string(REPLACE " " ";" PCH_CXXFLAGS ${CXXFLAGS})
|
||||
file(GLOB INCLUDE_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.h")
|
||||
remove_item_from_list(INCLUDE_SRCS "version.h")
|
||||
|
||||
set(PCH_SOURCES "module.h;modules.h;services.h")
|
||||
foreach(PCH_SOURCE ${PCH_SOURCES})
|
||||
set(PCH_EXTRAFLAGS "")
|
||||
if(DEBUG_BUILD)
|
||||
set(PCH_EXTRAFLAGS "-g")
|
||||
endif(DEBUG_BUILD)
|
||||
if(PCH_SOURCE STREQUAL "module.h")
|
||||
set(PCH_EXTRAFLAGS ${PCH_EXTRAFLAGS} -fPIC)
|
||||
endif(PCH_SOURCE STREQUAL "module.h")
|
||||
if(GETTEXT_INCLUDE)
|
||||
set(PCH_GETTEXT_INCLUDE "-I${GETTEXT_INCLUDE}")
|
||||
endif(GETTEXT_INCLUDE)
|
||||
|
||||
set(PCH_SOURCES_GCH "${PCH_SOURCES_GCH};${CMAKE_CURRENT_BINARY_DIR}/${PCH_SOURCE}.gch")
|
||||
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PCH_SOURCE}.gch
|
||||
COMMAND ${CMAKE_CXX_COMPILER} ARGS ${PCH_CXXFLAGS} ${PCH_EXTRAFLAGS} ${PCH_GETTEXT_INCLUDE} -I${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/${PCH_SOURCE} -o ${CMAKE_CURRENT_BINARY_DIR}/${PCH_SOURCE}.gch
|
||||
DEPENDS ${INCLUDE_SRCS} VERBATIM
|
||||
)
|
||||
endforeach(PCH_SOURCE ${PCH_SOURCES})
|
||||
endif(CMAKE_COMPILER_IS_GNUCXX)
|
||||
|
||||
# Add a custom target to the above file
|
||||
add_custom_target(headers DEPENDS version ${CMAKE_CURRENT_BINARY_DIR}/version.h ${PCH_SOURCES_GCH})
|
||||
add_custom_target(headers DEPENDS version ${CMAKE_CURRENT_BINARY_DIR}/version.h)
|
||||
|
||||
+29
-54
@@ -5,12 +5,15 @@
|
||||
|
||||
class NickAlias;
|
||||
class NickCore;
|
||||
class NickRequest;
|
||||
|
||||
typedef unordered_map_namespace::unordered_map<Anope::string, NickAlias *, ci::hash, std::equal_to<ci::string> > nickalias_map;
|
||||
typedef unordered_map_namespace::unordered_map<Anope::string, NickCore *, ci::hash, std::equal_to<ci::string> > nickcore_map;
|
||||
typedef unordered_map_namespace::unordered_map<Anope::string, NickRequest *, ci::hash, std::equal_to<ci::string> > nickrequest_map;
|
||||
|
||||
extern CoreExport nickalias_map NickAliasList;
|
||||
extern CoreExport nickcore_map NickCoreList;
|
||||
extern CoreExport nickrequest_map NickRequestList;
|
||||
|
||||
/* NickServ nickname structures. */
|
||||
|
||||
@@ -38,10 +41,6 @@ enum NickNameFlag
|
||||
NS_END
|
||||
};
|
||||
|
||||
const Anope::string NickNameFlagStrings[] = {
|
||||
"BEGIN", "FORBIDDEN", "NO_EXPIRE", "HELD", "COLLIDED", ""
|
||||
};
|
||||
|
||||
/** Flags set on NickCores
|
||||
*/
|
||||
enum NickCoreFlag
|
||||
@@ -82,17 +81,23 @@ enum NickCoreFlag
|
||||
NI_AUTOOP,
|
||||
/* This nickcore is forbidden, which means the nickalias for it is aswell */
|
||||
NI_FORBIDDEN,
|
||||
/* If set means the nick core does not have their email addrses confirmed.
|
||||
*/
|
||||
NI_UNCONFIRMED,
|
||||
|
||||
NI_END
|
||||
};
|
||||
|
||||
const Anope::string NickCoreFlagStrings[] = {
|
||||
"BEGIN", "KILLPROTECT", "SECURE", "MSG", "MEMO_HARDMAX", "MEMO_SIGNON", "MEMO_RECEIVE",
|
||||
"PRIVATE", "HIDE_EMAIL", "HIDE_MASK", "HIDE_QUIT", "KILL_QUICK", "KILL_IMMED",
|
||||
"MEMO_MAIL", "HIDE_STATUS", "SUSPENDED", "AUTOOP", "FORBIDDEN", "UNCONFIRMED", ""
|
||||
class CoreExport NickRequest : public Extensible
|
||||
{
|
||||
public:
|
||||
NickRequest(const Anope::string &nickname);
|
||||
|
||||
~NickRequest();
|
||||
|
||||
Anope::string nick;
|
||||
Anope::string passcode;
|
||||
Anope::string password;
|
||||
Anope::string email;
|
||||
time_t requested;
|
||||
time_t lastmail; /* Unsaved */
|
||||
};
|
||||
|
||||
class NickCore;
|
||||
@@ -152,21 +157,32 @@ class CoreExport NickCore : public Extensible, public Flags<NickCoreFlag, NI_END
|
||||
Anope::string greet; /* Greet associated to the nick */
|
||||
Anope::string language; /* Language name */
|
||||
std::vector<Anope::string> access; /* Access list, vector of strings */
|
||||
std::vector<Anope::string> cert; /* ssl certificate list, vector of strings */
|
||||
MemoInfo memos;
|
||||
uint16 channelcount; /* Number of channels currently registered */
|
||||
|
||||
Oper *o;
|
||||
OperType *ot;
|
||||
|
||||
/* Unsaved data */
|
||||
time_t lastmail; /* Last time this nick record got a mail */
|
||||
std::list<NickAlias *> aliases; /* List of aliases */
|
||||
|
||||
/** Check whether this opertype has access to run the given command string.
|
||||
* @param cmdstr The string to check, e.g. botserv/set/private.
|
||||
* @return True if this opertype may run the specified command, false otherwise.
|
||||
*/
|
||||
virtual bool HasCommand(const Anope::string &cmdstr) const;
|
||||
|
||||
/** Checks whether this account is a services oper or not.
|
||||
* @return True if this account is a services oper, false otherwise.
|
||||
*/
|
||||
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.
|
||||
*/
|
||||
virtual bool HasPriv(const Anope::string &privstr) const;
|
||||
|
||||
/** Add an entry to the nick's access list
|
||||
*
|
||||
* @param entry The nick!ident@host entry to add to the access list
|
||||
@@ -206,47 +222,6 @@ class CoreExport NickCore : public Extensible, public Flags<NickCoreFlag, NI_END
|
||||
* Deletes all the memory allocated in the access list vector and then clears the vector.
|
||||
*/
|
||||
void ClearAccess();
|
||||
|
||||
/** Add an entry to the nick's certificate list
|
||||
*
|
||||
* @param entry The fingerprint to add to the cert list
|
||||
*
|
||||
* Adds a new entry into the cert list.
|
||||
*/
|
||||
void AddCert(const Anope::string &entry);
|
||||
|
||||
/** Get an entry from the nick's cert list by index
|
||||
*
|
||||
* @param entry Index in the certificaate list vector to retrieve
|
||||
* @return The fingerprint entry of the given index if within bounds, an empty string if the vector is empty or the index is out of bounds
|
||||
*
|
||||
* Retrieves an entry from the certificate list corresponding to the given index.
|
||||
*/
|
||||
Anope::string GetCert(unsigned entry) const;
|
||||
|
||||
/** Find an entry in the nick's cert list
|
||||
*
|
||||
* @param entry The fingerprint to search for
|
||||
* @return True if the fingerprint is found in the cert list, false otherwise
|
||||
*
|
||||
* Search for an fingerprint within the cert list.
|
||||
*/
|
||||
bool FindCert(const Anope::string &entry);
|
||||
|
||||
/** Erase a fingerprint from the nick's certificate list
|
||||
*
|
||||
* @param entry The fingerprint to remove
|
||||
*
|
||||
* Removes the specified fingerprint from the cert list.
|
||||
*/
|
||||
void EraseCert(const Anope::string &entry);
|
||||
|
||||
/** Clears the entire nick's cert list
|
||||
*
|
||||
* Deletes all the memory allocated in the certificate list vector and then clears the vector.
|
||||
*/
|
||||
void ClearCert();
|
||||
|
||||
};
|
||||
|
||||
/** Timer for colliding nicks to force people off of nicknames
|
||||
|
||||
+4
-25
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* (C) 2003-2011 Anope Team
|
||||
* (C) 2003-2010 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
* 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.
|
||||
@@ -20,9 +20,6 @@ class Message;
|
||||
|
||||
namespace Anope
|
||||
{
|
||||
template<typename T> class map : public std::map<string, T> { };
|
||||
template<typename T> class insensitive_map : public std::map<string, T, std::less<ci::string> > { };
|
||||
|
||||
/**
|
||||
* A wrapper string class around all the other string classes, this class will
|
||||
* allow us to only require one type of string everywhere that can be converted
|
||||
@@ -156,11 +153,6 @@ namespace Anope
|
||||
*/
|
||||
inline size_type length() const { return this->_string.length(); }
|
||||
|
||||
/**
|
||||
* Add a char to the end of the string.
|
||||
*/
|
||||
inline void push_back(char c) { return this->_string.push_back(c); }
|
||||
|
||||
/**
|
||||
* Resizes the string content to n characters.
|
||||
*/
|
||||
@@ -302,12 +294,8 @@ namespace Anope
|
||||
extern CoreExport time_t CurTime;
|
||||
|
||||
extern CoreExport string Version();
|
||||
extern CoreExport string VersionShort();
|
||||
extern CoreExport string VersionBuildString();
|
||||
extern CoreExport int VersionMajor();
|
||||
extern CoreExport int VersionMinor();
|
||||
extern CoreExport int VersionPatch();
|
||||
extern CoreExport int VersionBuild();
|
||||
|
||||
extern CoreExport string Build();
|
||||
|
||||
/** Check whether two strings match.
|
||||
* @param str The string to check against the pattern (e.g. foobar)
|
||||
@@ -336,15 +324,6 @@ namespace Anope
|
||||
extern CoreExport void Unhex(const Anope::string &src, Anope::string &dest);
|
||||
extern CoreExport void Unhex(const Anope::string &src, char *dest);
|
||||
|
||||
/** Returns a sequence of data formatted as the format argument specifies.
|
||||
** After the format parameter, the function expects at least as many
|
||||
** additional arguments as specified in format.
|
||||
* @param fmt Format of the Message
|
||||
* @param ... any number of parameters
|
||||
* @return a Anope::string
|
||||
*/
|
||||
extern CoreExport string printf(const char *fmt, ...);
|
||||
|
||||
/** Return the last error, uses errno/GetLastError() to determin this
|
||||
* @return An error message
|
||||
*/
|
||||
|
||||
+10
-10
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2011 Robin Burchell <w00t@inspircd.org>
|
||||
* Copyright (C) 2008-2011 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,8 +12,10 @@
|
||||
|
||||
class BotInfo;
|
||||
|
||||
extern CoreExport Anope::insensitive_map<BotInfo *> BotListByNick;
|
||||
extern CoreExport Anope::map<BotInfo *> BotListByUID;
|
||||
typedef unordered_map_namespace::unordered_map<Anope::string, BotInfo *, ci::hash, std::equal_to<ci::string> > botinfo_map;
|
||||
typedef unordered_map_namespace::unordered_map<Anope::string, BotInfo *, Anope::hash> botinfo_uid_map;
|
||||
extern CoreExport botinfo_map BotListByNick;
|
||||
extern CoreExport botinfo_uid_map BotListByUID;
|
||||
|
||||
/** Flags settable on a bot
|
||||
*/
|
||||
@@ -29,8 +31,6 @@ enum BotFlag
|
||||
BI_END
|
||||
};
|
||||
|
||||
static const Anope::string BotFlagString[] = { "BEGIN", "CORE", "PRIVATE", "" };
|
||||
|
||||
class CoreExport BotInfo : public User, public Flags<BotFlag, BI_END>
|
||||
{
|
||||
public:
|
||||
@@ -75,15 +75,15 @@ class CoreExport BotInfo : public User, public Flags<BotFlag, BI_END>
|
||||
|
||||
/** Join this bot to a channel
|
||||
* @param c The channel
|
||||
* @param status The status the bot should have on the channel
|
||||
* @param update_ts Assume we're updating the TS for this channel
|
||||
*/
|
||||
void Join(Channel *c, ChannelStatus *status = NULL);
|
||||
void Join(Channel *c, bool update_ts = false);
|
||||
|
||||
/** Join this bot to a channel
|
||||
* @param chname The channel name
|
||||
* @param status The status the bot should have on the channel
|
||||
* @param update_ts Assume we're updating the TS for this channel
|
||||
*/
|
||||
void Join(const Anope::string &chname, ChannelStatus *status = NULL);
|
||||
void Join(const Anope::string &chname, bool update_ts = false);
|
||||
|
||||
/** Part this bot from a channel
|
||||
* @param c The channel
|
||||
|
||||
+47
-15
@@ -1,6 +1,6 @@
|
||||
/* Channel support
|
||||
*
|
||||
* (C) 2008-2011 Anope Team
|
||||
* (C) 2008-2010 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
@@ -52,7 +52,7 @@ struct UserContainer
|
||||
|
||||
typedef std::list<UserContainer *> CUserList;
|
||||
|
||||
enum ChannelFlag
|
||||
enum ChannelFlags
|
||||
{
|
||||
/* Channel still exists when emptied */
|
||||
CH_PERSIST,
|
||||
@@ -62,14 +62,15 @@ enum ChannelFlag
|
||||
CH_LOGCHAN
|
||||
};
|
||||
|
||||
class CoreExport Channel : public Extensible, public Flags<ChannelFlag, 3>
|
||||
class CoreExport Channel : public Extensible, public Flags<ChannelFlags>
|
||||
{
|
||||
public:
|
||||
typedef std::multimap<ChannelModeName, Anope::string> ModeList;
|
||||
private:
|
||||
/** A map of channel modes with their parameters set on this channel
|
||||
*/
|
||||
ModeList modes;
|
||||
std::map<ChannelModeName, Anope::string> Params;
|
||||
|
||||
/* Modes set on the channel */
|
||||
Flags<ChannelModeName, CMODE_END * 2> modes;
|
||||
|
||||
public:
|
||||
/** Default constructor
|
||||
@@ -86,6 +87,10 @@ class CoreExport Channel : public Extensible, public Flags<ChannelFlag, 3>
|
||||
ChannelInfo *ci; /* Corresponding ChannelInfo */
|
||||
time_t creation_time; /* When channel was created */
|
||||
|
||||
EList *bans;
|
||||
EList *excepts;
|
||||
EList *invites;
|
||||
|
||||
/* List of users in the channel */
|
||||
CUserList users;
|
||||
|
||||
@@ -141,18 +146,16 @@ class CoreExport Channel : public Extensible, public Flags<ChannelFlag, 3>
|
||||
*/
|
||||
bool HasUserStatus(User *u, ChannelModeName Name) const;
|
||||
|
||||
/** See if the channel has any modes at all
|
||||
* @return true or false
|
||||
*/
|
||||
inline bool HasModes() const { return modes.FlagCount(); }
|
||||
|
||||
/** See if a channel has a mode
|
||||
* @param Name The mode name
|
||||
* @return The number of modes set
|
||||
* @param param The optional mode param
|
||||
* @return true or false
|
||||
*/
|
||||
size_t HasMode(ChannelModeName Name, const Anope::string ¶m = "");
|
||||
|
||||
/** Get a list of modes on a channel
|
||||
* @param Name A mode name to get the list of
|
||||
* @return a pair of iterators for the beginning and end of the list
|
||||
*/
|
||||
std::pair<ModeList::iterator, ModeList::iterator> GetModeList(ChannelModeName Name);
|
||||
bool HasMode(ChannelModeName Name) const;
|
||||
|
||||
/** Set a mode internally on a channel, this is not sent out to the IRCd
|
||||
* @param cm The mode
|
||||
@@ -202,6 +205,30 @@ class CoreExport Channel : public Extensible, public Flags<ChannelFlag, 3>
|
||||
*/
|
||||
void RemoveMode(BotInfo *bi, ChannelModeName Name, const Anope::string ¶m = "", bool EnforceMLock = true);
|
||||
|
||||
/** Clear all the modes from the channel
|
||||
* @param bi The client unsetting the modes
|
||||
* @param internal Only remove the modes internally
|
||||
*/
|
||||
void ClearModes(BotInfo *bi = NULL, bool internal = false);
|
||||
|
||||
/** Clear all the bans from the channel
|
||||
* @param bi The client unsetting the modes
|
||||
* @param internal Only remove the modes internally
|
||||
*/
|
||||
void ClearBans(BotInfo *bi = NULL, bool internal = false);
|
||||
|
||||
/** Clear all the excepts from the channel
|
||||
* @param bi The client unsetting the modes
|
||||
* @param internal Only remove the modes internally
|
||||
*/
|
||||
void ClearExcepts(BotInfo *bi = NULL, bool internal = false);
|
||||
|
||||
/** Clear all the invites from the channel
|
||||
* @param bi The client unsetting the modes
|
||||
* @param internal Only remove the modes internally
|
||||
*/
|
||||
void ClearInvites(BotInfo *bi = NULL, bool internal = false);
|
||||
|
||||
/** Get a param from the channel
|
||||
* @param Name The mode
|
||||
* @param Target a string to put the param into
|
||||
@@ -209,6 +236,11 @@ class CoreExport Channel : public Extensible, public Flags<ChannelFlag, 3>
|
||||
*/
|
||||
bool GetParam(ChannelModeName Name, Anope::string &Target) const;
|
||||
|
||||
/** Check if a mode is set and has a param
|
||||
* @param Name The mode
|
||||
*/
|
||||
bool HasParam(ChannelModeName Name) const;
|
||||
|
||||
/** 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
|
||||
|
||||
+15
-55
@@ -1,9 +1,9 @@
|
||||
/* Declarations for command data.
|
||||
*
|
||||
* (C) 2003-2011 Anope Team
|
||||
* (C) 2003-2010 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
* 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.
|
||||
@@ -29,9 +29,9 @@ enum CommandReturn
|
||||
};
|
||||
|
||||
extern CoreExport Command *FindCommand(BotInfo *bi, const Anope::string &cmd);
|
||||
extern CoreExport void mod_help_cmd(BotInfo *bi, User *u, ChannelInfo *ci, const Anope::string &cmd);
|
||||
extern CoreExport void mod_run_cmd(BotInfo *bi, User *u, ChannelInfo *ci, const Anope::string &message);
|
||||
extern CoreExport void mod_run_cmd(BotInfo *bi, User *u, ChannelInfo *ci, Command *c, const Anope::string &command, const Anope::string &message);
|
||||
extern CoreExport void mod_help_cmd(BotInfo *bi, User *u, const Anope::string &cmd);
|
||||
extern CoreExport void mod_run_cmd(BotInfo *bi, User *u, const Anope::string &message);
|
||||
extern CoreExport void mod_run_cmd(BotInfo *bi, User *u, Command *c, const Anope::string &command, const Anope::string &message);
|
||||
|
||||
enum CommandFlag
|
||||
{
|
||||
@@ -43,44 +43,10 @@ enum CommandFlag
|
||||
CFLAG_DISABLE_FANTASY
|
||||
};
|
||||
|
||||
const Anope::string CommandFlagStrings[] = {
|
||||
"CFLAG_ALLOW_UNREGISTERED",
|
||||
"CFLAG_ALLOW_FORBIDDEN",
|
||||
"CFLAG_ALLOW_SUSPENDED",
|
||||
"CFLAG_ALLOW_UNREGISTEREDCHANNEL",
|
||||
"CFLAG_STRIP_CHANNEL",
|
||||
"CFLAG_DISABLE_FANTASY",
|
||||
""
|
||||
};
|
||||
|
||||
/* The source for a command */
|
||||
struct CoreExport CommandSource
|
||||
{
|
||||
/* User executing the command */
|
||||
User *u;
|
||||
/* Channel (if applicable) */
|
||||
ChannelInfo *ci;
|
||||
/* The service this command is on */
|
||||
BotInfo *owner;
|
||||
/* The service the reply should come from, *not* necessarily the service the command is on */
|
||||
BotInfo *service;
|
||||
/* Whether or not this was a fantasy command */
|
||||
bool fantasy;
|
||||
|
||||
std::list<Anope::string> reply;
|
||||
|
||||
void Reply(const char *message, ...);
|
||||
void Reply(const Anope::string &message);
|
||||
|
||||
void DoReply();
|
||||
};
|
||||
|
||||
/** Every services command is a class, inheriting from Command.
|
||||
*/
|
||||
class CoreExport Command : public Flags<CommandFlag>, public Base
|
||||
class CoreExport Command : public Flags<CommandFlag>
|
||||
{
|
||||
Anope::string desc;
|
||||
|
||||
public:
|
||||
/* Maximum paramaters accepted by this command */
|
||||
size_t MaxParams;
|
||||
@@ -106,33 +72,28 @@ class CoreExport Command : public Flags<CommandFlag>, public Base
|
||||
|
||||
virtual ~Command();
|
||||
|
||||
protected:
|
||||
void SetDesc(const Anope::string &d);
|
||||
|
||||
public:
|
||||
/** Execute this command.
|
||||
* @param source The source
|
||||
* @param params Command parameters
|
||||
* @param u The user executing the command.
|
||||
*/
|
||||
virtual CommandReturn Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) = 0;
|
||||
virtual CommandReturn Execute(User *u, const std::vector<Anope::string> &);
|
||||
|
||||
/** Called when HELP is requsted for the client this command is on.
|
||||
* @param source The source
|
||||
* @param u The user requesting help
|
||||
*/
|
||||
virtual void OnServHelp(CommandSource &source);
|
||||
virtual void OnServHelp(User *u);
|
||||
|
||||
/** Requested when the user is requesting help on this command. Help on this command should be sent to the user.
|
||||
* @param source The source
|
||||
* @param u The user requesting help
|
||||
* @param subcommand The subcommand the user is requesting help on, or an empty string. (e.g. /ns help set foo bar lol gives a subcommand of "FOO BAR LOL")
|
||||
* @return true if help was provided to the user, false otherwise.
|
||||
*/
|
||||
virtual bool OnHelp(CommandSource &source, const Anope::string &subcommand);
|
||||
virtual bool OnHelp(User *u, const Anope::string &subcommand);
|
||||
|
||||
/** Requested when the user provides bad syntax to this command (not enough params, etc).
|
||||
* @param source The source
|
||||
* @param u The user executing the command.
|
||||
* @param subcommand The subcommand the user tried to use
|
||||
*/
|
||||
virtual void OnSyntaxError(CommandSource &source, const Anope::string &subcommand);
|
||||
virtual void OnSyntaxError(User *u, const Anope::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
|
||||
@@ -140,10 +101,9 @@ class CoreExport Command : public Flags<CommandFlag>, public Base
|
||||
void SetPermission(const Anope::string &reststr);
|
||||
|
||||
/** Add a subcommand to this command
|
||||
* @param creator The creator of the subcommand
|
||||
* @param c The command
|
||||
*/
|
||||
virtual bool AddSubcommand(Module *creator, Command *c);
|
||||
virtual bool AddSubcommand(Command *c);
|
||||
|
||||
/** Delete a subcommand from this command
|
||||
* @param c The command
|
||||
|
||||
+169
-106
@@ -34,6 +34,8 @@ enum ConfigDataType
|
||||
DT_UINTEGER, // Unsigned Integer
|
||||
DT_LUINTEGER, // Long Unsigned Integer
|
||||
DT_CHARPTR, // Char pointer
|
||||
DT_CSSTRING, // std::string
|
||||
DT_CISTRING, // ci::string
|
||||
DT_STRING, // Anope::string
|
||||
DT_BOOLEAN, // Boolean
|
||||
DT_HOSTNAME, // Hostname syntax
|
||||
@@ -51,7 +53,7 @@ enum ConfigDataType
|
||||
* The callback function can then alter the values of the ValueItem
|
||||
* classes to validate the settings.
|
||||
*/
|
||||
class CoreExport ValueItem
|
||||
class ValueItem
|
||||
{
|
||||
private:
|
||||
/** Actual data */
|
||||
@@ -87,7 +89,11 @@ class CoreExport ValueItem
|
||||
int GetInteger() const;
|
||||
/** Get value as a string */
|
||||
const char *GetString() const;
|
||||
/** Get value as an Anope::string */
|
||||
/** Get value as an std::string */
|
||||
inline const std::string GetCSValue() const { return v.str(); }
|
||||
/** Get value as a ci::string */
|
||||
inline const ci::string GetCIValue() const { return v.ci_str(); }
|
||||
/** Get value as a ci::string */
|
||||
inline const Anope::string &GetValue() const { return v; }
|
||||
/** Get value as a bool */
|
||||
bool GetBool() const;
|
||||
@@ -171,6 +177,78 @@ template<> class ValueContainer<char **> : public ValueContainerBase
|
||||
}
|
||||
};
|
||||
|
||||
/** This a specific version of ValueContainer to handle std::string specially
|
||||
*/
|
||||
template<> class ValueContainer<std::string *> : public ValueContainerBase
|
||||
{
|
||||
private:
|
||||
/** Contained item */
|
||||
std::string *val;
|
||||
public:
|
||||
/** Initialize with nothing */
|
||||
ValueContainer() : ValueContainerBase(), val(NULL) { }
|
||||
/** Initialize with an std::string */
|
||||
ValueContainer(std::string *Val) : ValueContainerBase(), val(Val) { }
|
||||
/** Initialize with a copy */
|
||||
ValueContainer(const ValueContainer &Val) : ValueContainerBase(), val(Val.val) { }
|
||||
ValueContainer &operator=(const ValueContainer &Val)
|
||||
{
|
||||
val = Val.val;
|
||||
return *this;
|
||||
}
|
||||
/** Change value to given std::string */
|
||||
void Set(const std::string &newval)
|
||||
{
|
||||
*val = newval;
|
||||
}
|
||||
/** Change value to given ci::string */
|
||||
void Set(const ci::string &newval)
|
||||
{
|
||||
*val = newval.c_str();
|
||||
}
|
||||
/** Change value to given char pointer */
|
||||
void Set(const char *newval)
|
||||
{
|
||||
*val = newval;
|
||||
}
|
||||
};
|
||||
|
||||
/** This a specific version of ValueContainer to handle ci::string specially
|
||||
*/
|
||||
template<> class ValueContainer<ci::string *> : public ValueContainerBase
|
||||
{
|
||||
private:
|
||||
/** Contained item */
|
||||
ci::string *val;
|
||||
public:
|
||||
/** Initialize with nothing */
|
||||
ValueContainer() : ValueContainerBase(), val(NULL) { }
|
||||
/** Initialize with an std::string */
|
||||
ValueContainer(ci::string *Val) : ValueContainerBase(), val(Val) { }
|
||||
/** Initialize with a copy */
|
||||
ValueContainer(const ValueContainer &Val) : ValueContainerBase(), val(Val.val) { }
|
||||
ValueContainer &operator=(const ValueContainer &Val)
|
||||
{
|
||||
val = Val.val;
|
||||
return *this;
|
||||
}
|
||||
/** Change value to given std::string */
|
||||
void Set(const std::string &newval)
|
||||
{
|
||||
*val = newval.c_str();
|
||||
}
|
||||
/** Change value to given ci::string */
|
||||
void Set(const ci::string &newval)
|
||||
{
|
||||
*val = newval;
|
||||
}
|
||||
/** Change value to given char pointer */
|
||||
void Set(const char *newval)
|
||||
{
|
||||
*val = newval;
|
||||
}
|
||||
};
|
||||
|
||||
/** This a specific version of ValueContainer to handle Anope::string specially
|
||||
*/
|
||||
template<> class ValueContainer<Anope::string *> : public ValueContainerBase
|
||||
@@ -190,7 +268,16 @@ template<> class ValueContainer<Anope::string *> : public ValueContainerBase
|
||||
val = Val.val;
|
||||
return *this;
|
||||
}
|
||||
|
||||
/** Change value to given std::string */
|
||||
void Set(const std::string &newval)
|
||||
{
|
||||
*val = newval;
|
||||
}
|
||||
/** Change value to given ci::string */
|
||||
void Set(const ci::string &newval)
|
||||
{
|
||||
*val = newval;
|
||||
}
|
||||
/** Change value to given Anope::string */
|
||||
void Set(const Anope::string &newval)
|
||||
{
|
||||
@@ -232,6 +319,16 @@ typedef ValueContainer<int *> ValueContainerInt;
|
||||
*/
|
||||
typedef ValueContainer<time_t *> ValueContainerTime;
|
||||
|
||||
/** A specialization of ValueContainer to hold a pointer to
|
||||
* an std::string
|
||||
*/
|
||||
typedef ValueContainer<std::string *> ValueContainerCSString;
|
||||
|
||||
/** A specialization of ValueContainer to hold a pointer to
|
||||
* an ci::string
|
||||
*/
|
||||
typedef ValueContainer<ci::string *> ValueContainerCIString;
|
||||
|
||||
/** A specialization of ValueContainer to hold a pointer to
|
||||
* an Anope::string
|
||||
*/
|
||||
@@ -251,89 +348,43 @@ typedef bool (*MultiValidator)(ServerConfig *, const Anope::string &, const Anop
|
||||
*/
|
||||
typedef bool (*MultiNotify)(ServerConfig *, const Anope::string &);
|
||||
|
||||
bool ValidateNotEmpty(ServerConfig *, const Anope::string &tag, const Anope::string &value, ValueItem &data);
|
||||
bool ValidateNotZero(ServerConfig *, const Anope::string &tag, const Anope::string &value, ValueItem &data);
|
||||
bool ValidateEmailReg(ServerConfig *config, const Anope::string &tag, const Anope::string &value, ValueItem &data);
|
||||
bool ValidatePort(ServerConfig *, const Anope::string &tag, const Anope::string &value, ValueItem &data);
|
||||
bool ValidateGuestPrefix(ServerConfig *conf, const Anope::string &tag, const Anope::string &value, ValueItem &data);
|
||||
bool ValidateBantype(ServerConfig *, const Anope::string &, const Anope::string &, ValueItem &data);
|
||||
bool ValidateChanServ(ServerConfig *config, const Anope::string &tag, const Anope::string &value, ValueItem &data);
|
||||
bool ValidateMemoServ(ServerConfig *config, const Anope::string &tag, const Anope::string &value, ValueItem &data);
|
||||
bool ValidateBotServ(ServerConfig *config, const Anope::string &tag, const Anope::string &value, ValueItem &data);
|
||||
bool ValidateHostServ(ServerConfig *config, const Anope::string &tag, const Anope::string &value, ValueItem &data);
|
||||
bool ValidateLimitSessions(ServerConfig *config, const Anope::string &tag, const Anope::string &value, ValueItem &data);
|
||||
bool ValidateOperServ(ServerConfig *config, const Anope::string &tag, const Anope::string &value, ValueItem &data);
|
||||
bool ValidateGlobal(ServerConfig *config, const Anope::string &tag, const Anope::string &value, ValueItem &data);
|
||||
bool ValidateDefCon(ServerConfig *config, const Anope::string &tag, const Anope::string &value, ValueItem &data);
|
||||
bool ValidateNickLen(ServerConfig *, const Anope::string &, const Anope::string &, ValueItem &data);
|
||||
bool ValidateMail(ServerConfig *config, const Anope::string &tag, const Anope::string &value, ValueItem &data);
|
||||
bool ValidateGlobalOnCycle(ServerConfig *config, const Anope::string &tag, const Anope::string &value, ValueItem &data);
|
||||
|
||||
/** Represents a configuration file
|
||||
/** Holds a core configuration item and its callbacks
|
||||
*/
|
||||
class ConfigurationFile
|
||||
struct InitialConfig
|
||||
{
|
||||
Anope::string name;
|
||||
bool executable;
|
||||
FILE *fp;
|
||||
public:
|
||||
ConfigurationFile(const Anope::string &, bool);
|
||||
~ConfigurationFile();
|
||||
const Anope::string &GetName() const;
|
||||
|
||||
bool IsOpen() const;
|
||||
bool Open();
|
||||
void Close();
|
||||
bool End() const;
|
||||
Anope::string Read();
|
||||
/** Tag name */
|
||||
const Anope::string tag;
|
||||
/** Value name */
|
||||
const Anope::string value;
|
||||
/** Default, if not defined */
|
||||
const Anope::string default_value;
|
||||
/** Value containers */
|
||||
ValueContainerBase *val;
|
||||
/** Data types */
|
||||
int datatype;
|
||||
/** Validation function */
|
||||
Validator validation_function;
|
||||
};
|
||||
|
||||
/** Holds all of the core configuration items
|
||||
/** Holds a core configuration item and its callbacks
|
||||
* where there may be more than one item
|
||||
*/
|
||||
class CoreExport ConfigItems
|
||||
struct MultiConfig
|
||||
{
|
||||
public:
|
||||
/** Holds a core configuration item and its callbacks
|
||||
*/
|
||||
struct Item
|
||||
{
|
||||
/** Tag name */
|
||||
Anope::string tag;
|
||||
/** Value name */
|
||||
Anope::string value;
|
||||
/** Default, if not defined */
|
||||
Anope::string default_value;
|
||||
/** Value containers */
|
||||
ValueContainerBase *val;
|
||||
/** Data types */
|
||||
int datatype;
|
||||
/** Validation function */
|
||||
Validator validation_function;
|
||||
} *Values;
|
||||
|
||||
/** Holds a core configuration item and its callbacks
|
||||
* where there may be more than one item
|
||||
*/
|
||||
struct MultiItem
|
||||
{
|
||||
/** Tag name */
|
||||
Anope::string tag;
|
||||
/** One or more items within tag */
|
||||
Anope::string items[17];
|
||||
/** One or more defaults for items within tags */
|
||||
Anope::string items_default[17];
|
||||
/** One or more data types */
|
||||
int datatype[17];
|
||||
/** Initialization function */
|
||||
MultiNotify init_function;
|
||||
/** Validation function */
|
||||
MultiValidator validation_function;
|
||||
/** Completion function */
|
||||
MultiNotify finish_function;
|
||||
} *MultiValues;
|
||||
|
||||
ConfigItems(ServerConfig *conf);
|
||||
~ConfigItems();
|
||||
/** Tag name */
|
||||
const Anope::string tag;
|
||||
/** One or more items within tag */
|
||||
const Anope::string items[17];
|
||||
/** One or more defaults for items within tags */
|
||||
const Anope::string items_default[17];
|
||||
/** One or more data types */
|
||||
int datatype[17];
|
||||
/** Initialization function */
|
||||
MultiNotify init_function;
|
||||
/** Validation function */
|
||||
MultiValidator validation_function;
|
||||
/** Completion function */
|
||||
MultiNotify finish_function;
|
||||
};
|
||||
|
||||
/** This class holds the bulk of the runtime configuration for Anope.
|
||||
@@ -347,6 +398,8 @@ class CoreExport ServerConfig
|
||||
*/
|
||||
bool CheckOnce(const Anope::string &);
|
||||
public:
|
||||
/* Error from the config */
|
||||
std::ostringstream errstr;
|
||||
/** This holds all the information in the config file,
|
||||
* it's indexed by tag name to a vector of key/values.
|
||||
*/
|
||||
@@ -354,16 +407,15 @@ class CoreExport ServerConfig
|
||||
/** Construct a new ServerConfig
|
||||
*/
|
||||
ServerConfig();
|
||||
|
||||
/** Read the entire configuration into memory
|
||||
* and initialize this class. All other methods
|
||||
* should be used only by the core.
|
||||
*/
|
||||
void Read();
|
||||
/** Load the configuration file into 'this'. With the new config parser everything is parsed into
|
||||
/** Load 'filename' into 'target', with the new config parser everything is parsed into
|
||||
* tag/key/value at load-time rather than at read-value time.
|
||||
*/
|
||||
void LoadConf(ConfigurationFile &file);
|
||||
bool LoadConf(ConfigDataHash &, const Anope::string &);
|
||||
// Both these return true if the value existed or false otherwise
|
||||
/** Writes 'length' chars into 'result' as a string
|
||||
*/
|
||||
@@ -485,9 +537,6 @@ class CoreExport ServerConfig
|
||||
bool UsePrivmsg;
|
||||
/* Services only respond to full PRIVMSG client@services.server.name messages */
|
||||
bool UseStrictPrivMsg;
|
||||
/* This is not a configurable option.
|
||||
* Config::Config will set it depending on the value of UseStrictPrivMsg */
|
||||
Anope::string UseStrictPrivMsgString;
|
||||
/* Number of seconds between consecutive uses of the REGISTER command
|
||||
* Not to be confused with NSRegDelay */
|
||||
unsigned NickRegDelay;
|
||||
@@ -495,12 +544,10 @@ class CoreExport ServerConfig
|
||||
unsigned NewsCount;
|
||||
/* Default mlock modes */
|
||||
Anope::string MLock;
|
||||
/* Unmlockable modes */
|
||||
Anope::string NoMLock;
|
||||
/* Default botmodes on channels, defaults to ao */
|
||||
Anope::string BotModes;
|
||||
/* THe actual modes */
|
||||
ChannelStatus BotModeList;
|
||||
std::vector<ChannelModeStatus *> BotModeList;
|
||||
/* How many times to try and reconnect to the uplink before giving up */
|
||||
unsigned MaxRetries;
|
||||
/* How long to wait between connection attempts */
|
||||
@@ -546,18 +593,12 @@ class CoreExport ServerConfig
|
||||
time_t NSRegDelay;
|
||||
/* Time before the registering mail will be resent */
|
||||
time_t NSResendDelay;
|
||||
/* How long before nicks expire */
|
||||
/* How long before nicks expir */
|
||||
time_t NSExpire;
|
||||
/* How long before suspended nicks expire */
|
||||
time_t NSSuspendExpire;
|
||||
/* How long before forbidden nicks expire */
|
||||
time_t NSForbidExpire;
|
||||
/* Time before unconfirmed nicks expire */
|
||||
time_t NSUnconfirmedExpire;
|
||||
/* Time before NickRequests expire */
|
||||
time_t NSRExpire;
|
||||
/* Force email when registering */
|
||||
bool NSForceEmail;
|
||||
/* Force users to validate new email addresses */
|
||||
bool NSConfirmEmailChanges;
|
||||
/* Max number of nicks in a group */
|
||||
unsigned NSMaxAliases;
|
||||
/* Max number of allowed strings on the access list */
|
||||
@@ -582,8 +623,6 @@ class CoreExport ServerConfig
|
||||
bool NSModeOnID;
|
||||
/* Add the users hostnask their access list when they register */
|
||||
bool NSAddAccessOnReg;
|
||||
/* Maximum number of channels on AJoin */
|
||||
unsigned AJoinMax;
|
||||
|
||||
/* Default flags for newly registered channels */
|
||||
Flags<ChannelInfoFlag, CI_END> CSDefFlags;
|
||||
@@ -591,10 +630,6 @@ class CoreExport ServerConfig
|
||||
unsigned CSMaxReg;
|
||||
/* Time before a channel expires */
|
||||
time_t CSExpire;
|
||||
/* How long before suspended channels expire */
|
||||
time_t CSSuspendExpire;
|
||||
/* How long before forbidden channels expire */
|
||||
time_t CSForbidExpire;
|
||||
/* Default ban type to use for channels */
|
||||
int CSDefBantype;
|
||||
/* Max number of entries allowed on channel access lists */
|
||||
@@ -672,6 +707,26 @@ class CoreExport ServerConfig
|
||||
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 SNLINE command */
|
||||
bool WallOSSNLine;
|
||||
/* 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 SNLines expire */
|
||||
@@ -682,6 +737,14 @@ class CoreExport ServerConfig
|
||||
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;
|
||||
|
||||
@@ -760,7 +823,7 @@ class CoreExport ServerConfig
|
||||
/* List of available opertypes */
|
||||
std::list<OperType *> MyOperTypes;
|
||||
/* List of pairs of opers and their opertype from the config */
|
||||
std::vector<Oper *> Opers;
|
||||
std::list<std::pair<Anope::string, Anope::string> > Opers;
|
||||
};
|
||||
|
||||
/** This class can be used on its own to represent an exception, or derived to represent a module-specific exception.
|
||||
@@ -808,7 +871,7 @@ class CoreExport ConfigReader
|
||||
long error;
|
||||
public:
|
||||
/** Default constructor.
|
||||
* This constructor initialises the ConfigReader class to read the configuration file(s).
|
||||
* This constructor initialises the ConfigReader class to read services.conf.
|
||||
*/
|
||||
ConfigReader();
|
||||
/** Overloaded constructor.
|
||||
|
||||
+3
-5
@@ -113,7 +113,7 @@ struct DNSPacket
|
||||
inline void FillBuffer(unsigned char *buffer);
|
||||
};
|
||||
|
||||
struct CoreExport DNSRecord
|
||||
struct DNSRecord
|
||||
{
|
||||
/* Name of the initial lookup */
|
||||
Anope::string name;
|
||||
@@ -130,11 +130,9 @@ struct CoreExport DNSRecord
|
||||
/* Record length */
|
||||
unsigned short rdlength;
|
||||
|
||||
inline DNSRecord(const Anope::string &n);
|
||||
/* When this record was created in our cache */
|
||||
time_t created;
|
||||
|
||||
inline DNSRecord(const Anope::string &n);
|
||||
operator bool() const;
|
||||
};
|
||||
|
||||
/** The socket used to talk to the nameserver, uses UDP
|
||||
@@ -156,7 +154,7 @@ class DNSSocket : public ConnectionSocket
|
||||
|
||||
/** DNS manager, manages the connection and all requests
|
||||
*/
|
||||
class CoreExport DNSManager : public Timer
|
||||
class DNSManager : public Timer
|
||||
{
|
||||
std::multimap<Anope::string, DNSRecord *> cache;
|
||||
public:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2011 Anope Team <team@anope.org>
|
||||
* Copyright (C) 2008-2010 Anope Team <team@anope.org>
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
*/
|
||||
@@ -28,7 +28,7 @@ template<typename T> class ExtensibleItemRegular : public ExtensibleItemBase
|
||||
public:
|
||||
ExtensibleItemRegular(T item) : Item(item) { }
|
||||
virtual ~ExtensibleItemRegular() { }
|
||||
T &GetItem() { return Item; }
|
||||
T GetItem() const { return Item; }
|
||||
};
|
||||
|
||||
/** Class used to represent an extensible item that holds a pointer
|
||||
@@ -41,7 +41,7 @@ template<typename T> class ExtensibleItemPointer : public ExtensibleItemBase
|
||||
public:
|
||||
ExtensibleItemPointer(T *item) : Item(item) { }
|
||||
virtual ~ExtensibleItemPointer() { delete Item; }
|
||||
T *GetItem() { return Item; }
|
||||
T *GetItem() const { return Item; }
|
||||
};
|
||||
|
||||
/** Class used to represent an extensible item that holds a pointer to an arrray
|
||||
@@ -54,7 +54,7 @@ template<typename T> class ExtensibleItemPointerArray : public ExtensibleItemBas
|
||||
public:
|
||||
ExtensibleItemPointerArray(T *item) : Item(item) { }
|
||||
virtual ~ExtensibleItemPointerArray() { delete [] Item; }
|
||||
T *GetItem() { return Item; }
|
||||
T *GetItem() const { return Item; }
|
||||
};
|
||||
|
||||
class CoreExport Extensible : public Base
|
||||
@@ -108,7 +108,7 @@ class CoreExport Extensible : public Base
|
||||
*/
|
||||
void Extend(const Anope::string &key)
|
||||
{
|
||||
this->Extend(key, new ExtensibleItemPointer<char *>(NULL));
|
||||
this->Extend(key, new ExtensibleItemRegular<char *>(NULL));
|
||||
}
|
||||
|
||||
/** Shrink an Extensible class.
|
||||
|
||||
+80
-51
@@ -1,9 +1,9 @@
|
||||
/* Prototypes and external variable declarations.
|
||||
*
|
||||
* (C) 2003-2011 Anope Team
|
||||
* (C) 2003-2010 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
* 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.
|
||||
@@ -23,13 +23,12 @@ E void ModuleRunTimeDirCleanUp();
|
||||
|
||||
E IRCDVar *ircd;
|
||||
E IRCDProto *ircdproto;
|
||||
E IRCdMessage *ircdmessage;
|
||||
|
||||
/**** actions.c ****/
|
||||
|
||||
E void kill_user(const Anope::string &source, User *user, const Anope::string &reason);
|
||||
E void kill_user(const Anope::string &source, const Anope::string &user, const Anope::string &reason);
|
||||
E bool bad_password(User *u);
|
||||
E void common_unban(ChannelInfo *ci, User *u, bool full = false);
|
||||
E void common_unban(ChannelInfo *ci, const Anope::string &nick);
|
||||
|
||||
E BotInfo *BotServ;
|
||||
E BotInfo *ChanServ;
|
||||
@@ -52,10 +51,9 @@ E BotInfo *findbot(const Anope::string &nick);
|
||||
*/
|
||||
E Anope::string normalizeBuffer(const Anope::string &);
|
||||
|
||||
E void check_ban(ChannelInfo *ci, User *u, int ttbtype);
|
||||
E void bot_kick(ChannelInfo *ci, User *u, const char *message, ...);
|
||||
E void bot_raw_ban(User *requester, ChannelInfo *ci, const Anope::string &nick, const Anope::string &reason);
|
||||
E void bot_raw_kick(User *requester, ChannelInfo *ci, const Anope::string &nick, const Anope::string &reason);
|
||||
E void bot_raw_mode(User *requester, ChannelInfo *ci, const Anope::string &mode, const Anope::string &nick);
|
||||
|
||||
/**** channels.c ****/
|
||||
|
||||
@@ -65,6 +63,8 @@ E Channel *findchan(const Anope::string &chan);
|
||||
|
||||
E User *nc_on_chan(Channel *c, const NickCore *nc);
|
||||
|
||||
E int get_access_level(ChannelInfo *ci, NickAlias *na);
|
||||
E int get_access_level(ChannelInfo *ci, NickCore *nc);
|
||||
E Anope::string get_xop_level(int level);
|
||||
|
||||
E void do_cmode(const Anope::string &source, const Anope::string &channel, const Anope::string &modes, const Anope::string &ts);
|
||||
@@ -75,6 +75,18 @@ E void MassChannelModes(BotInfo *bi, const Anope::string &modes);
|
||||
|
||||
E void chan_set_correct_modes(User *user, Channel *c, int give_modes);
|
||||
|
||||
E Entry *entry_create(const Anope::string &mask);
|
||||
E Entry *entry_add(EList *list, const Anope::string &mask);
|
||||
E void entry_delete(EList *list, Entry *e);
|
||||
E EList *list_create();
|
||||
E int entry_match(Entry *e, const Anope::string &nick, const Anope::string &user, const Anope::string &host, uint32 ip);
|
||||
E int entry_match_mask(Entry *e, const Anope::string &mask, uint32 ip);
|
||||
E Entry *elist_match(EList *list, const Anope::string &nick, const Anope::string &user, const Anope::string &host, uint32 ip);
|
||||
E Entry *elist_match_mask(EList *list, const Anope::string &mask, uint32 ip);
|
||||
E Entry *elist_match_user(EList *list, User *u);
|
||||
E Entry *elist_find_mask(EList *list, const Anope::string &mask);
|
||||
E long get_memuse(EList *list);
|
||||
|
||||
inline BotInfo *whosends(ChannelInfo *ci)
|
||||
{
|
||||
if (!ci || !ci->bi || !ci->c || !ci->botflags.HasFlag(BS_SYMBIOSIS) || !ci->c->FindUser(ci->bi))
|
||||
@@ -91,7 +103,7 @@ E void get_chanserv_stats(long *nrec, long *memuse);
|
||||
E void reset_levels(ChannelInfo *ci);
|
||||
E void cs_init();
|
||||
E void expire_chans();
|
||||
E void cs_remove_nick(NickCore *nc);
|
||||
E void cs_remove_nick(const NickCore *nc);
|
||||
|
||||
E void check_modes(Channel *c);
|
||||
E int check_valid_admin(User *user, Channel *chan, int servermode);
|
||||
@@ -100,15 +112,19 @@ E int check_valid_op(User *user, Channel *chan, int servermode);
|
||||
E ChannelInfo *cs_findchan(const Anope::string &chan);
|
||||
E int check_access(User *user, ChannelInfo *ci, int what);
|
||||
E bool IsFounder(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, Anope::string &ret);
|
||||
E AutoKick *is_stuck(ChannelInfo *ci, const Anope::string &mask);
|
||||
E void stick_mask(ChannelInfo *ci, AutoKick *akick);
|
||||
E void stick_all(ChannelInfo *ci);
|
||||
|
||||
E int levelinfo_maxwidth;
|
||||
E Anope::string get_mlock_modes(ChannelInfo *ci, int complete);
|
||||
|
||||
/**** config.c ****/
|
||||
|
||||
E ConfigurationFile services_conf;
|
||||
E Anope::string services_conf;
|
||||
E ServerConfig *Config;
|
||||
|
||||
/* hostserv.c */
|
||||
@@ -118,6 +134,7 @@ E void HostServSyncVhosts(NickAlias *na);
|
||||
/**** encrypt.c ****/
|
||||
E int enc_encrypt(const Anope::string &src, Anope::string &dest);
|
||||
E int enc_decrypt(const Anope::string &src, Anope::string &dest);
|
||||
E int enc_check_password(Anope::string &plaintext, Anope::string &password);
|
||||
|
||||
/**** hostserv.c ****/
|
||||
E void get_hostserv_stats(long *nrec, long *memuse);
|
||||
@@ -134,17 +151,17 @@ E Uplink *uplink_server;
|
||||
/**** ircd.c ****/
|
||||
E void pmodule_ircd_proto(IRCDProto *);
|
||||
E void pmodule_ircd_var(IRCDVar *ircdvar);
|
||||
E void pmodule_ircd_message(IRCdMessage *message);
|
||||
|
||||
/**** language.cpp ****/
|
||||
E std::vector<Anope::string> languages;
|
||||
E void InitLanguages();
|
||||
E const Anope::string GetString(NickCore *nc, const char *string);
|
||||
E const Anope::string GetString(const Anope::string &domain, const Anope::string &lang, const char *string);
|
||||
E void PushLanguage(const Anope::string &, Anope::string);
|
||||
E void PopLanguage();
|
||||
E const char *anope_gettext(const char *string);
|
||||
E void SyntaxError(CommandSource &source, const Anope::string &command, const Anope::string &message);
|
||||
E const Anope::string GetString(const Anope::string &language, LanguageString string);
|
||||
E const Anope::string GetString(LanguageString string);
|
||||
E const Anope::string GetString(const NickCore *nc, LanguageString string);
|
||||
E const Anope::string GetString(const User *u, LanguageString string);
|
||||
E const Anope::string GetString(const char *domain, Anope::string language, const Anope::string &string);
|
||||
E Anope::string language_strings[LANG_STRING_COUNT];
|
||||
E void SyntaxError(BotInfo *bi, User *u, const Anope::string &command, LanguageString message);
|
||||
|
||||
/*** logger.cpp ***/
|
||||
E void InitLogChannels(ServerConfig *);
|
||||
@@ -187,54 +204,43 @@ class CoreExport UplinkSocket : public ConnectionSocket
|
||||
/**** memoserv.c ****/
|
||||
|
||||
E void ms_init();
|
||||
E void rsend_notify(CommandSource &source, Memo *m, const Anope::string &chan);
|
||||
E void rsend_notify(User *u, Memo *m, const Anope::string &chan);
|
||||
E void check_memos(User *u);
|
||||
E MemoInfo *getmemoinfo(const Anope::string &name, bool &ischan, bool &isforbid);
|
||||
E void memo_send(CommandSource &source, const Anope::string &name, const Anope::string &text, int z);
|
||||
E void memo_send(User *u, const Anope::string &name, const Anope::string &text, int z);
|
||||
|
||||
/**** messages.cpp ****/
|
||||
/**** messages.c ****/
|
||||
|
||||
E int m_nickcoll(const Anope::string &user);
|
||||
E int m_away(const Anope::string &source, const Anope::string &msg);
|
||||
E int m_kill(const Anope::string &nick, const Anope::string &msg);
|
||||
E int m_motd(const Anope::string &source);
|
||||
E int m_privmsg(const Anope::string &source, const Anope::string &receiver, const Anope::string &message);
|
||||
E bool m_stats(const Anope::string &source, const std::vector<Anope::string> &);
|
||||
E int m_whois(const Anope::string &source, const Anope::string &who);
|
||||
E bool m_time(const Anope::string &source, const std::vector<Anope::string> &);
|
||||
E bool m_version(const Anope::string &source, const std::vector<Anope::string> &);
|
||||
E void init_core_messages();
|
||||
|
||||
E bool OnStats(const Anope::string &source, const std::vector<Anope::string> &);
|
||||
E bool OnTime(const Anope::string &source, const std::vector<Anope::string> &);
|
||||
E bool OnVersion(const Anope::string &source, const std::vector<Anope::string> &);
|
||||
|
||||
E bool On436(const Anope::string &, const std::vector<Anope::string> &);
|
||||
E bool OnAway(const Anope::string &, const std::vector<Anope::string> &);
|
||||
E bool OnJoin(const Anope::string &, const std::vector<Anope::string> &);
|
||||
E bool OnKick(const Anope::string &, const std::vector<Anope::string> &);
|
||||
E bool OnKill(const Anope::string &, const std::vector<Anope::string> &);
|
||||
E bool OnMode(const Anope::string &, const std::vector<Anope::string> &);
|
||||
E bool OnNick(const Anope::string &, const std::vector<Anope::string> &);
|
||||
E bool OnUID(const Anope::string &, const std::vector<Anope::string> &);
|
||||
E bool OnPart(const Anope::string &, const std::vector<Anope::string> &);
|
||||
E bool OnPing(const Anope::string &, const std::vector<Anope::string> &);
|
||||
E bool OnPrivmsg(const Anope::string &, const std::vector<Anope::string> &);
|
||||
E bool OnQuit(const Anope::string &, const std::vector<Anope::string> &);
|
||||
E bool OnServer(const Anope::string &, const std::vector<Anope::string> &);
|
||||
E bool OnSQuit(const Anope::string &, const std::vector<Anope::string> &);
|
||||
E bool OnTopic(const Anope::string &, const std::vector<Anope::string> &);
|
||||
E bool OnWhois(const Anope::string &, const std::vector<Anope::string> &);
|
||||
E bool OnCapab(const Anope::string &, const std::vector<Anope::string> &);
|
||||
E bool OnSJoin(const Anope::string &, const std::vector<Anope::string> &);
|
||||
E bool OnError(const Anope::string &, const std::vector<Anope::string> &);
|
||||
|
||||
/**** misc.c ****/
|
||||
|
||||
E bool IsFile(const Anope::string &filename);
|
||||
E int toupper(char);
|
||||
E int tolower(char);
|
||||
E char *strscpy(char *d, const char *s, size_t len);
|
||||
#ifndef HAVE_STRLCPY
|
||||
E size_t strlcpy(char *, const char *, size_t);
|
||||
#endif
|
||||
#ifndef HAVE_STRLCAT
|
||||
E size_t strlcat(char *, const char *, size_t);
|
||||
#endif
|
||||
E char *strnrepl(char *s, int32 size, const char *old, const char *nstr);
|
||||
E const char *merge_args(int argc, char **argv);
|
||||
E const char *merge_args(int argc, const char **argv);
|
||||
|
||||
E time_t dotime(const Anope::string &s);
|
||||
E Anope::string duration(time_t seconds);
|
||||
E Anope::string expire_left(NickCore *nc, time_t expires);
|
||||
E Anope::string duration(const NickCore *nc, time_t seconds);
|
||||
E Anope::string expire_left(const NickCore *nc, time_t expires);
|
||||
E Anope::string do_strftime(const time_t &t);
|
||||
E bool doValidHost(const Anope::string &host, int type);
|
||||
|
||||
@@ -258,17 +264,25 @@ E char *str_signed(unsigned char *str);
|
||||
E std::list<Anope::string> BuildStringList(const Anope::string &, char = ' ');
|
||||
E std::vector<Anope::string> BuildStringVector(const Anope::string &, char = ' ');
|
||||
|
||||
E uint32 cidr_to_netmask(uint16 cidr);
|
||||
E uint16 netmask_to_cidr(uint32 mask);
|
||||
|
||||
E bool str_is_wildcard(const Anope::string &str);
|
||||
E bool str_is_pure_wildcard(const Anope::string &str);
|
||||
|
||||
E bool str_is_cidr(const Anope::string &str, uint32 &ip, uint32 &mask, Anope::string &host);
|
||||
|
||||
/**** modes.cpp ****/
|
||||
/* Number of generic modes we support */
|
||||
E unsigned GenericChannelModes, GenericUserModes;
|
||||
E std::multimap<ChannelModeName, ModeLock> def_mode_locks;
|
||||
E Flags<ChannelModeName, CMODE_END * 2> DefMLockOn;
|
||||
E Flags<ChannelModeName, CMODE_END * 2> DefMLockOff;
|
||||
E std::map<ChannelModeName, Anope::string> DefMLockParams;
|
||||
E void SetDefaultMLock(ServerConfig *config);
|
||||
|
||||
/**** nickserv.c ****/
|
||||
|
||||
E NickRequest *findrequestnick(const Anope::string &nick);
|
||||
E void get_aliases_stats(long &count, long &mem);
|
||||
E void get_core_stats(long &count, long &mem);
|
||||
E void change_core_display(NickCore *nc);
|
||||
@@ -278,12 +292,21 @@ E int do_setmodes(User *u);
|
||||
E void ns_init();
|
||||
E int validate_user(User *u);
|
||||
E void expire_nicks();
|
||||
E void expire_requests();
|
||||
E NickAlias *findnick(const Anope::string &nick);
|
||||
E NickCore *findcore(const Anope::string &nick);
|
||||
E bool is_on_access(const User *u, const NickCore *nc);
|
||||
|
||||
/**** process.c ****/
|
||||
|
||||
E int allow_ignore;
|
||||
E std::list<IgnoreData *> ignore;
|
||||
|
||||
E void add_ignore(const Anope::string &nick, time_t delta);
|
||||
E IgnoreData *get_ignore(const Anope::string &nick);
|
||||
E int delete_ignore(const Anope::string &nick);
|
||||
E int clear_ignores();
|
||||
|
||||
E void process(const Anope::string &buf);
|
||||
|
||||
/**** send.c ****/
|
||||
@@ -299,8 +322,8 @@ E std::vector<Exception *> exceptions;
|
||||
E void get_session_stats(long &count, long &mem);
|
||||
E void get_exception_stats(long &count, long &mem);
|
||||
|
||||
E void add_session(User *u);
|
||||
E void del_session(User *u);
|
||||
E void add_session(const Anope::string &nick, const Anope::string &host, const Anope::string &hostip);
|
||||
E void del_session(const Anope::string &host);
|
||||
|
||||
E void expire_exceptions();
|
||||
|
||||
@@ -327,14 +350,20 @@ E void get_user_stats(long &count, long &mem);
|
||||
|
||||
E User *finduser(const Anope::string &nick);
|
||||
|
||||
E Anope::string TS6SID;
|
||||
|
||||
E User *do_nick(const Anope::string &source, const Anope::string &nick, const Anope::string &username, const Anope::string &host, const Anope::string &server, const Anope::string &realname, time_t ts, const Anope::string &ip, const Anope::string &vhost, const Anope::string &uid, const Anope::string &modes);
|
||||
|
||||
E void do_umode(const Anope::string &user, const Anope::string &modes);
|
||||
E void do_kill(User *user, const Anope::string &reason);
|
||||
E void do_umode(const Anope::string &, const Anope::string &user, const Anope::string &modes);
|
||||
E void do_quit(const Anope::string &source, const Anope::string &reason);
|
||||
E void do_kill(const Anope::string &source, const Anope::string &reason);
|
||||
|
||||
E bool matches_list(Channel *c, User *user, ChannelModeName mode);
|
||||
E bool is_oper(User *user);
|
||||
|
||||
E bool is_excepted(ChannelInfo *ci, User *user);
|
||||
E bool is_excepted_mask(ChannelInfo *ci, const Anope::string &mask);
|
||||
|
||||
E bool match_usermask(const Anope::string &mask, User *user);
|
||||
E Anope::string create_mask(User *u);
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
+4
-4
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2011 InspIRCd Development Team
|
||||
* Copyright (C) 2009-2011 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.
|
||||
*
|
||||
@@ -170,7 +170,7 @@ namespace irc
|
||||
|
||||
/** Used to hash irc::strings for unordered_map
|
||||
*/
|
||||
struct CoreExport hash
|
||||
struct hash
|
||||
{
|
||||
/* VS 2008 specific code */
|
||||
enum { bucket_size = 4, min_buckets = 8 };
|
||||
@@ -241,7 +241,7 @@ namespace ci
|
||||
|
||||
/** Used to hash ci::strings for unordered_map
|
||||
*/
|
||||
struct CoreExport hash
|
||||
struct hash
|
||||
{
|
||||
/* VS 2008 specific code */
|
||||
enum { bucket_size = 4, min_buckets = 8 };
|
||||
|
||||
+1552
-115
File diff suppressed because it is too large
Load Diff
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "anope.h"
|
||||
|
||||
extern CoreExport bool Mail(User *u, NickRequest *nr, BotInfo *service, const Anope::string &subject, const Anope::string &message);
|
||||
extern CoreExport bool Mail(User *u, NickCore *nc, BotInfo *service, const Anope::string &subject, const Anope::string &message);
|
||||
extern CoreExport bool Mail(NickCore *nc, const Anope::string &subject, const Anope::string &message);
|
||||
extern CoreExport bool MailValidate(const Anope::string &email);
|
||||
|
||||
+84
-86
@@ -1,7 +1,7 @@
|
||||
/* Mode support
|
||||
*
|
||||
* Copyright (C) 2008-2011 Adam <Adam@anope.org>
|
||||
* Copyright (C) 2008-2011 Anope Team <team@anope.org>
|
||||
* 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.
|
||||
*/
|
||||
@@ -16,26 +16,14 @@ 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_WEBIRC, UMODE_WHOIS, UMODE_ADMIN, UMODE_DEAF,
|
||||
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_SOFTCALLERID, UMODE_CALLERID,
|
||||
UMODE_COMMONCHANS, UMODE_HIDDEN, UMODE_STRIPCOLOR, UMODE_INVISIBLE_OPER, UMODE_RESTRICTED,
|
||||
UMODE_SNOMASK, UMODE_VHOST, UMODE_WALLOPS, UMODE_CLOAK, UMODE_SSL, UMODE_CALLERID, UMODE_COMMONCHANS,
|
||||
UMODE_HIDDEN, UMODE_STRIPCOLOR, UMODE_INVISIBLE_OPER,
|
||||
|
||||
UMODE_END
|
||||
};
|
||||
|
||||
const Anope::string UserModeNameStrings[] = {
|
||||
"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_WEBIRC", "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_SOFTCALLERID", "UMODE_CALLERID",
|
||||
"UMODE_COMMONCHANS", "UMODE_HIDDEN", "UMODE_STRIPCOLOR", "UMODE_INVISIBLE_OPER", "UMODE_RESTRICTED"
|
||||
|
||||
""
|
||||
};
|
||||
|
||||
/** All of the valid channel mode names
|
||||
*/
|
||||
enum ChannelModeName
|
||||
@@ -48,7 +36,6 @@ enum ChannelModeName
|
||||
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,
|
||||
CMODE_BANDWIDTH,
|
||||
|
||||
/* b/e/I */
|
||||
CMODE_BAN, CMODE_EXCEPT,
|
||||
@@ -61,29 +48,6 @@ enum ChannelModeName
|
||||
CMODE_END
|
||||
};
|
||||
|
||||
const Anope::string ChannelModeNameStrings[] = {
|
||||
"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",
|
||||
"CMODE_BANDWIDTH",
|
||||
|
||||
/* b/e/I */
|
||||
"CMODE_BAN", "CMODE_EXCEPT",
|
||||
"CMODE_INVITEOVERRIDE",
|
||||
|
||||
/* v/h/o/a/q */
|
||||
"CMODE_VOICE", "CMODE_HALFOP", "CMODE_OP",
|
||||
"CMODE_PROTECT", "CMODE_OWNER",
|
||||
|
||||
""
|
||||
};
|
||||
|
||||
|
||||
/** The different types of modes
|
||||
*/
|
||||
enum ModeType
|
||||
@@ -115,6 +79,8 @@ class CoreExport Mode : public Base
|
||||
public:
|
||||
/* Class of mode this is */
|
||||
ModeClass Class;
|
||||
/* The mode name, as a string */
|
||||
Anope::string NameAsString;
|
||||
/* Mode char for this */
|
||||
char ModeChar;
|
||||
/* Type of mode this is */
|
||||
@@ -122,10 +88,11 @@ class CoreExport Mode : public Base
|
||||
|
||||
/** Default constructor
|
||||
* @param mClass The type of mode this is
|
||||
* @param mNameAsString The mode name as a string
|
||||
* @param modeChar The mode char
|
||||
* @param type The mode type
|
||||
*/
|
||||
Mode(ModeClass mClass, char modeChar, ModeType type);
|
||||
Mode(ModeClass mClass, const Anope::string &mNameAsString, char modeChar, ModeType type);
|
||||
|
||||
/** Default destructor
|
||||
*/
|
||||
@@ -142,17 +109,14 @@ class CoreExport UserMode : public Mode
|
||||
|
||||
/** Default constructor
|
||||
* @param nName The mode name
|
||||
* @param mNameAsString The mode name as a string
|
||||
* @param modeChar The mode char
|
||||
*/
|
||||
UserMode(UserModeName mName, char modeChar);
|
||||
UserMode(UserModeName mName, const Anope::string &mNameAsString, char modeChar);
|
||||
|
||||
/** Default destructor
|
||||
*/
|
||||
virtual ~UserMode();
|
||||
|
||||
/** Returns the mode name as a string
|
||||
*/
|
||||
const Anope::string NameAsString();
|
||||
};
|
||||
|
||||
class CoreExport UserModeParam : public UserMode
|
||||
@@ -160,9 +124,10 @@ class CoreExport UserModeParam : public UserMode
|
||||
public:
|
||||
/** Default constructor
|
||||
* @param mName The mode name
|
||||
* @param mNameAsString The mode name as a string
|
||||
* @param modeChar The mode char
|
||||
*/
|
||||
UserModeParam(UserModeName mName, char modeChar);
|
||||
UserModeParam(UserModeName mName, const Anope::string &mNameAsString, char modeChar);
|
||||
|
||||
/** Check if the param is valid
|
||||
* @param value The param
|
||||
@@ -181,9 +146,10 @@ class CoreExport ChannelMode : public Mode
|
||||
|
||||
/** Default constructor
|
||||
* @param mName The mode name
|
||||
* @param mNameAsString The mode name as a string
|
||||
* @param modeChar The mode char
|
||||
*/
|
||||
ChannelMode(ChannelModeName mName, char modeChar);
|
||||
ChannelMode(ChannelModeName mName, const Anope::string &mNameAsString, char modeChar);
|
||||
|
||||
/** Default destructor
|
||||
*/
|
||||
@@ -193,11 +159,7 @@ class CoreExport ChannelMode : public Mode
|
||||
* NOTE: User CAN be NULL, this is for checking if it can be locked with defcon
|
||||
* @param u The user, or NULL
|
||||
*/
|
||||
bool CanSet(User *u) const;
|
||||
|
||||
/** Returns the mode name as a string
|
||||
*/
|
||||
const Anope::string NameAsString();
|
||||
virtual bool CanSet(User *u) const { return true; }
|
||||
};
|
||||
|
||||
|
||||
@@ -208,9 +170,10 @@ class CoreExport ChannelModeList : public ChannelMode
|
||||
public:
|
||||
/** Default constructor
|
||||
* @param mName The mode name
|
||||
* @param mNameAsString The mode name as a string
|
||||
* @param modeChar The mode char
|
||||
*/
|
||||
ChannelModeList(ChannelModeName mName, char modeChar);
|
||||
ChannelModeList(ChannelModeName mName, const Anope::string &mNameAsString, char modeChar);
|
||||
|
||||
/** Default destructor
|
||||
*/
|
||||
@@ -222,25 +185,18 @@ class CoreExport ChannelModeList : public ChannelMode
|
||||
*/
|
||||
virtual bool IsValid(const Anope::string &mask) const { return true; }
|
||||
|
||||
/** Checks if mask affects user
|
||||
* Should only be used for extbans or other weird ircd-specific things.
|
||||
* @param u The user
|
||||
* @param e The entry to match against
|
||||
* @return true on match
|
||||
*/
|
||||
virtual bool Matches(User *u, const Entry *e) { return false; }
|
||||
|
||||
/** Called when a mask is added to a channel
|
||||
/** Add the mask to the channel, this should be overridden
|
||||
* @param chan The channel
|
||||
* @param mask The mask
|
||||
*/
|
||||
virtual void OnAdd(Channel *chan, const Anope::string &mask) { }
|
||||
virtual void AddMask(Channel *chan, const Anope::string &mask) { }
|
||||
|
||||
/** Called when a mask is removed from a channel
|
||||
/** Delete the mask from the channel, this should be overridden
|
||||
* @param chan The channel
|
||||
* @param mask The mask
|
||||
*/
|
||||
virtual void OnDel(Channel *chan, const Anope::string &mask) { }
|
||||
virtual void DelMask(Channel *chan, const Anope::string &mask) { }
|
||||
|
||||
};
|
||||
|
||||
/** This is a mode with a paramater, eg +k/l. These modes should use/inherit from this
|
||||
@@ -250,10 +206,11 @@ class CoreExport ChannelModeParam : public ChannelMode
|
||||
public:
|
||||
/** Default constructor
|
||||
* @param mName The mode name
|
||||
* @param mNameAsString The mode name as a string
|
||||
* @param modeChar The mode char
|
||||
* @param MinusArg true if this mode sends no arg when unsetting
|
||||
*/
|
||||
ChannelModeParam(ChannelModeName mName, char modeChar, bool MinusArg = false);
|
||||
ChannelModeParam(ChannelModeName mName, const Anope::string &mNameAsString, char modeChar, bool MinusArg = false);
|
||||
|
||||
/** Default destructor
|
||||
*/
|
||||
@@ -279,10 +236,11 @@ class CoreExport ChannelModeStatus : public ChannelMode
|
||||
|
||||
/** Default constructor
|
||||
* @param mName The mode name
|
||||
* @param mNameAsString The mode name as a string
|
||||
* @param modeChar The mode char
|
||||
* @param mSymbol The symbol for the mode, eg @ % +
|
||||
*/
|
||||
ChannelModeStatus(ChannelModeName mName, char modeChar, char mSymbol);
|
||||
ChannelModeStatus(ChannelModeName mName, const Anope::string &mNameAsString, char modeChar, char mSymbol);
|
||||
|
||||
/** Default destructor
|
||||
*/
|
||||
@@ -294,17 +252,54 @@ class CoreExport ChannelModeStatus : public ChannelMode
|
||||
class CoreExport ChannelModeBan : public ChannelModeList
|
||||
{
|
||||
public:
|
||||
ChannelModeBan(ChannelModeName mName, char modeChar) : ChannelModeList(mName, modeChar) { }
|
||||
ChannelModeBan(char modeChar) : ChannelModeList(CMODE_BAN, "CMODE_BAN", modeChar) { }
|
||||
|
||||
void OnAdd(Channel *chan, const Anope::string &mask);
|
||||
void AddMask(Channel *chan, const Anope::string &mask);
|
||||
|
||||
void DelMask(Channel *chan, const Anope::string &mask);
|
||||
};
|
||||
|
||||
/** Channel mode +e
|
||||
*/
|
||||
class CoreExport ChannelModeExcept : public ChannelModeList
|
||||
{
|
||||
public:
|
||||
ChannelModeExcept(char modeChar) : ChannelModeList(CMODE_EXCEPT, "CMODE_EXCEPT", modeChar) { }
|
||||
|
||||
void AddMask(Channel *chan, const Anope::string &mask);
|
||||
|
||||
void DelMask(Channel *chan, const Anope::string &mask);
|
||||
};
|
||||
|
||||
/** Channel mode +I
|
||||
*/
|
||||
class CoreExport ChannelModeInvex : public ChannelModeList
|
||||
{
|
||||
public:
|
||||
ChannelModeInvex(char modeChar) : ChannelModeList(CMODE_INVITEOVERRIDE, "CMODE_INVITEOVERRIDE", modeChar) { }
|
||||
|
||||
void AddMask(Channel *chan, const Anope::string &mask);
|
||||
|
||||
void DelMask(Channel *chan, const Anope::string &mask);
|
||||
};
|
||||
|
||||
|
||||
/** Channel mode +k (key)
|
||||
*/
|
||||
class CoreExport ChannelModeKey : public ChannelModeParam
|
||||
{
|
||||
public:
|
||||
ChannelModeKey(char modeChar) : ChannelModeParam(CMODE_KEY, modeChar) { }
|
||||
ChannelModeKey(char modeChar) : ChannelModeParam(CMODE_KEY, "CMODE_KEY", modeChar) { }
|
||||
|
||||
bool IsValid(const Anope::string &value) const;
|
||||
};
|
||||
|
||||
/** Channel mode +f (flood)
|
||||
*/
|
||||
class ChannelModeFlood : public ChannelModeParam
|
||||
{
|
||||
public:
|
||||
ChannelModeFlood(char modeChar, bool minusNoArg = false) : ChannelModeParam(CMODE_FLOOD, "CMODE_FLOOD", modeChar, minusNoArg) { }
|
||||
|
||||
bool IsValid(const Anope::string &value) const;
|
||||
};
|
||||
@@ -315,7 +310,7 @@ class CoreExport ChannelModeKey : public ChannelModeParam
|
||||
class CoreExport ChannelModeAdmin : public ChannelMode
|
||||
{
|
||||
public:
|
||||
ChannelModeAdmin(char modeChar) : ChannelMode(CMODE_ADMINONLY, modeChar) { }
|
||||
ChannelModeAdmin(char modeChar) : ChannelMode(CMODE_ADMINONLY, "CMODE_ADMINONLY", modeChar) { }
|
||||
|
||||
/* Opers only */
|
||||
bool CanSet(User *u) const;
|
||||
@@ -327,7 +322,7 @@ class CoreExport ChannelModeAdmin : public ChannelMode
|
||||
class CoreExport ChannelModeOper : public ChannelMode
|
||||
{
|
||||
public:
|
||||
ChannelModeOper(char modeChar) : ChannelMode(CMODE_OPERONLY, modeChar) { }
|
||||
ChannelModeOper(char modeChar) : ChannelMode(CMODE_OPERONLY, "CMODE_OPERONLY", modeChar) { }
|
||||
|
||||
/* Opers only */
|
||||
bool CanSet(User *u) const;
|
||||
@@ -339,7 +334,7 @@ class CoreExport ChannelModeOper : public ChannelMode
|
||||
class CoreExport ChannelModeRegistered : public ChannelMode
|
||||
{
|
||||
public:
|
||||
ChannelModeRegistered(char modeChar) : ChannelMode(CMODE_REGISTERED, modeChar) { }
|
||||
ChannelModeRegistered(char modeChar) : ChannelMode(CMODE_REGISTERED, "CMODE_REGISTERED", modeChar) { }
|
||||
|
||||
/* No one mlocks +r */
|
||||
bool CanSet(User *u) const;
|
||||
@@ -406,9 +401,18 @@ class CoreExport ModeManager
|
||||
static void StackerAddInternal(BotInfo *bi, Base *Object, Mode *mode, bool Set, const Anope::string &Param, StackerType Type);
|
||||
|
||||
public:
|
||||
/* List of all modes Anope knows about */
|
||||
static std::vector<ChannelMode *> ChannelModes;
|
||||
static std::vector<UserMode *> UserModes;
|
||||
/* List of all modes Anope knows about */
|
||||
static std::map<Anope::string, Mode *> Modes;
|
||||
|
||||
/* 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.
|
||||
*/
|
||||
|
||||
/** Add a user mode to Anope
|
||||
* @param um A UserMode or UserMode derived class
|
||||
@@ -446,17 +450,11 @@ class CoreExport ModeManager
|
||||
*/
|
||||
static UserMode *FindUserModeByName(UserModeName Name);
|
||||
|
||||
/** Find channel mode by string
|
||||
/** Find a mode by name
|
||||
* @param name The mode name
|
||||
* @return The mode
|
||||
*/
|
||||
static ChannelMode *FindChannelModeByString(const Anope::string &name);
|
||||
|
||||
/** Find user mode by string
|
||||
* @param name The mode name
|
||||
* @return The mode
|
||||
*/
|
||||
static UserMode *FindUserModeByString(const Anope::string &name);
|
||||
static Mode *FindModeByName(const Anope::string &name);
|
||||
|
||||
/** Gets the channel mode char for a symbol (eg + returns v)
|
||||
* @param Value The symbol
|
||||
|
||||
@@ -4,5 +4,6 @@
|
||||
#include "services.h"
|
||||
#include "commands.h"
|
||||
#include "modules.h"
|
||||
#define _(x) x
|
||||
|
||||
#endif // MODULE_H
|
||||
|
||||
+79
-126
@@ -1,9 +1,9 @@
|
||||
/* Modular support
|
||||
*
|
||||
* (C) 2003-2011 Anope Team
|
||||
* (C) 2003-2010 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
* 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.
|
||||
@@ -165,9 +165,9 @@ extern CoreExport std::list<Module *> Modules;
|
||||
class Version
|
||||
{
|
||||
private:
|
||||
int Major;
|
||||
int Minor;
|
||||
int Build;
|
||||
unsigned Major;
|
||||
unsigned Minor;
|
||||
unsigned Build;
|
||||
|
||||
public:
|
||||
/** Constructor
|
||||
@@ -175,7 +175,7 @@ class Version
|
||||
* @param vMinor The minor version numbber
|
||||
* @param vBuild The build version numbber
|
||||
*/
|
||||
Version(int vMajor, int vMinor, int vBuild);
|
||||
Version(unsigned vMajor, unsigned vMinor, unsigned vBuild);
|
||||
|
||||
/** Destructor
|
||||
*/
|
||||
@@ -184,17 +184,17 @@ class Version
|
||||
/** Get the major version of Anope this was built against
|
||||
* @return The major version
|
||||
*/
|
||||
int GetMajor() const;
|
||||
unsigned GetMajor() const;
|
||||
|
||||
/** Get the minor version of Anope this was built against
|
||||
* @return The minor version
|
||||
*/
|
||||
int GetMinor() const;
|
||||
unsigned GetMinor() const;
|
||||
|
||||
/** Get the build version this was built against
|
||||
* @return The build version
|
||||
*/
|
||||
int GetBuild() const;
|
||||
unsigned GetBuild() const;
|
||||
};
|
||||
|
||||
/* Forward declaration of CallBack class for the Module class */
|
||||
@@ -284,10 +284,11 @@ class CoreExport Module : public Extensible
|
||||
Version GetVersion() const;
|
||||
|
||||
/** Send a message to a user in their language, if a translation is available
|
||||
* @param source The source of the message
|
||||
* @param from Client to send the message from
|
||||
* @param to User to send the message to
|
||||
* @param fmt The message
|
||||
*/
|
||||
void SendMessage(CommandSource &source, const char *fmt, ...);
|
||||
void SendMessage(BotInfo *from, User *to, const char *fmt, ...);
|
||||
|
||||
/**
|
||||
* Add a module provided command to the given service.
|
||||
@@ -364,25 +365,27 @@ class CoreExport Module : public Extensible
|
||||
* @param bi The bot the command is being run from
|
||||
* @param command The command
|
||||
* @param message The parameters used for the command
|
||||
* @param ci If a tanasy command, the channel the comman was used on
|
||||
* @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(User *&u, BotInfo *&bi, Anope::string &command, Anope::string &message, ChannelInfo *&ci) { return EVENT_CONTINUE; }
|
||||
virtual EventReturn OnPreCommandRun(User *u, BotInfo *bi, const Anope::string &command, const Anope::string &message, Command *c) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called before a command is due to be executed.
|
||||
* @param source The source of the command
|
||||
* @param u The user executing the command
|
||||
* @param service The service the command is associated with
|
||||
* @param command The command the user is executing
|
||||
* @param params The parameters the user is sending
|
||||
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to halt the command and not process it
|
||||
*/
|
||||
virtual EventReturn OnPreCommand(CommandSource &source, Command *command, const std::vector<Anope::string> ¶ms) { return EVENT_CONTINUE; }
|
||||
virtual EventReturn OnPreCommand(User *u, BotInfo *service, const Anope::string &command, const std::vector<Anope::string> ¶ms) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called after a command has been executed.
|
||||
* @param source The source of the command
|
||||
* @param u The user executing the command
|
||||
* @param service The service the command is associated with
|
||||
* @param command The command the user executed
|
||||
* @param params The parameters the user sent
|
||||
*/
|
||||
virtual void OnPostCommand(CommandSource &source, Command *command, const std::vector<Anope::string> ¶ms) { }
|
||||
virtual void OnPostCommand(User *u, BotInfo *service, const Anope::string &command, const std::vector<Anope::string> ¶ms) { }
|
||||
|
||||
/** Called after the core has finished loading the databases, but before
|
||||
* we connect to the server
|
||||
@@ -404,6 +407,7 @@ class CoreExport Module : public Extensible
|
||||
*/
|
||||
virtual EventReturn OnEncrypt(const Anope::string &src, Anope::string &dest) { return EVENT_CONTINUE; }
|
||||
virtual EventReturn OnDecrypt(const Anope::string &hashm, const Anope::string &src, Anope::string &dest) { return EVENT_CONTINUE; }
|
||||
virtual EventReturn OnCheckPassword(const Anope::string &hashm, Anope::string &plaintext, Anope::string &password) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called on fantasy command
|
||||
* @param command The command
|
||||
@@ -422,10 +426,10 @@ class CoreExport Module : public Extensible
|
||||
virtual void OnBotNoFantasyAccess(const Anope::string &command, User *u, ChannelInfo *ci, const Anope::string ¶ms) { }
|
||||
|
||||
/** Called after a bot joins a channel
|
||||
* @param c The channel
|
||||
* @param ci The channael
|
||||
* @param bi The bot
|
||||
*/
|
||||
virtual void OnBotJoin(Channel *c, BotInfo *bi) { }
|
||||
virtual void OnBotJoin(ChannelInfo *ci, BotInfo *bi) { }
|
||||
|
||||
/** Called when a bot places a ban
|
||||
* @param u User being banned
|
||||
@@ -446,11 +450,6 @@ class CoreExport Module : public Extensible
|
||||
*/
|
||||
virtual void OnBadWordDel(ChannelInfo *ci, BadWord *bw) { }
|
||||
|
||||
/** Called in findbot()
|
||||
* @param nick The nick being looked up
|
||||
*/
|
||||
virtual void OnFindBot(const Anope::string &nick) { }
|
||||
|
||||
/** Called before a bot kicks a user
|
||||
* @param bi The bot sending the kick
|
||||
* @param c The channel the user is being kicked on
|
||||
@@ -499,10 +498,10 @@ class CoreExport Module : public Extensible
|
||||
*/
|
||||
virtual EventReturn OnPreChanExpire(ChannelInfo *ci) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called before a channel expires
|
||||
* @param ci The channel
|
||||
/** Called when a channel expires
|
||||
* @param chname The channel name
|
||||
*/
|
||||
virtual void OnChanExpire(ChannelInfo *ci) { }
|
||||
virtual void OnChanExpire(const Anope::string &chname) { }
|
||||
|
||||
/** Called before Anope connects to its uplink
|
||||
* @param u The uplink we're going to connect to
|
||||
@@ -560,6 +559,14 @@ class CoreExport Module : public Extensible
|
||||
*/
|
||||
virtual EventReturn OnDatabaseReadMetadata(NickAlias *na, const Anope::string &key, const std::vector<Anope::string> ¶ms) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called when nickrequest metadata is read from the database
|
||||
* @param nr The nickrequest
|
||||
* @parm 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(NickRequest *nr, const Anope::string &key, const std::vector<Anope::string> ¶ms) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called when botinfo metadata is read from the database
|
||||
* @param bi The botinfo
|
||||
* @param key The metadata key
|
||||
@@ -588,6 +595,12 @@ class CoreExport Module : public Extensible
|
||||
*/
|
||||
virtual void OnDatabaseWriteMetadata(void (*WriteMetadata)(const Anope::string &, const Anope::string &), NickAlias *na) { }
|
||||
|
||||
/** Called when we are wrting metadata for a nickrequest
|
||||
* @param WriteMetata A callback function used to insert the metadata
|
||||
* @param nr The nick request
|
||||
*/
|
||||
virtual void OnDatabaseWriteMetadata(void (*WriteMetadata)(const Anope::string &, const Anope::string &), NickRequest *nr) { }
|
||||
|
||||
/** Called when we are writing metadata for a botinfo
|
||||
* @param WriteMetata A callback function used to insert the metadata
|
||||
* @param bi The botinfo
|
||||
@@ -713,23 +726,25 @@ class CoreExport Module : public Extensible
|
||||
/** Called when access is deleted from a channel
|
||||
* @param ci The channel
|
||||
* @param u The user who removed the access
|
||||
* @param access The access entry being removed
|
||||
* @param nc The user who was deleted
|
||||
*/
|
||||
virtual void OnAccessDel(ChannelInfo *ci, User *u, ChanAccess *access) { }
|
||||
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 u access The access changed
|
||||
* @param nc The nick whos access was changed
|
||||
* @param level The level of the new access
|
||||
*/
|
||||
virtual void OnAccessChange(ChannelInfo *ci, User *u, ChanAccess *access) { }
|
||||
virtual void OnAccessChange(ChannelInfo *ci, User *u, NickCore *nc, int level) { }
|
||||
|
||||
/** Called when access is added
|
||||
* @param ci The channel
|
||||
* @param u The user who added the access
|
||||
* @param access The access changed
|
||||
* @para nc The nick who was added to access
|
||||
* @param level The level they were added at
|
||||
*/
|
||||
virtual void OnAccessAdd(ChannelInfo *ci, User *u, ChanAccess *access) { }
|
||||
virtual void OnAccessAdd(ChannelInfo *ci, User *u, NickCore *nc, int level) { }
|
||||
|
||||
/** Called when the access list is cleared
|
||||
* @param ci The channel
|
||||
@@ -800,22 +815,16 @@ class CoreExport Module : public Extensible
|
||||
virtual void OnAkickDel(User *u, ChannelInfo *ci, AutoKick *ak) { }
|
||||
|
||||
/** Called when a user requests info for a channel
|
||||
* @param source The user requesting info
|
||||
* @param u The user requesting info
|
||||
* @param ci The channel the user is requesting info for
|
||||
* @param ShowHidden true if we should show the user everything
|
||||
*/
|
||||
virtual void OnChanInfo(CommandSource &source, ChannelInfo *ci, bool ShowHidden) { }
|
||||
|
||||
/** Called on cs_findchan()
|
||||
* @param chname The name being looked up
|
||||
*/
|
||||
virtual void OnFindChan(const Anope::string &chname) { }
|
||||
virtual void OnChanInfo(User *u, ChannelInfo *ci, bool ShowHidden) { }
|
||||
|
||||
/** Called when a nick is dropped
|
||||
* @param u The user dropping the nick
|
||||
* @param na The nick
|
||||
* @param nick The nick
|
||||
*/
|
||||
virtual void OnNickDrop(User *u, NickAlias *na) { }
|
||||
virtual void OnNickDrop(const Anope::string &nick) { }
|
||||
|
||||
/** Called when a nick is forbidden
|
||||
* @param na The nick alias of the forbidden nick
|
||||
@@ -869,6 +878,16 @@ class CoreExport Module : public Extensible
|
||||
*/
|
||||
virtual void OnChangeCoreDisplay(NickCore *nc, const Anope::string &newdisplay) { }
|
||||
|
||||
/** called from ns_register.c, after the NickRequest have been created
|
||||
* @param nr pointer to the NickRequest
|
||||
*/
|
||||
virtual void OnMakeNickRequest(NickRequest *nr) { }
|
||||
|
||||
/** called on delnickrequest()
|
||||
* @param nr pointer to the NickRequest
|
||||
*/
|
||||
virtual void OnDelNickRequest(NickRequest *nr) { }
|
||||
|
||||
/** called from NickCore::ClearAccess()
|
||||
* @param nc pointer to the NickCore
|
||||
*/
|
||||
@@ -886,57 +905,12 @@ class CoreExport Module : public Extensible
|
||||
*/
|
||||
virtual void OnNickEraseAccess(NickCore *nc, const Anope::string &entry) { }
|
||||
|
||||
/** called from NickCore::ClearCert()
|
||||
* @param nc pointer to the NickCore
|
||||
*/
|
||||
virtual void OnNickClearCert(NickCore *nc) { }
|
||||
|
||||
/** Called when a user adds an entry to their cert list
|
||||
* @param nc The nick
|
||||
* @param entry The entry
|
||||
*/
|
||||
virtual void OnNickAddCert(NickCore *nc, const Anope::string &entry) { }
|
||||
|
||||
/** Called from NickCore::EraseCert()
|
||||
* @param nc pointer to the NickCore
|
||||
* @param entry The fingerprint
|
||||
*/
|
||||
virtual void OnNickEraseCert(NickCore *nc, const Anope::string &entry) { }
|
||||
|
||||
/** Called when a user requests info for a nick
|
||||
* @param source The user requesting info
|
||||
* @param u The user requesting info
|
||||
* @param na The nick the user is requesting info from
|
||||
* @param ShowHidden true if we should show the user everything
|
||||
*/
|
||||
virtual void OnNickInfo(CommandSource &source, NickAlias *na, bool ShowHidden) { }
|
||||
|
||||
/** Called in findnick()
|
||||
* Useful to modify the na returned by findnick()
|
||||
* @param nick The nick being looked up
|
||||
*/
|
||||
virtual void OnFindNick(const Anope::string &nick) { }
|
||||
|
||||
/** Called in findcore()
|
||||
* Useful to modify the nc returned by findcore()
|
||||
* @param nick The nick being looked up
|
||||
*/
|
||||
virtual void OnFindCore(const Anope::string &nick) { }
|
||||
|
||||
/** Check whether a users password is correct.
|
||||
* @param u The user
|
||||
* @param command The command the user is doing
|
||||
* @param params Command params
|
||||
* @param account The account the password should be checked against
|
||||
* @param password The password
|
||||
* @return EVENT_ALLOW to allow the password, EVENT_STOP to stop processing completely
|
||||
*/
|
||||
virtual EventReturn OnCheckAuthentication(User *u, Command *c, const std::vector<Anope::string> ¶ms, const Anope::string &account, const Anope::string &password) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called when we get informed about a users SSL fingerprint
|
||||
* when we call this, the fingerprint should already be stored in the user struct
|
||||
* @param u pointer to the user
|
||||
*/
|
||||
virtual void OnFingerprint(User *u) { }
|
||||
virtual void OnNickInfo(User *u, NickAlias *na, bool ShowHidden) { }
|
||||
|
||||
/** Called when a vhost is deleted
|
||||
* @param na The nickalias of the vhost
|
||||
@@ -1017,18 +991,20 @@ class CoreExport Module : public Extensible
|
||||
virtual void OnUserModeAdd(UserMode *um) { }
|
||||
|
||||
/** Called when a mode is about to be mlocked
|
||||
* @param ci The channel the mode is being locked on
|
||||
* @param lock The mode lock
|
||||
* @param ci The channel
|
||||
* @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(ChannelInfo *ci, ModeLock *lock) { return EVENT_CONTINUE; }
|
||||
virtual EventReturn OnMLock(ChannelInfo *ci, ChannelModeName Name, bool status, const Anope::string ¶m) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called when a mode is about to be unlocked
|
||||
* @param ci The channel the mode is being unlocked from
|
||||
* @param mode The mode being unlocked
|
||||
* @param ci The channel
|
||||
* @param Name The mode being mlocked
|
||||
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to deny the mlock.
|
||||
*/
|
||||
virtual EventReturn OnUnMLock(ChannelInfo *ci, ChannelMode *mode, const Anope::string ¶m) { return EVENT_CONTINUE; }
|
||||
virtual EventReturn OnUnMLock(ChannelInfo *ci, ChannelModeName Name) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called after a module is loaded
|
||||
* @param u The user loading the module, can be NULL
|
||||
@@ -1051,28 +1027,6 @@ class CoreExport Module : public Extensible
|
||||
* @param s Our uplink
|
||||
*/
|
||||
virtual void OnUplinkSync(Server *s) { }
|
||||
|
||||
/** Called when we receive a PRIVMSG for one of our clients
|
||||
* @param u The user sending the PRIVMSG
|
||||
* @param bi The target of the PRIVMSG
|
||||
* @param message The message
|
||||
* @return EVENT_STOP to halt processing
|
||||
*/
|
||||
virtual EventReturn OnBotPrivmsg(User *u, BotInfo *bi, const Anope::string &message) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called when we receive a PRIVMSG for a registered channel we are in
|
||||
* @param u The source of the message
|
||||
* @param ci The channel
|
||||
* @param msg The message
|
||||
* @param Allow set to false to make the flood kickers halt
|
||||
* @return MOD_STOP to stop processing completely
|
||||
*/
|
||||
virtual EventReturn OnPrivmsg(User *u, ChannelInfo *ci, Anope::string &msg, bool &Allow) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called when any object is destroyed
|
||||
* @param b The object
|
||||
*/
|
||||
virtual void OnObjectDestroy(Base *b) { }
|
||||
};
|
||||
|
||||
/** Implementation-specific flags which may be set in ModuleManager::Attach()
|
||||
@@ -1084,19 +1038,18 @@ enum Implementation
|
||||
I_OnPreNickExpire, I_OnNickExpire, I_OnNickForbidden, I_OnNickGroup, I_OnNickLogout, I_OnNickIdentify, I_OnNickDrop,
|
||||
I_OnNickRegister, I_OnNickSuspended, I_OnNickUnsuspended,
|
||||
I_OnDelNick, I_OnDelCore, I_OnChangeCoreDisplay,
|
||||
I_OnNickClearAccess, I_OnNickAddAccess, I_OnNickEraseAccess,
|
||||
I_OnNickClearCert, I_OnNickAddCert, I_OnNickEraseCert,
|
||||
I_OnNickInfo, I_OnFindNick, I_OnFindCore, I_OnCheckAuthentication,
|
||||
I_OnDelNickRequest, I_OnMakeNickRequest, I_OnNickClearAccess, I_OnNickAddAccess, I_OnNickEraseAccess,
|
||||
I_OnNickInfo,
|
||||
|
||||
/* ChanServ */
|
||||
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,
|
||||
I_OnChanInfo, I_OnFindChan,
|
||||
I_OnChanInfo,
|
||||
|
||||
/* BotServ */
|
||||
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, I_OnFindBot,
|
||||
I_OnUserKicked, I_OnBotFantasy, I_OnBotNoFantasyAccess, I_OnBotBan, I_OnBadWordAdd, I_OnBadWordDel,
|
||||
|
||||
/* HostServ */
|
||||
I_OnSetVhost, I_OnDeleteVhost,
|
||||
@@ -1106,7 +1059,7 @@ enum Implementation
|
||||
|
||||
/* Users */
|
||||
I_OnPreUserConnect, I_OnUserConnect, I_OnUserNickChange, I_OnUserQuit, I_OnUserLogoff, I_OnPreJoinChannel,
|
||||
I_OnJoinChannel, I_OnPrePartChannel, I_OnPartChannel, I_OnFingerprint,
|
||||
I_OnJoinChannel, I_OnPrePartChannel, I_OnPartChannel,
|
||||
|
||||
/* OperServ */
|
||||
I_OnDefconLevel, I_OnAddAkill, I_OnDelAkill, I_OnExceptionAdd, I_OnExceptionDel,
|
||||
@@ -1124,9 +1077,9 @@ enum Implementation
|
||||
I_OnReload, I_OnPreServerConnect, I_OnNewServer, I_OnServerConnect, I_OnPreUplinkSync, 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_OnDecrypt,
|
||||
I_OnEncrypt, 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_OnBotPrivmsg, I_OnPrivmsg, I_OnObjectDestroy,
|
||||
I_OnMLock, I_OnUnMLock, I_OnServerSync, I_OnUplinkSync,
|
||||
I_END
|
||||
};
|
||||
|
||||
|
||||
+6
-8
@@ -1,6 +1,6 @@
|
||||
/* OperServ support
|
||||
*
|
||||
* (C) 2008-2011 Anope Team
|
||||
* (C) 2008-2010 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
@@ -180,10 +180,8 @@ class CoreExport XLineManager
|
||||
virtual void OnExpire(XLine *x);
|
||||
|
||||
/** Called to send an XLine to the IRCd
|
||||
* @param u The user, if we know it
|
||||
* @param x The xline
|
||||
*/
|
||||
virtual void Send(User *u, XLine *x) = 0;
|
||||
virtual void Send(XLine *x) = 0;
|
||||
};
|
||||
|
||||
/* This is for AKILLS */
|
||||
@@ -198,7 +196,7 @@ class SGLineManager : public XLineManager
|
||||
|
||||
void OnExpire(XLine *x);
|
||||
|
||||
void Send(User *u, XLine *x);
|
||||
void Send(XLine *x);
|
||||
};
|
||||
|
||||
class SNLineManager : public XLineManager
|
||||
@@ -212,7 +210,7 @@ class SNLineManager : public XLineManager
|
||||
|
||||
void OnExpire(XLine *x);
|
||||
|
||||
void Send(User *u, XLine *x);
|
||||
void Send(XLine *x);
|
||||
|
||||
XLine *Check(User *u);
|
||||
};
|
||||
@@ -228,7 +226,7 @@ class SQLineManager : public XLineManager
|
||||
|
||||
void OnExpire(XLine *x);
|
||||
|
||||
void Send(User *u, XLine *x);
|
||||
void Send(XLine *x);
|
||||
|
||||
static bool Check(Channel *c);
|
||||
};
|
||||
@@ -244,7 +242,7 @@ class SZLineManager : public XLineManager
|
||||
|
||||
void OnExpire(XLine *x);
|
||||
|
||||
void Send(User *u, XLine *x);
|
||||
void Send(XLine *x);
|
||||
};
|
||||
|
||||
#endif // OPERSERV_H
|
||||
|
||||
+2
-37
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2011 Robin Burchell <w00t@inspircd.org>
|
||||
* Copyright (C) 2008-2011 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.
|
||||
*/
|
||||
@@ -10,25 +10,6 @@
|
||||
|
||||
#include "hashcomp.h"
|
||||
|
||||
class OperType;
|
||||
|
||||
struct Oper
|
||||
{
|
||||
Anope::string name;
|
||||
Anope::string password;
|
||||
Anope::string certfp;
|
||||
OperType *ot;
|
||||
|
||||
Oper(const Anope::string &n, const Anope::string &p, const Anope::string &c, OperType *o) :
|
||||
name(n), password(p), certfp(c), ot(o) { }
|
||||
|
||||
/** Find an oper block by name
|
||||
* @param name The name
|
||||
* @return the oper block
|
||||
*/
|
||||
static Oper *Find(const Anope::string &name);
|
||||
};
|
||||
|
||||
class CoreExport OperType
|
||||
{
|
||||
private:
|
||||
@@ -55,12 +36,6 @@ class CoreExport OperType
|
||||
*/
|
||||
std::set<OperType *> inheritances;
|
||||
public:
|
||||
/** Find an oper type by name
|
||||
* @param name The name
|
||||
* @return The oper type
|
||||
*/
|
||||
static OperType *Find(const Anope::string &name);
|
||||
|
||||
/** Create a new opertype of the given name.
|
||||
* @param nname The opertype name, e.g. "sra".
|
||||
*/
|
||||
@@ -96,16 +71,6 @@ class CoreExport OperType
|
||||
* @param ot The opertype to inherit from
|
||||
*/
|
||||
void Inherits(OperType *ot);
|
||||
|
||||
/** Gets the icommands for this opertype
|
||||
* @return A list of commands
|
||||
*/
|
||||
const std::list<Anope::string> &GetCommands() const;
|
||||
|
||||
/** Gets the privileges for this opertype
|
||||
* @return A list of privileges
|
||||
*/
|
||||
const std::list<Anope::string> &GetPrivs() const;
|
||||
};
|
||||
|
||||
#endif // OPERTYPE_H
|
||||
|
||||
+33
-122
@@ -1,6 +1,6 @@
|
||||
/* Modular support
|
||||
*
|
||||
* (C) 2008-2011 Anope Team
|
||||
* (C) 2008-2010 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
@@ -62,70 +62,15 @@ enum ChannelInfoFlag
|
||||
CI_END
|
||||
};
|
||||
|
||||
const Anope::string ChannelInfoFlagStrings[] = {
|
||||
"BEGIN", "INHABIT", "KEEPTOPIC", "SECUREOPS", "PRIVATE", "TOPICLOCK", "RESTRICTED",
|
||||
"PEACE", "SECURE", "FORBIDDEN", "NO_EXPIRE", "MEMO_HARDMAX", "OPNOTICE", "SECUREFOUNDER",
|
||||
"SIGNKICK", "SIGNKICK_LEVEL", "XOP", "SUSPENDED", "PERSIST", ""
|
||||
};
|
||||
|
||||
class CoreExport ChanAccess
|
||||
{
|
||||
Anope::string mask; /* Mask of the access entry */
|
||||
public:
|
||||
int16 level;
|
||||
NickCore *nc; /* NC of the entry, if the entry is a valid nickcore */
|
||||
time_t last_seen;
|
||||
Anope::string creator;
|
||||
|
||||
ChanAccess(const Anope::string &umask);
|
||||
const Anope::string &GetMask();
|
||||
};
|
||||
|
||||
/** Flags for auto kick
|
||||
*/
|
||||
enum AutoKickFlag
|
||||
{
|
||||
/* Is by nick core, not mask */
|
||||
AK_ISNICK
|
||||
};
|
||||
|
||||
const Anope::string AutoKickFlagString[] = { "AK_ISNICK", "" };
|
||||
|
||||
/* AutoKick data. */
|
||||
class AutoKick : public Flags<AutoKickFlag>
|
||||
{
|
||||
public:
|
||||
AutoKick() : Flags<AutoKickFlag>(AutoKickFlagString) { }
|
||||
/* Only one of these can be in use */
|
||||
Anope::string mask;
|
||||
NickCore *nc;
|
||||
|
||||
Anope::string reason;
|
||||
Anope::string creator;
|
||||
time_t addtime;
|
||||
time_t last_used;
|
||||
};
|
||||
|
||||
struct ModeLock
|
||||
{
|
||||
bool set;
|
||||
ChannelModeName name;
|
||||
Anope::string param;
|
||||
Anope::string setter;
|
||||
time_t created;
|
||||
|
||||
ModeLock(bool s, ChannelModeName n, const Anope::string &p, const Anope::string &se = "", time_t c = Anope::CurTime) : set(s), name(n), param(p), setter(se), created(c) { }
|
||||
};
|
||||
|
||||
class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag, CI_END>
|
||||
{
|
||||
private:
|
||||
typedef std::multimap<ChannelModeName, ModeLock> ModeList;
|
||||
private:
|
||||
std::map<ChannelModeName, Anope::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 */
|
||||
ModeList mode_locks;
|
||||
Flags<ChannelModeName, CMODE_END * 2> mlock_on; /* Modes mlocked on */
|
||||
Flags<ChannelModeName, CMODE_END * 2> mlock_off; /* Modes mlocked off */
|
||||
|
||||
public:
|
||||
/** Default constructor
|
||||
@@ -133,11 +78,6 @@ class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag,
|
||||
*/
|
||||
ChannelInfo(const Anope::string &chname);
|
||||
|
||||
/** Copy constructor
|
||||
* @param ci The ChannelInfo to copy settings to
|
||||
*/
|
||||
ChannelInfo(ChannelInfo *ci);
|
||||
|
||||
/** Default destructor
|
||||
*/
|
||||
~ChannelInfo();
|
||||
@@ -154,13 +94,14 @@ class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag,
|
||||
Anope::string last_topic_setter; /* Setter */
|
||||
time_t last_topic_time; /* Time */
|
||||
|
||||
// These two should be using extensible
|
||||
Anope::string forbidby;
|
||||
Anope::string forbidreason;
|
||||
|
||||
int16 bantype;
|
||||
int16 *levels; /* Access levels for commands */
|
||||
|
||||
Anope::string entry_message; /* Notice sent on entering channel */
|
||||
|
||||
MemoInfo memos;
|
||||
|
||||
Channel *c; /* Pointer to channel record (if channel is currently in use) */
|
||||
@@ -177,15 +118,14 @@ class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag,
|
||||
|
||||
/** Add an entry to the channel access list
|
||||
*
|
||||
* @param mask The mask of the access entry
|
||||
* @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
|
||||
* @return The new access class
|
||||
*
|
||||
* Creates a new access list entry and inserts it into the access list.
|
||||
*/
|
||||
ChanAccess *AddAccess(const Anope::string &mask, int16 level, const Anope::string &creator, int32 last_seen = 0);
|
||||
void AddAccess(NickCore *nc, int16 level, const Anope::string &creator, int32 last_seen = 0);
|
||||
|
||||
/** Get an entry from the channel access list by index
|
||||
*
|
||||
@@ -196,36 +136,15 @@ class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag,
|
||||
*/
|
||||
ChanAccess *GetAccess(unsigned index);
|
||||
|
||||
/** Get an entry from the channel access list by User
|
||||
*
|
||||
* @param u The User to find within the access list vector
|
||||
* @param level Optional channel access level to compare the access entries to
|
||||
* @return A ChanAccess struct corresponding to the User, or NULL if not found
|
||||
*
|
||||
* Retrieves an entry from the access list that matches the given User, optionally also matching a certain level.
|
||||
*/
|
||||
ChanAccess *GetAccess(User *u, int16 level = 0);
|
||||
|
||||
/** Get an entry from the channel access list by NickCore
|
||||
*
|
||||
* @param u The NickCore to find within the access list vector
|
||||
* @param nc The NickCore to find within the access list vector
|
||||
* @param level Optional channel access level to compare the access entries to
|
||||
* @return A ChanAccess struct corresponding to the NickCore, or NULL if not found
|
||||
*
|
||||
* 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);
|
||||
|
||||
/** Get an entry from the channel access list by mask
|
||||
*
|
||||
* @param u The mask to find within the access list vector
|
||||
* @param level Optional channel access level to compare the access entries to
|
||||
* @param wildcard True to match using wildcards
|
||||
* @return A ChanAccess struct corresponding to the mask, or NULL if not found
|
||||
*
|
||||
* Retrieves an entry from the access list that matches the given mask, optionally also matching a certain level.
|
||||
*/
|
||||
ChanAccess *GetAccess(const Anope::string &mask, int16 level = 0, bool wildcard = true);
|
||||
ChanAccess *GetAccess(const NickCore *nc, int16 level = 0);
|
||||
|
||||
/** Get the size of the accss vector for this channel
|
||||
* @return The access vector size
|
||||
@@ -240,14 +159,6 @@ class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag,
|
||||
*/
|
||||
void EraseAccess(unsigned index);
|
||||
|
||||
/** Erase an entry from the channel access list
|
||||
*
|
||||
* @param taccess The access to remove
|
||||
*
|
||||
* Clears the memory used by the given access entry and removes it from the vector.
|
||||
*/
|
||||
void EraseAccess(ChanAccess *taccess);
|
||||
|
||||
/** Clear the entire channel access list
|
||||
*
|
||||
* Clears the entire access list by deleting every item and then clearing the vector.
|
||||
@@ -325,51 +236,51 @@ class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag,
|
||||
void LoadMLock();
|
||||
|
||||
/** Check if a mode is mlocked
|
||||
* @param mode The mode
|
||||
* @param An optional param
|
||||
* @param Name The mode
|
||||
* @param status True to check mlock on, false for mlock off
|
||||
* @return true on success, false on fail
|
||||
*/
|
||||
bool HasMLock(ChannelMode *mode, const Anope::string ¶m, bool status) const;
|
||||
bool HasMLock(ChannelModeName Name, bool status) const;
|
||||
|
||||
/** Set a mlock
|
||||
* @param mode The mode
|
||||
* @param Name The mode
|
||||
* @param status True for mlock on, false for mlock off
|
||||
* @param param An optional param arg for + mlocked modes
|
||||
* @param setter Who is setting the mlock
|
||||
* @param created When the mlock was created
|
||||
* @return true on success, false on failure (module blocking)
|
||||
*/
|
||||
bool SetMLock(ChannelMode *mode, bool status, const Anope::string ¶m = "", Anope::string setter = "", time_t created = Anope::CurTime);
|
||||
bool SetMLock(ChannelModeName Name, bool status, const Anope::string ¶m = "");
|
||||
|
||||
/** Remove a mlock
|
||||
* @param mode The mode
|
||||
* @param param The param of the mode, required if it is a list or status mode
|
||||
* @return true on success, false on failure
|
||||
* @param Name The mode
|
||||
* @return true on success, false on failure (module blcoking)
|
||||
*/
|
||||
bool RemoveMLock(ChannelMode *mode, const Anope::string ¶m = "");
|
||||
bool RemoveMLock(ChannelModeName Name);
|
||||
|
||||
/** Clear all mlocks on the channel
|
||||
*/
|
||||
void ClearMLock();
|
||||
|
||||
/** Get all of the mlocks for this channel
|
||||
* @return The mlocks
|
||||
/** 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 std::multimap<ChannelModeName, ModeLock> &GetMLock() const;
|
||||
size_t GetMLockCount(bool status) const;
|
||||
|
||||
/** Get a list of modes on a channel
|
||||
* @param Name The mode name to get a list of
|
||||
* @return a pair of iterators for the beginning and end of the list
|
||||
/** Get a param from the channel
|
||||
* @param Name The mode
|
||||
* @param Target a string to put the param into
|
||||
* @return true on success
|
||||
*/
|
||||
std::pair<ModeList::iterator, ModeList::iterator> GetModeList(ChannelModeName Name);
|
||||
bool GetParam(ChannelModeName Name, Anope::string &Target) const;
|
||||
|
||||
/** Get details for a specific mlock
|
||||
* @param mname The mode name
|
||||
* @param An optional param to match with
|
||||
* @return The MLock, if any
|
||||
/** Check if a mode is set and has a param
|
||||
* @param Name The mode
|
||||
*/
|
||||
ModeLock *GetMLock(ChannelModeName mname, const Anope::string ¶m = "");
|
||||
bool HasParam(ChannelModeName Name) const;
|
||||
|
||||
/** Clear all the params from the channel
|
||||
*/
|
||||
void ClearParams();
|
||||
|
||||
/** Check whether a user is permitted to be on this channel
|
||||
* @param u The user
|
||||
|
||||
+33
-2
@@ -4,7 +4,10 @@
|
||||
/* Anope */
|
||||
extern CoreExport Server *Me;
|
||||
|
||||
extern CoreExport void CapabParse(const std::vector<Anope::string> ¶ms);
|
||||
|
||||
extern CoreExport void do_server(const Anope::string &source, const Anope::string &servername, unsigned int hops, const Anope::string &descript, const Anope::string &numeric);
|
||||
extern CoreExport void do_squit(const Anope::string &source, const Anope::string &server);
|
||||
|
||||
extern CoreExport const char *ts6_uid_retrieve();
|
||||
extern CoreExport const char *ts6_sid_retrieve();
|
||||
@@ -18,7 +21,33 @@ enum CapabType
|
||||
CAPAB_NOQUIT,
|
||||
CAPAB_TSMODE,
|
||||
CAPAB_UNCONNECT,
|
||||
CAPAB_NICKIP,
|
||||
CAPAB_NSJOIN,
|
||||
CAPAB_ZIP,
|
||||
CAPAB_BURST,
|
||||
CAPAB_TS3,
|
||||
CAPAB_TS5,
|
||||
CAPAB_DKEY,
|
||||
CAPAB_DOZIP,
|
||||
CAPAB_DODKEY,
|
||||
CAPAB_QS,
|
||||
CAPAB_SCS,
|
||||
CAPAB_PT4,
|
||||
CAPAB_UID,
|
||||
CAPAB_KNOCK,
|
||||
CAPAB_CLIENT,
|
||||
CAPAB_IPV6,
|
||||
CAPAB_SSJ5,
|
||||
CAPAB_SN2,
|
||||
CAPAB_VHOST,
|
||||
CAPAB_TOKEN,
|
||||
CAPAB_SSJ3,
|
||||
CAPAB_NICK2,
|
||||
CAPAB_VL,
|
||||
CAPAB_TLKEXT,
|
||||
CAPAB_CHANMODE,
|
||||
CAPAB_SJB64,
|
||||
CAPAB_NICKCHARS,
|
||||
|
||||
CAPAB_END
|
||||
};
|
||||
@@ -44,8 +73,6 @@ enum ServerFlag
|
||||
SERVER_JUPED
|
||||
};
|
||||
|
||||
const Anope::string ServerFlagStrings[] = { "SERVER_NONE", "SERVER_SYNCING", "SERVER_JUPED", "" };
|
||||
|
||||
/** Class representing a server
|
||||
*/
|
||||
class CoreExport Server : public Flags<ServerFlag>
|
||||
@@ -132,6 +159,10 @@ class CoreExport Server : public Flags<ServerFlag>
|
||||
*/
|
||||
void DelLink(Server *s);
|
||||
|
||||
/** Remove all links from this server
|
||||
*/
|
||||
void ClearLinks();
|
||||
|
||||
/** Finish syncing this server and optionally all links to it
|
||||
* @param SyncLinks True to sync the links for this server too (if any)
|
||||
*/
|
||||
|
||||
+138
-135
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
*
|
||||
* (C) 2003-2011 Anope Team
|
||||
* (C) 2003-2010 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
* 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.
|
||||
@@ -43,13 +43,6 @@
|
||||
#include <fcntl.h>
|
||||
#include <typeinfo>
|
||||
|
||||
#if GETTEXT_FOUND
|
||||
# include <libintl.h>
|
||||
# define _(x) anope_gettext(x)
|
||||
#else
|
||||
# define _(x) x
|
||||
#endif
|
||||
|
||||
#ifndef _WIN32
|
||||
# include <unistd.h>
|
||||
# include <grp.h>
|
||||
@@ -57,7 +50,6 @@
|
||||
# include <netinet/in.h>
|
||||
# include <arpa/inet.h>
|
||||
# include <sys/socket.h>
|
||||
# include <sys/time.h>
|
||||
# include <dirent.h>
|
||||
# ifdef HAVE_BACKTRACE
|
||||
# include <execinfo.h>
|
||||
@@ -67,7 +59,31 @@
|
||||
# define MARK_DEPRECATED __attribute((deprecated))
|
||||
# define DeleteFile unlink
|
||||
#else
|
||||
# include "anope_windows.h"
|
||||
# include <winsock2.h>
|
||||
# include <ws2tcpip.h>
|
||||
# include <windows.h>
|
||||
# include <sys/timeb.h>
|
||||
# include <direct.h>
|
||||
# include <io.h>
|
||||
# ifdef MODULE_COMPILE
|
||||
# define CoreExport __declspec(dllimport)
|
||||
# define DllExport __declspec(dllexport)
|
||||
# else
|
||||
# define CoreExport __declspec(dllexport)
|
||||
# define DllExport __declspec(dllimport)
|
||||
# endif
|
||||
/* VS2008 hates having this define before its own */
|
||||
# define vsnprintf _vsnprintf
|
||||
/* We have our own inet_pton and inet_ntop (Windows doesn't have its own) */
|
||||
# define inet_pton inet_pton_
|
||||
# define inet_ntop inet_ntop_
|
||||
# define setenv(x, y, z) SetEnvironmentVariable(x, y)
|
||||
# define unsetenv(x) SetEnvironmentVariable(x, NULL)
|
||||
# define MARK_DEPRECATED
|
||||
|
||||
extern CoreExport USHORT WindowsGetLanguage(const char *lang);
|
||||
extern CoreExport int inet_pton(int af, const char *src, void *dst);
|
||||
extern CoreExport const char *inet_ntop(int af, const void *src, char *dst, size_t size);
|
||||
#endif
|
||||
|
||||
/* Telling compilers about printf()-like functions: */
|
||||
@@ -77,10 +93,18 @@
|
||||
# define FORMAT(type, fmt, start)
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_GETTIMEOFDAY
|
||||
# include <sys/time.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_STRINGS_H
|
||||
# include <strings.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_SYS_SELECT_H
|
||||
# include <sys/select.h>
|
||||
#endif
|
||||
|
||||
#ifdef _AIX
|
||||
/* Some AIX boxes seem to have bogus includes that don't have these
|
||||
* prototypes. */
|
||||
@@ -104,6 +128,18 @@ extern int strncasecmp(const char *, const char *, size_t);
|
||||
#define tolower tolower_
|
||||
#define toupper toupper_
|
||||
|
||||
#ifdef __WINS__
|
||||
# ifndef BKCHECK
|
||||
# define BKCHECK
|
||||
extern "C" void __pfnBkCheck() {}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if INTTYPE_WORKAROUND
|
||||
# undef int16
|
||||
# undef int32
|
||||
#endif
|
||||
|
||||
/** This definition is used as shorthand for the various classes
|
||||
* and functions needed to make a module loadable by the OS.
|
||||
* It defines the class factory and external AnopeInit and AnopeFini functions.
|
||||
@@ -269,11 +305,8 @@ template<typename T, size_t Size = 32> class Flags
|
||||
{
|
||||
protected:
|
||||
std::bitset<Size> Flag_Values;
|
||||
const Anope::string *Flag_Strings;
|
||||
|
||||
public:
|
||||
Flags(const Anope::string *flag_strings) : Flag_Strings(flag_strings) { }
|
||||
|
||||
/** Add a flag to this item
|
||||
* @param Value The flag
|
||||
*/
|
||||
@@ -313,23 +346,6 @@ template<typename T, size_t Size = 32> class Flags
|
||||
{
|
||||
Flag_Values.reset();
|
||||
}
|
||||
|
||||
std::vector<Anope::string> ToString()
|
||||
{
|
||||
std::vector<Anope::string> ret;
|
||||
for (unsigned i = 0; this->Flag_Strings && !this->Flag_Strings[i].empty(); ++i)
|
||||
if (this->HasFlag(static_cast<T>(i)))
|
||||
ret.push_back(this->Flag_Strings[i]);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void FromString(const std::vector<Anope::string> &strings)
|
||||
{
|
||||
for (unsigned i = 0; this->Flag_Strings && !this->Flag_Strings[i].empty(); ++i)
|
||||
for (unsigned j = 0; j < strings.size(); ++j)
|
||||
if (this->Flag_Strings[i] == strings[j])
|
||||
this->SetFlag(static_cast<T>(i));
|
||||
}
|
||||
};
|
||||
|
||||
#include "sockets.h"
|
||||
@@ -340,20 +356,12 @@ template<typename T, size_t Size = 32> class Flags
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
class ConvertException : public CoreException
|
||||
{
|
||||
public:
|
||||
ConvertException(const Anope::string &reason = "") : CoreException(reason) { }
|
||||
|
||||
virtual ~ConvertException() throw() { }
|
||||
};
|
||||
|
||||
template<typename T> inline Anope::string stringify(const T &x)
|
||||
{
|
||||
std::ostringstream stream;
|
||||
|
||||
if (!(stream << x))
|
||||
throw ConvertException("Stringify fail");
|
||||
throw CoreException("Stringify fail");
|
||||
|
||||
return stream.str();
|
||||
}
|
||||
@@ -365,11 +373,11 @@ template<typename T> inline void convert(const Anope::string &s, T &x, Anope::st
|
||||
char c;
|
||||
bool res = i >> x;
|
||||
if (!res)
|
||||
throw ConvertException("Convert fail");
|
||||
throw CoreException("Convert fail");
|
||||
if (failIfLeftoverChars)
|
||||
{
|
||||
if (i.get(c))
|
||||
throw ConvertException("Convert fail");
|
||||
throw CoreException("Convert fail");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -404,11 +412,12 @@ template<typename T> inline T convertTo(const Anope::string &s, bool failIfLefto
|
||||
class User;
|
||||
class NickCore;
|
||||
class NickAlias;
|
||||
class NickRequest;
|
||||
class BotInfo;
|
||||
class ChannelInfo;
|
||||
class Channel;
|
||||
class Server;
|
||||
class Entry;
|
||||
struct EList;
|
||||
struct Session;
|
||||
|
||||
#include "threadengine.h"
|
||||
@@ -423,6 +432,7 @@ struct IRCDVar
|
||||
{
|
||||
const char *name; /* Name of the IRCd command */
|
||||
const char *pseudoclient_mode; /* Mode used by BotServ Bots */
|
||||
int max_symbols; /* Chan Max Symbols */
|
||||
int svsnick; /* Supports SVSNICK */
|
||||
int vhost; /* Supports vhost */
|
||||
int snline; /* Supports SNline */
|
||||
@@ -431,6 +441,8 @@ struct IRCDVar
|
||||
int join2msg; /* Join 2 Message */
|
||||
int chansqline; /* Supports Channel Sqlines */
|
||||
int quitonkill; /* IRCD sends QUIT when kill */
|
||||
int svsmode_unban; /* svsmode can be used to unban */
|
||||
int reversekickcheck; /* Can reverse ban check */
|
||||
int vident; /* Supports vidents */
|
||||
int svshold; /* Supports svshold */
|
||||
int tsonmode; /* Timestamp on mode changes */
|
||||
@@ -440,9 +452,11 @@ struct IRCDVar
|
||||
int svsmode_ucmode; /* Can remove User Channel Modes with SVSMODE */
|
||||
int sglineenforce;
|
||||
int ts6; /* ircd is TS6 */
|
||||
int cidrchanbei; /* channel bans/excepts/invites support CIDR (syntax: +b *!*@192.168.0.0/15)
|
||||
* 0 for no support, 1 for strict cidr support, anything else
|
||||
* for ircd specific support (nefarious only cares about first /mask) */
|
||||
const char *globaltldprefix; /* TLD prefix used for Global */
|
||||
unsigned maxmodes; /* Max modes to send per line */
|
||||
int certfp; /* IRCd sends a SSL users certificate fingerprint */
|
||||
};
|
||||
|
||||
/*************************************************************************/
|
||||
@@ -453,22 +467,17 @@ enum MemoFlag
|
||||
{
|
||||
/* Memo is unread */
|
||||
MF_UNREAD,
|
||||
/* Sender requests a receipt */
|
||||
/* SEnder requests a receipt */
|
||||
MF_RECEIPT,
|
||||
/* Memo is a notification of receipt */
|
||||
MF_NOTIFYS
|
||||
};
|
||||
|
||||
const Anope::string MemoFlagStrings[] = {
|
||||
"MF_UNREAD", "MF_RECEIPT", "MF_NOTIFYS", ""
|
||||
};
|
||||
|
||||
/* Memo info structures. Since both nicknames and channels can have memos,
|
||||
* we encapsulate memo data in a MemoList to make it easier to handle. */
|
||||
class CoreExport Memo : public Flags<MemoFlag>
|
||||
class Memo : public Flags<MemoFlag>
|
||||
{
|
||||
public:
|
||||
Memo();
|
||||
time_t time; /* When it was sent */
|
||||
Anope::string sender;
|
||||
Anope::string text;
|
||||
@@ -478,12 +487,10 @@ struct CoreExport MemoInfo
|
||||
{
|
||||
int16 memomax;
|
||||
std::vector<Memo *> memos;
|
||||
std::vector<ci::string> ignores;
|
||||
|
||||
unsigned GetIndex(Memo *m) const;
|
||||
void Del(unsigned index);
|
||||
void Del(Memo *m);
|
||||
bool HasIgnore(User *u);
|
||||
};
|
||||
|
||||
/*************************************************************************/
|
||||
@@ -557,6 +564,44 @@ enum AccessLevel
|
||||
ACCESS_QOP = 10000
|
||||
};
|
||||
|
||||
/* Channel info structures. Stored similarly to the nicks, except that
|
||||
* the second character of the channel name, not the first, is used to
|
||||
* determine the list. (Hashing based on the first character of the name
|
||||
* wouldn't get very far. ;) ) */
|
||||
|
||||
/* Access levels for users. */
|
||||
struct ChanAccess
|
||||
{
|
||||
int16 level;
|
||||
NickCore *nc; /* Guaranteed to be non-NULL if in use, NULL if not */
|
||||
time_t last_seen;
|
||||
Anope::string creator;
|
||||
};
|
||||
|
||||
/** Flags for auto kick
|
||||
*/
|
||||
enum AutoKickFlag
|
||||
{
|
||||
/* Is by nick core, not mask */
|
||||
AK_ISNICK,
|
||||
/* This entry is stuck */
|
||||
AK_STUCK
|
||||
};
|
||||
|
||||
/* AutoKick data. */
|
||||
class AutoKick : public Flags<AutoKickFlag>
|
||||
{
|
||||
public:
|
||||
/* Only one of these can be in use */
|
||||
Anope::string mask;
|
||||
NickCore *nc;
|
||||
|
||||
Anope::string reason;
|
||||
Anope::string creator;
|
||||
time_t addtime;
|
||||
time_t last_used;
|
||||
};
|
||||
|
||||
/** Flags for badwords
|
||||
*/
|
||||
enum BadWordType
|
||||
@@ -586,9 +631,11 @@ enum ChannelAccess
|
||||
CA_SET, /* but not FOUNDER or PASSWORD */
|
||||
CA_UNBAN,
|
||||
CA_AUTOOP,
|
||||
CA_AUTODEOP, /* Maximum, not minimum */
|
||||
CA_AUTOVOICE,
|
||||
CA_OPDEOP, /* ChanServ commands OP and DEOP */
|
||||
CA_ACCESS_LIST,
|
||||
CA_CLEAR,
|
||||
CA_NOJOIN, /* Maximum */
|
||||
CA_ACCESS_CHANGE,
|
||||
CA_MEMO,
|
||||
@@ -614,7 +661,6 @@ enum ChannelAccess
|
||||
CA_BANME,
|
||||
CA_BAN,
|
||||
CA_TOPIC,
|
||||
CA_MODE,
|
||||
CA_INFO,
|
||||
CA_AUTOOWNER,
|
||||
CA_OWNER,
|
||||
@@ -657,24 +703,9 @@ enum BotServFlag
|
||||
BS_KICK_REPEAT,
|
||||
/* BotServ kicks for italics */
|
||||
BS_KICK_ITALICS,
|
||||
/* BotServ kicks for amsgs */
|
||||
BS_KICK_AMSGS,
|
||||
/* Send fantasy replies back to the channel via PRIVMSG */
|
||||
BS_MSG_PRIVMSG,
|
||||
/* Send fantasy replies back to the channel via NOTICE */
|
||||
BS_MSG_NOTICE,
|
||||
/* Send fantasy replies back to the channel via NOTICE to ops */
|
||||
BS_MSG_NOTICEOPS,
|
||||
BS_END
|
||||
};
|
||||
|
||||
const Anope::string BotServFlagStrings[] = {
|
||||
"BEGIN", "DONTKICKOPS", "DONTKICKVOICES", "FANTASY", "SYMBIOSIS", "GREET", "NOBOT",
|
||||
"KICK_BOLDs", "KICK_COLORS", "KICK_REVERSES", "KICK_UNDERLINES", "KICK_BADWORDS", "KICK_CAPS",
|
||||
"KICK_FLOOD", "KICK_REPEAT", "KICK_ITALICS", "KICK_AMSGS", "MSG_PRIVMSG", "MSG_NOTICE",
|
||||
"MSG_NOTICEOPS", ""
|
||||
};
|
||||
|
||||
/* Indices for TTB (Times To Ban) */
|
||||
enum
|
||||
{
|
||||
@@ -687,7 +718,6 @@ enum
|
||||
TTB_FLOOD,
|
||||
TTB_REPEAT,
|
||||
TTB_ITALICS,
|
||||
TTB_AMSGS,
|
||||
TTB_SIZE
|
||||
};
|
||||
|
||||
@@ -699,6 +729,7 @@ enum
|
||||
* user is kicked.
|
||||
*/
|
||||
|
||||
#include "language.h"
|
||||
#include "users.h"
|
||||
#include "account.h"
|
||||
#include "bots.h"
|
||||
@@ -714,7 +745,7 @@ struct LevelInfo
|
||||
{
|
||||
int what;
|
||||
Anope::string name;
|
||||
const char *desc;
|
||||
LanguageString desc;
|
||||
};
|
||||
|
||||
#include "channels.h"
|
||||
@@ -724,7 +755,7 @@ struct LevelInfo
|
||||
enum EntryType
|
||||
{
|
||||
ENTRYTYPE_NONE,
|
||||
ENTRYTYPE_CIDR,
|
||||
ENTRYTYPE_CIDR4,
|
||||
ENTRYTYPE_NICK_WILD,
|
||||
ENTRYTYPE_NICK,
|
||||
ENTRYTYPE_USER_WILD,
|
||||
@@ -733,32 +764,29 @@ enum EntryType
|
||||
ENTRYTYPE_HOST
|
||||
};
|
||||
|
||||
class CoreExport Entry : public Flags<EntryType>
|
||||
class Entry : public Flags<EntryType>
|
||||
{
|
||||
ChannelModeName modename;
|
||||
|
||||
public:
|
||||
unsigned char cidr_len;
|
||||
Entry *next, *prev;
|
||||
uint32 cidr_ip; /* IP mask for CIDR matching */
|
||||
uint32 cidr_mask; /* Netmask for CIDR matching */
|
||||
Anope::string nick, user, host, mask;
|
||||
};
|
||||
|
||||
struct EList
|
||||
{
|
||||
Entry *entries;
|
||||
int32 count;
|
||||
};
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/* Ignorance list data. */
|
||||
|
||||
struct IgnoreData
|
||||
{
|
||||
Anope::string mask;
|
||||
Anope::string nick, user, host;
|
||||
|
||||
/** Constructor
|
||||
* @param _host A full nick!ident@host/cidr mask
|
||||
* @param mode What mode this host is for - can be CMODE_BEGIN for unknown/no mode
|
||||
*/
|
||||
Entry(ChannelModeName mode, const Anope::string &_host);
|
||||
|
||||
/** Get the banned mask for this entry
|
||||
* @return The mask
|
||||
*/
|
||||
const Anope::string GetMask();
|
||||
|
||||
/** Check if this entry matches a user
|
||||
* @param u The user
|
||||
* @param full True to match against a users real host and IP
|
||||
* @return true on match
|
||||
*/
|
||||
bool Matches(User *u, bool full = false) const;
|
||||
time_t time; /* When do we stop ignoring them? */
|
||||
};
|
||||
|
||||
/*************************************************************************/
|
||||
@@ -776,7 +804,7 @@ struct NewsMessages
|
||||
{
|
||||
NewsType type;
|
||||
Anope::string name;
|
||||
const char *msgs[10];
|
||||
LanguageString msgs[10];
|
||||
};
|
||||
|
||||
struct NewsItem
|
||||
@@ -797,6 +825,7 @@ struct MailInfo
|
||||
FILE *pipe;
|
||||
User *sender;
|
||||
NickCore *recipient;
|
||||
NickRequest *recip;
|
||||
};
|
||||
|
||||
/*************************************************************************/
|
||||
@@ -813,7 +842,8 @@ struct Exception
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
extern CoreExport Anope::map<Session *> SessionList;
|
||||
typedef unordered_map_namespace::unordered_map<Anope::string, Session *, Anope::hash> session_map;
|
||||
extern CoreExport session_map SessionList;
|
||||
|
||||
struct Session
|
||||
{
|
||||
@@ -856,13 +886,10 @@ enum DefconLevel
|
||||
* Forward declaration reqired, because the base IRCDProto class uses some crap from in here.
|
||||
*/
|
||||
class IRCDProto;
|
||||
class IRCdMessage;
|
||||
struct Uplink;
|
||||
class ServerConfig;
|
||||
class ConfigurationFile;
|
||||
|
||||
#include "extern.h"
|
||||
#include "language.h"
|
||||
#include "operserv.h"
|
||||
#include "mail.h"
|
||||
#include "servers.h"
|
||||
@@ -891,9 +918,10 @@ class CoreExport IRCDProto
|
||||
virtual void SendSVSNOOP(const Anope::string &, int) { }
|
||||
virtual void SendTopic(BotInfo *, Channel *) = 0;
|
||||
virtual void SendVhostDel(User *) { }
|
||||
virtual void SendAkill(User *, const XLine *) = 0;
|
||||
virtual void SendAkill(const XLine *) = 0;
|
||||
virtual void SendAkillDel(const XLine *) = 0;
|
||||
virtual void SendSVSKill(const BotInfo *source, const User *user, const char *fmt, ...);
|
||||
virtual void SendSVSMode(const User *, int, const char **) = 0;
|
||||
virtual void SendMode(const BotInfo *bi, const Channel *dest, const char *fmt, ...);
|
||||
virtual void SendMode(const BotInfo *bi, const User *u, const char *fmt, ...);
|
||||
virtual void SendClientIntroduction(const User *u, const Anope::string &) = 0;
|
||||
@@ -909,12 +937,13 @@ class CoreExport IRCDProto
|
||||
virtual void SendQuit(const User *u, const char *fmt, ...);
|
||||
virtual void SendPing(const Anope::string &servname, const Anope::string &who);
|
||||
virtual void SendPong(const Anope::string &servname, const Anope::string &who);
|
||||
virtual void SendJoin(BotInfo *, Channel *, const ChannelStatus *) = 0;
|
||||
virtual void SendSQLineDel(const XLine *x) { }
|
||||
virtual void SendJoin(const BotInfo *, const Anope::string &, time_t) = 0;
|
||||
virtual void SendJoin(BotInfo *, const ChannelContainer *);
|
||||
virtual void SendSQLineDel(const XLine *x) = 0;
|
||||
virtual void SendInvite(const BotInfo *bi, const Anope::string &chan, const Anope::string &nick);
|
||||
virtual void SendPart(const BotInfo *bi, const Channel *chan, const char *fmt, ...);
|
||||
virtual void SendGlobops(const BotInfo *source, const char *fmt, ...);
|
||||
virtual void SendSQLine(User *, const XLine *x) { }
|
||||
virtual void SendSQLine(const XLine *x) = 0;
|
||||
virtual void SendSquit(const Anope::string &servname, const Anope::string &message);
|
||||
virtual void SendSVSO(const Anope::string &, const Anope::string &, const Anope::string &) { }
|
||||
virtual void SendChangeBotNick(const BotInfo *bi, const Anope::string &newnick);
|
||||
@@ -925,11 +954,14 @@ class CoreExport IRCDProto
|
||||
virtual void SendSVSHoldDel(const Anope::string &) { }
|
||||
virtual void SendSGLineDel(const XLine *) { }
|
||||
virtual void SendSZLineDel(const XLine *) { }
|
||||
virtual void SendSZLine(User *u, const XLine *) { }
|
||||
virtual void SendSGLine(User *, const XLine *) { }
|
||||
virtual void SendSZLine(const XLine *) { }
|
||||
virtual void SendSGLine(const XLine *) { }
|
||||
virtual void SendBanDel(const Channel *, const Anope::string &) { }
|
||||
virtual void SendSVSModeChan(const Channel *, const Anope::string &, const Anope::string &) { }
|
||||
virtual void SendUnregisteredNick(const User *) { }
|
||||
virtual void SendCTCP(const BotInfo *bi, const Anope::string &dest, const char *fmt, ...);
|
||||
virtual void SendSVSJoin(const Anope::string &, const Anope::string &, const Anope::string &, const Anope::string &) { }
|
||||
virtual void SendSVSPart(const Anope::string &, const Anope::string &, const Anope::string &) { }
|
||||
virtual void SendSWhois(const Anope::string &, const Anope::string &, const Anope::string &) { }
|
||||
virtual void SendBOB() { }
|
||||
virtual void SendEOB() { }
|
||||
@@ -954,35 +986,6 @@ class CoreExport IRCDProto
|
||||
* @param u The user
|
||||
*/
|
||||
virtual void SetAutoIdentificationToken(User *u) { }
|
||||
|
||||
/** Send a channel creation message to the uplink.
|
||||
* On most TS6 IRCds this is a SJOIN with no nick
|
||||
*/
|
||||
virtual void SendChannel(Channel *c) { }
|
||||
};
|
||||
|
||||
class CoreExport IRCdMessage
|
||||
{
|
||||
public:
|
||||
virtual bool On436(const Anope::string &, const std::vector<Anope::string> &);
|
||||
virtual bool OnAway(const Anope::string &, const std::vector<Anope::string> &);
|
||||
virtual bool OnJoin(const Anope::string &, const std::vector<Anope::string> &);
|
||||
virtual bool OnKick(const Anope::string &, const std::vector<Anope::string> &);
|
||||
virtual bool OnKill(const Anope::string &, const std::vector<Anope::string> &);
|
||||
virtual bool OnMode(const Anope::string &, const std::vector<Anope::string> &) = 0;
|
||||
virtual bool OnUID(const Anope::string &, const std::vector<Anope::string> &);
|
||||
virtual bool OnNick(const Anope::string &, const std::vector<Anope::string> &) = 0;
|
||||
virtual bool OnPart(const Anope::string &, const std::vector<Anope::string> &);
|
||||
virtual bool OnPing(const Anope::string &, const std::vector<Anope::string> &);
|
||||
virtual bool OnPrivmsg(const Anope::string &, const std::vector<Anope::string> &);
|
||||
virtual bool OnQuit(const Anope::string &, const std::vector<Anope::string> &);
|
||||
virtual bool OnServer(const Anope::string &, const std::vector<Anope::string> &) = 0;
|
||||
virtual bool OnSQuit(const Anope::string &, const std::vector<Anope::string> &);
|
||||
virtual bool OnTopic(const Anope::string &, const std::vector<Anope::string> &) = 0;
|
||||
virtual bool OnWhois(const Anope::string &, const std::vector<Anope::string> &);
|
||||
virtual bool OnCapab(const Anope::string &, const std::vector<Anope::string> &);
|
||||
virtual bool OnSJoin(const Anope::string &, const std::vector<Anope::string> &) = 0;
|
||||
virtual bool OnError(const Anope::string &, const std::vector<Anope::string> &);
|
||||
};
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
*
|
||||
* (C) 2003-2011 Anope Team
|
||||
* (C) 2003-2010 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
* 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.
|
||||
|
||||
+4
-18
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
*
|
||||
* (C) 2003-2011 Anope Team
|
||||
* (C) 2003-2010 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
* 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.
|
||||
@@ -80,18 +80,6 @@ union CoreExport sockaddrs
|
||||
void ntop(int type, const void *src);
|
||||
};
|
||||
|
||||
class CoreExport cidr
|
||||
{
|
||||
sockaddrs addr;
|
||||
Anope::string cidr_ip;
|
||||
unsigned char cidr_len;
|
||||
public:
|
||||
cidr(const Anope::string &ip);
|
||||
cidr(const Anope::string &ip, unsigned char len);
|
||||
Anope::string mask() const;
|
||||
bool match(sockaddrs &other);
|
||||
};
|
||||
|
||||
class SocketException : public CoreException
|
||||
{
|
||||
public:
|
||||
@@ -121,8 +109,6 @@ enum SocketFlag
|
||||
SF_WRITABLE
|
||||
};
|
||||
|
||||
static const Anope::string SocketFlagStrings[] = { "SF_DEAD", "SF_WRITABLE", "" };
|
||||
|
||||
class Socket;
|
||||
class ClientSocket;
|
||||
class ListenSocket;
|
||||
@@ -342,13 +328,13 @@ class CoreExport ConnectionSocket : public BufferedSocket
|
||||
void Connect(const Anope::string &TargetHost, int Port, const Anope::string &BindHost = "");
|
||||
};
|
||||
|
||||
class CoreExport ClientSocket : public BufferedSocket
|
||||
class ClientSocket : public BufferedSocket
|
||||
{
|
||||
public:
|
||||
/* Listen socket this connection came from */
|
||||
ListenSocket *LS;
|
||||
/* Clients address */
|
||||
sockaddrs clientaddr;
|
||||
public:
|
||||
|
||||
/** Constructor
|
||||
* @param ls Listen socket this connection is from
|
||||
|
||||
@@ -8,16 +8,19 @@
|
||||
#cmakedefine HAVE_STDINT_H 1
|
||||
#cmakedefine HAVE_STDDEF_H 1
|
||||
#cmakedefine HAVE_BACKTRACE 1
|
||||
#cmakedefine HAVE_GETTIMEOFDAY 1
|
||||
#cmakedefine HAVE_SETGRENT 1
|
||||
#cmakedefine HAVE_STRCASECMP 1
|
||||
#cmakedefine HAVE_STRICMP 1
|
||||
#cmakedefine HAVE_STRINGS_H 1
|
||||
#cmakedefine HAVE_STRLCAT 1
|
||||
#cmakedefine HAVE_STRLCPY 1
|
||||
#cmakedefine HAVE_SYS_SELECT_H 1
|
||||
#cmakedefine HAVE_UMASK 1
|
||||
#cmakedefine HAVE_EVENTFD 1
|
||||
#cmakedefine GETTEXT_FOUND 1
|
||||
#cmakedefine RUNGROUP "@RUNGROUP@"
|
||||
#define LIBINTL "@LIBINTL_INCLUDE@"
|
||||
|
||||
#cmakedefine HAVE_UINT8_T 1
|
||||
#cmakedefine HAVE_U_INT8_T 1
|
||||
@@ -101,6 +104,9 @@ typedef unsigned long uint32;
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
# ifdef MSVCPP
|
||||
# define snprintf _snprintf
|
||||
# endif
|
||||
# define popen _popen
|
||||
# define pclose _pclose
|
||||
# define ftruncate _chsize
|
||||
|
||||
+1
-11
@@ -45,7 +45,7 @@ class CoreExport Thread : public Extensible
|
||||
{
|
||||
private:
|
||||
/* Set to true to tell the thread to finish and we are waiting for it */
|
||||
bool exit;
|
||||
bool Exit;
|
||||
|
||||
public:
|
||||
/* Handle for this thread */
|
||||
@@ -67,10 +67,6 @@ class CoreExport Thread : public Extensible
|
||||
*/
|
||||
void SetExitState();
|
||||
|
||||
/** Exit the thread. Note that the thread still must be joined to free resources!
|
||||
*/
|
||||
void Exit();
|
||||
|
||||
/** Returns the exit state of the thread
|
||||
* @return true if we want to exit
|
||||
*/
|
||||
@@ -103,12 +99,6 @@ class CoreExport Mutex
|
||||
/** Unlock the mutex, it must be locked first
|
||||
*/
|
||||
void Unlock();
|
||||
|
||||
/** Attempt to lock the mutex, will return true on success and false on fail
|
||||
* Does not block
|
||||
* @return true or false
|
||||
*/
|
||||
bool TryLock();
|
||||
};
|
||||
|
||||
class CoreExport Condition : public Mutex
|
||||
|
||||
+2
-2
@@ -1,9 +1,9 @@
|
||||
/* Timer include stuff.
|
||||
*
|
||||
* (C) 2003-2011 Anope Team
|
||||
* (C) 2003-2010 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
* 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.
|
||||
*/
|
||||
|
||||
+24
-40
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2011 Robin Burchell <w00t@inspircd.org>
|
||||
* Copyright (C) 2008-2011 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,13 +8,18 @@
|
||||
#ifndef USERS_H
|
||||
#define USERS_H
|
||||
|
||||
extern CoreExport Anope::insensitive_map<User *> UserListByNick;
|
||||
extern CoreExport Anope::map<User *> UserListByUID;
|
||||
/* Hash maps used for users. Note UserListByUID will not be used on non-TS6 IRCds, and should never
|
||||
* be assumed to have users
|
||||
*/
|
||||
typedef unordered_map_namespace::unordered_map<Anope::string, User *, ci::hash, std::equal_to<ci::string> > user_map;
|
||||
typedef unordered_map_namespace::unordered_map<Anope::string, User *, Anope::hash> user_uid_map;
|
||||
|
||||
extern CoreExport user_map UserListByNick;
|
||||
extern CoreExport user_uid_map UserListByUID;
|
||||
|
||||
class CoreExport ChannelStatus : public Flags<ChannelModeName, CMODE_END * 2>
|
||||
{
|
||||
public:
|
||||
ChannelStatus();
|
||||
Anope::string BuildCharPrefixList() const;
|
||||
Anope::string BuildModePrefixList() const;
|
||||
};
|
||||
@@ -49,7 +54,6 @@ class CoreExport User : public Extensible
|
||||
Anope::string vhost; /* User's virtual hostname */
|
||||
Anope::string chost; /* User's cloaked hostname */
|
||||
Anope::string realname; /* Realname */
|
||||
Anope::string fingerprint; /* SSL Fingerprint */
|
||||
sockaddrs ip; /* User's IP */
|
||||
Server *server; /* Server user is connected to */
|
||||
time_t timestamp; /* Timestamp of the nick */
|
||||
@@ -86,7 +90,7 @@ class CoreExport User : public Extensible
|
||||
/** Update the nickname of a user record accordingly, should be
|
||||
* called from ircd protocol.
|
||||
*/
|
||||
void SetNewNick(const Anope::string &newnick);
|
||||
virtual void SetNewNick(const Anope::string &newnick);
|
||||
|
||||
/** Update the displayed (vhost) of a user record.
|
||||
* This is used (if set) instead of real host.
|
||||
@@ -141,22 +145,25 @@ class CoreExport User : public Extensible
|
||||
*/
|
||||
Anope::string GetMask() const;
|
||||
|
||||
/** Get the full display mask (nick!vident@vhost/chost)
|
||||
*/
|
||||
Anope::string GetDisplayedMask() const;
|
||||
|
||||
/** Updates the realname of the user record.
|
||||
*/
|
||||
void SetRealname(const Anope::string &realname);
|
||||
|
||||
/**
|
||||
* Send a message (notice or privmsg, depending on settings) to a user
|
||||
* @param source Sender
|
||||
* @param source Sender nick
|
||||
* @param fmt Format of the Message
|
||||
* @param ... any number of parameters
|
||||
*/
|
||||
void SendMessage(BotInfo *source, const char *fmt, ...);
|
||||
virtual void SendMessage(BotInfo *source, Anope::string msg);
|
||||
virtual void SendMessage(const Anope::string &source, const char *fmt, ...) const;
|
||||
virtual void SendMessage(const Anope::string &source, const Anope::string &msg) const;
|
||||
|
||||
/** Send a language string message to a user
|
||||
* @param source Sender
|
||||
* @param message The message num
|
||||
* @param ... parameters
|
||||
*/
|
||||
void SendMessage(BotInfo *source, LanguageString message, ...) const;
|
||||
|
||||
/** Collide a nick
|
||||
* See the comment in users.cpp
|
||||
@@ -164,13 +171,6 @@ class CoreExport User : public Extensible
|
||||
*/
|
||||
void Collide(NickAlias *na);
|
||||
|
||||
/** Identify the user to the Nick
|
||||
* updates last_seen, logs the user in,
|
||||
* send messages, checks for mails, set vhost and more
|
||||
* @param the NickAlias
|
||||
*/
|
||||
void Identify(NickAlias *na);
|
||||
|
||||
/** Login the user to a NickCore
|
||||
* @param core The account the user is useing
|
||||
*/
|
||||
@@ -184,35 +184,19 @@ class CoreExport User : public Extensible
|
||||
* @return The account or NULL
|
||||
*/
|
||||
virtual NickCore *Account();
|
||||
virtual const 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 bool IsIdentified(bool CheckNick = false);
|
||||
virtual bool IsIdentified(bool CheckNick = false) const;
|
||||
|
||||
/** Check if the user is recognized for their nick (on the nicks access list)
|
||||
* @param CheckSecure Only returns true if the user has secure off
|
||||
* @return true or false
|
||||
*/
|
||||
virtual bool IsRecognized(bool CheckSecure = false);
|
||||
|
||||
/** Check if the user is a services oper
|
||||
* @return true if they are an oper
|
||||
*/
|
||||
bool IsServicesOper();
|
||||
|
||||
/** Check whether this user has access to run the given command string.
|
||||
* @param cmdstr The string to check, e.g. botserv/set/private.
|
||||
* @return True if this user may run the specified command, false otherwise.
|
||||
*/
|
||||
bool HasCommand(const Anope::string &cmdstr);
|
||||
|
||||
/** Check whether this user has access to the given special permission.
|
||||
* @param privstr The priv to check for, e.g. users/auspex.
|
||||
* @return True if this user has the specified priv, false otherwise.
|
||||
*/
|
||||
bool HasPriv(const Anope::string &privstr);
|
||||
virtual bool IsRecognized(bool CheckSecure = false) const;
|
||||
|
||||
/** Update the last usermask stored for a user, and check to see if they are recognized
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,9 +1,9 @@
|
||||
/* Build bumper
|
||||
*
|
||||
* (C) 2003-2011 Anope Team
|
||||
* (C) 2003-2010 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
* 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.
|
||||
|
||||
@@ -24,6 +24,7 @@ if(GETTEXT_FOUND)
|
||||
MAIN_DEPENDENCY ${LANG_PO}
|
||||
)
|
||||
# Add to cpack ignored files if not on Windows.
|
||||
file(RELATIVE_PATH LANG_RELATIVE ${Anope_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/${LANG_LANG})
|
||||
if(NOT WIN32)
|
||||
add_to_cpack_ignored_files("${LANG_MO}")
|
||||
endif(NOT WIN32)
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+3472
-2878
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,14 +1,14 @@
|
||||
# German translations for cs_appendtopic
|
||||
# German messages for cs_appendtopic
|
||||
# Copyright (C) 2011 Anope Team
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as Anope IRC Services
|
||||
# Adam <adam@anope.org>, 2011.
|
||||
# Adam <adam@anope.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Anope\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-25 20:53-0400\n"
|
||||
"PO-Revision-Date: 2010-09-25 20:57-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: German\n"
|
||||
@@ -17,21 +17,20 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../cs_appendtopic.cpp:106
|
||||
#: cs_appendtopic.cpp:105
|
||||
msgid " APPENDTOPIC Add text to a channels topic"
|
||||
msgstr " APPENDTOPIC Fügt einen Text zu einem Channel-Topic hinzu."
|
||||
|
||||
#: ../cs_appendtopic.cpp:90 ../cs_appendtopic.cpp:101
|
||||
#: cs_appendtopic.cpp:89 cs_appendtopic.cpp:100
|
||||
msgid "Syntax: APPENDTOPIC channel text"
|
||||
msgstr "Syntax: APPENDTOPIC Channel Text"
|
||||
|
||||
#: ../cs_appendtopic.cpp:92
|
||||
#: cs_appendtopic.cpp:91
|
||||
msgid ""
|
||||
"This command allows users to append text to a currently set\n"
|
||||
"channel topic. When TOPICLOCK is on, the topic is updated and\n"
|
||||
"the new, updated topic is locked."
|
||||
msgstr ""
|
||||
"Dieser Befehl erlaubt Benutzern, einen Text zu dem vorhandenen Channel-"
|
||||
"Topic\n"
|
||||
"Dieser Befehl erlaubt Benutzern, einen Text zu dem vorhandenen Channel-Topic\n"
|
||||
"hinzuzufügen. Wenn TOPICLOCK gesetzt ist, wird das Topic aktualisiert\n"
|
||||
"und das neue, aktualisierte Topic wird gesperrt."
|
||||
@@ -1,14 +1,14 @@
|
||||
# Italian translations for cs_appendtopic
|
||||
# Traduzioni italiane per il cs_appendtopic
|
||||
# Copyright (C) 2011 Anope Team
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as Anope IRC Services
|
||||
# Adam <adam@anope.org>, 2011.
|
||||
# Adam <adam@anope.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Anope\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-25 20:53-0400\n"
|
||||
"PO-Revision-Date: 2010-09-25 21:04-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: Italian\n"
|
||||
@@ -17,22 +17,20 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../cs_appendtopic.cpp:106
|
||||
#: cs_appendtopic.cpp:105
|
||||
msgid " APPENDTOPIC Add text to a channels topic"
|
||||
msgstr " APPENDTOPIC Aggiunge del testo al topic di un canale"
|
||||
|
||||
#: ../cs_appendtopic.cpp:90 ../cs_appendtopic.cpp:101
|
||||
#: cs_appendtopic.cpp:89 cs_appendtopic.cpp:100
|
||||
msgid "Syntax: APPENDTOPIC channel text"
|
||||
msgstr "Sintassi: APPENDTOPIC canale testo"
|
||||
|
||||
#: ../cs_appendtopic.cpp:92
|
||||
#: cs_appendtopic.cpp:91
|
||||
msgid ""
|
||||
"This command allows users to append text to a currently set\n"
|
||||
"channel topic. When TOPICLOCK is on, the topic is updated and\n"
|
||||
"the new, updated topic is locked."
|
||||
msgstr ""
|
||||
"Questo comando permette agli utenti di aggiungere del testo ad un topic di "
|
||||
"un canale\n"
|
||||
"già impostato. Se TOPICLOCK è attivato, il topic viene aggiornato e il nuovo "
|
||||
"topic\n"
|
||||
"Questo comando permette agli utenti di aggiungere del testo ad un topic di un canale\n"
|
||||
"già impostato. Se TOPICLOCK è attivato, il topic viene aggiornato e il nuovo topic\n"
|
||||
"viene bloccato."
|
||||
@@ -1,14 +1,14 @@
|
||||
# Dutch translations for cs_appendtopic
|
||||
# Engelse vertalingen voor het cs_appendtopic
|
||||
# Copyright (C) 2011 Anope Team
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as Anope IRC Services
|
||||
# Adam <adam@anope.org>, 2011.
|
||||
# Adam <adam@anope.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Anope\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-25 20:53-0400\n"
|
||||
"PO-Revision-Date: 2010-09-25 20:55-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: Dutch\n"
|
||||
@@ -17,15 +17,15 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../cs_appendtopic.cpp:106
|
||||
#: cs_appendtopic.cpp:105
|
||||
msgid " APPENDTOPIC Add text to a channels topic"
|
||||
msgstr " APPENDTOPIC Voeg tekst aan een kanaal onderwerp toe"
|
||||
|
||||
#: ../cs_appendtopic.cpp:90 ../cs_appendtopic.cpp:101
|
||||
#: cs_appendtopic.cpp:89 cs_appendtopic.cpp:100
|
||||
msgid "Syntax: APPENDTOPIC channel text"
|
||||
msgstr "Gebruik: APPENDTOPIC kanaal tekst"
|
||||
|
||||
#: ../cs_appendtopic.cpp:92
|
||||
#: cs_appendtopic.cpp:91
|
||||
msgid ""
|
||||
"This command allows users to append text to a currently set\n"
|
||||
"channel topic. When TOPICLOCK is on, the topic is updated and\n"
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-25 20:53-0400\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -16,15 +16,15 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: ../cs_appendtopic.cpp:106
|
||||
#: cs_appendtopic.cpp:105
|
||||
msgid " APPENDTOPIC Add text to a channels topic"
|
||||
msgstr ""
|
||||
|
||||
#: ../cs_appendtopic.cpp:90 ../cs_appendtopic.cpp:101
|
||||
#: cs_appendtopic.cpp:89 cs_appendtopic.cpp:100
|
||||
msgid "Syntax: APPENDTOPIC channel text"
|
||||
msgstr ""
|
||||
|
||||
#: ../cs_appendtopic.cpp:92
|
||||
#: cs_appendtopic.cpp:91
|
||||
msgid ""
|
||||
"This command allows users to append text to a currently set\n"
|
||||
"channel topic. When TOPICLOCK is on, the topic is updated and\n"
|
||||
@@ -1,13 +1,13 @@
|
||||
# Portuguese translations for cs_appendtopic
|
||||
# Copyright (C) 2011 Anope Team
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as Anope IRC Services
|
||||
# Adam <adam@anope.org>, 2011.
|
||||
# Adam <adam@anope.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Anope\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-25 20:53-0400\n"
|
||||
"PO-Revision-Date: 2010-09-25 21:00-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: Portuguese\n"
|
||||
@@ -16,15 +16,15 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../cs_appendtopic.cpp:106
|
||||
#: cs_appendtopic.cpp:105
|
||||
msgid " APPENDTOPIC Add text to a channels topic"
|
||||
msgstr " APPENDTOPIC Adiciona texto ao tópico de um canal"
|
||||
|
||||
#: ../cs_appendtopic.cpp:90 ../cs_appendtopic.cpp:101
|
||||
#: cs_appendtopic.cpp:89 cs_appendtopic.cpp:100
|
||||
msgid "Syntax: APPENDTOPIC channel text"
|
||||
msgstr "Sintaxe: APPENDTOPIC canal texto"
|
||||
|
||||
#: ../cs_appendtopic.cpp:92
|
||||
#: cs_appendtopic.cpp:91
|
||||
msgid ""
|
||||
"This command allows users to append text to a currently set\n"
|
||||
"channel topic. When TOPICLOCK is on, the topic is updated and\n"
|
||||
@@ -1,14 +1,14 @@
|
||||
# Russian translations for cs_appendtopic
|
||||
# ?????????? ???????? ??? ?????? cs_appendtopic
|
||||
# Copyright (C) 2011 Anope Team
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as Anope IRC Services
|
||||
# Adam <adam@anope.org>, 2011.
|
||||
# Adam <adam@anope.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Anope\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-25 20:53-0400\n"
|
||||
"PO-Revision-Date: 2010-09-25 21:02-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: Russian\n"
|
||||
@@ -18,23 +18,20 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
|
||||
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
|
||||
#: ../cs_appendtopic.cpp:106
|
||||
#: cs_appendtopic.cpp:105
|
||||
msgid " APPENDTOPIC Add text to a channels topic"
|
||||
msgstr " APPENDTOPIC Äîáàâëÿåò òåêñò ê òîïèêó êàíàëà"
|
||||
|
||||
#: ../cs_appendtopic.cpp:90 ../cs_appendtopic.cpp:101
|
||||
#: cs_appendtopic.cpp:89 cs_appendtopic.cpp:100
|
||||
msgid "Syntax: APPENDTOPIC channel text"
|
||||
msgstr "Ñèíòàêñèñ: APPENDTOPIC #êàíàë òåêñò"
|
||||
|
||||
#: ../cs_appendtopic.cpp:92
|
||||
#: cs_appendtopic.cpp:91
|
||||
msgid ""
|
||||
"This command allows users to append text to a currently set\n"
|
||||
"channel topic. When TOPICLOCK is on, the topic is updated and\n"
|
||||
"the new, updated topic is locked."
|
||||
msgstr ""
|
||||
"Данная команда позволяет добавить текст к топику, который установлен на "
|
||||
"указанном\n"
|
||||
"канале. Если активирован режим TOPICLOCK, топик будет обновлен и "
|
||||
"заблокирован.\n"
|
||||
"Примечание: текст будет ДОБАВЛЕН к топику, то есть старый топик удален НЕ "
|
||||
"БУДЕТ."
|
||||
"Данная команда позволяет добавить текст к топику, который установлен на указанном\n"
|
||||
"канале. Если активирован режим TOPICLOCK, топик будет обновлен и заблокирован.\n"
|
||||
"Примечание: текст будет ДОБАВЛЕН к топику, то есть старый топик удален НЕ БУДЕТ."
|
||||
@@ -1,14 +1,14 @@
|
||||
# German translations for cs_enforce
|
||||
# German messages for cs_enforce
|
||||
# Copyright (C) 2011 Anope Team
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as Anope IRC Services
|
||||
# Adam <adam@anope.org>, 2011.
|
||||
# Adam <adam@anope.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Anope\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-25 21:11-0400\n"
|
||||
"PO-Revision-Date: 2010-09-25 21:12-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: German\n"
|
||||
@@ -17,11 +17,11 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../cs_enforce.cpp:213
|
||||
#: cs_enforce.cpp:215
|
||||
msgid " ENFORCE Enforce various channel modes and set options"
|
||||
msgstr " ENFORCE Erzwingt verschieden Modes und SET Optionen"
|
||||
|
||||
#: ../cs_enforce.cpp:178
|
||||
#: cs_enforce.cpp:180
|
||||
msgid ""
|
||||
"Enforce various channel modes and set options. The channel\n"
|
||||
"option indicates what channel to enforce the modes and options\n"
|
||||
@@ -35,37 +35,37 @@ msgid ""
|
||||
"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n"
|
||||
"if it's not enabled."
|
||||
msgstr ""
|
||||
"Erzwingt verschieden Modes und SET Optionen. Die Channel\n"
|
||||
"Erzwingt verschieden Modes und SET Optionen. Die \037Channel\037\n"
|
||||
"Option zeigt dir den Channel an, indem Modes und Optionen\n"
|
||||
"zu erzwingen sind. Die was Option zeigt dir welche Modes\n"
|
||||
"zu erzwingen sind. Die \037was\037 Option zeigt dir welche Modes\n"
|
||||
"und Optionen zu erzwingen sind. Die können nur SET, SECUREOPS,\n"
|
||||
"RESTRICTED, MODES oder +R sein.Default ist SET.\n"
|
||||
" \n"
|
||||
"Wenn was SET ist, wird SECUREOPS und RESTRICTED\n"
|
||||
"Wenn \037was\037 SET ist, wird SECUREOPS und RESTRICTED\n"
|
||||
"auf die User die z.Z.in Channel sind erzwungen, wenn sie AN sind.\n"
|
||||
"Benutze SECUREOPS oder RESTRICTED , um die Optionen einzeln\n"
|
||||
"zu erzwingen, also wenn sie nicht eingeschaltet sind."
|
||||
|
||||
#: ../cs_enforce.cpp:145 ../cs_enforce.cpp:150 ../cs_enforce.cpp:155
|
||||
#: ../cs_enforce.cpp:160 ../cs_enforce.cpp:165
|
||||
#: cs_enforce.cpp:147 cs_enforce.cpp:152 cs_enforce.cpp:157 cs_enforce.cpp:162
|
||||
#: cs_enforce.cpp:167
|
||||
#, c-format
|
||||
msgid "Enforced %s"
|
||||
msgstr "Erzwungen %s"
|
||||
|
||||
#: ../cs_enforce.cpp:191
|
||||
#: cs_enforce.cpp:193
|
||||
msgid ""
|
||||
"If what is MODES, it will enforce channelmode +R if it is\n"
|
||||
"set. If +R is specified for what, the +R channelmode will\n"
|
||||
"also be enforced, but even if it is not set. If it is not set,\n"
|
||||
"users will be banned to ensure they don't just rejoin."
|
||||
msgstr ""
|
||||
"Wenn was MODES ist, wird das ChannelMode +R erzwungen\n"
|
||||
"falls an. Wenn was +R ist, wird +R erzwungen aber eben\n"
|
||||
"Wenn \037was\037 MODES ist, wird das ChannelMode +R erzwungen\n"
|
||||
"falls an. Wenn \037was\037 +R ist, wird +R erzwungen aber eben\n"
|
||||
"wenn noch nicht als Channel-Mode ist. Wenn +R noch nicht als\n"
|
||||
"Channel-Mode war werden alle User aus den Channel gebannt um\n"
|
||||
"sicher zu sein das sie nicht rejoinen."
|
||||
|
||||
#: ../cs_enforce.cpp:196
|
||||
#: cs_enforce.cpp:198
|
||||
msgid ""
|
||||
"If what is MODES, nothing will be enforced, since it would\n"
|
||||
"enforce modes that the current ircd does not support. If +R is\n"
|
||||
@@ -74,12 +74,12 @@ msgid ""
|
||||
"but have not identified for their nickname will be kicked and\n"
|
||||
"banned from the channel."
|
||||
msgstr ""
|
||||
"Wenn was MODES ist, wird nichts erzwungen weil es MODES seine\n"
|
||||
"können die dein IRCD nicht unterstützt. Wenn was +R ist\n"
|
||||
"Wenn \037was\037 MODES ist, wird nichts erzwungen weil es MODES seine\n"
|
||||
"können die dein IRCD nicht unterstützt. Wenn \037was\037 +R ist\n"
|
||||
"oder ein Modes was auf ein anderen IRCD gleich +R ist, wird es\n"
|
||||
"erzwungen. Alle User die nicht für deren Nicknamen identifiziert\n"
|
||||
"sind werden aus den Channel gekickt und gebannt."
|
||||
|
||||
#: ../cs_enforce.cpp:176 ../cs_enforce.cpp:208
|
||||
#: cs_enforce.cpp:178 cs_enforce.cpp:210
|
||||
msgid "Syntax: ENFORCE channel [what]"
|
||||
msgstr "Syntax: ENFORCE Channel [was]"
|
||||
msgstr "Syntax: \002ENFORCE \037Channel\037 [\037was\037]\002"
|
||||
@@ -1,14 +1,14 @@
|
||||
# Italian translations for cs_enforce
|
||||
# Traduzioni italiane per il cs_enforce
|
||||
# Copyright (C) 2011 Anope Team
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as Anope IRC Services
|
||||
# Adam <adam@anope.org>, 2011.
|
||||
# Adam <adam@anope.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Anope\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-25 21:11-0400\n"
|
||||
"PO-Revision-Date: 2010-09-25 21:55-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: Italian\n"
|
||||
@@ -17,11 +17,11 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../cs_enforce.cpp:213
|
||||
#: cs_enforce.cpp:215
|
||||
msgid " ENFORCE Enforce various channel modes and set options"
|
||||
msgstr " ENFORCE Forza diversi modi di canale ed opzioni SET"
|
||||
|
||||
#: ../cs_enforce.cpp:178
|
||||
#: cs_enforce.cpp:180
|
||||
msgid ""
|
||||
"Enforce various channel modes and set options. The channel\n"
|
||||
"option indicates what channel to enforce the modes and options\n"
|
||||
@@ -35,37 +35,37 @@ msgid ""
|
||||
"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n"
|
||||
"if it's not enabled."
|
||||
msgstr ""
|
||||
"Forza diversi modi di canale ed opzioni SET. Il parametro canale\n"
|
||||
"Forza diversi modi di canale ed opzioni SET. Il parametro \037canale\037\n"
|
||||
"indica il canale sul quale forzare i modi e le opzioni. Il parametro\n"
|
||||
"cosa indica i modi e le opzioni da forzare, e possono essere\n"
|
||||
"\037cosa\037 indica i modi e le opzioni da forzare, e possono essere\n"
|
||||
"qualsiasi delle opzioni SET, SECUREOPS, RESTRICTED, MODES, o +R.\n"
|
||||
"Se non specificato, viene sottointeso SET.\n"
|
||||
" \n"
|
||||
"Se cosa è SET, forzerà SECUREOPS e RESTRICTED sugli utenti\n"
|
||||
"Se \037cosa\037 è SET, forzerà SECUREOPS e RESTRICTED sugli utenti\n"
|
||||
"attualmente nel canale, se sono impostati. Specifica SECUREOPS per\n"
|
||||
"forzare l'opzione SECUREOPS, anche se non è attivata. Specifica\n"
|
||||
"RESTRICTED per forzare l'opzione RESTRICTED, anche se non è\n"
|
||||
"attivata."
|
||||
|
||||
#: ../cs_enforce.cpp:145 ../cs_enforce.cpp:150 ../cs_enforce.cpp:155
|
||||
#: ../cs_enforce.cpp:160 ../cs_enforce.cpp:165
|
||||
#: cs_enforce.cpp:147 cs_enforce.cpp:152 cs_enforce.cpp:157 cs_enforce.cpp:162
|
||||
#: cs_enforce.cpp:167
|
||||
#, c-format
|
||||
msgid "Enforced %s"
|
||||
msgstr "Forzato %s"
|
||||
|
||||
#: ../cs_enforce.cpp:191
|
||||
#: cs_enforce.cpp:193
|
||||
msgid ""
|
||||
"If what is MODES, it will enforce channelmode +R if it is\n"
|
||||
"set. If +R is specified for what, the +R channelmode will\n"
|
||||
"also be enforced, but even if it is not set. If it is not set,\n"
|
||||
"users will be banned to ensure they don't just rejoin."
|
||||
msgstr ""
|
||||
"Se cosa è MODES, forzerà il modo del canale +R se è impostato.\n"
|
||||
"Se +R è specificato per cosa, il modo del canale +R verrà\n"
|
||||
"Se \037cosa\037 è MODES, forzerà il modo del canale +R se è impostato.\n"
|
||||
"Se +R è specificato per \037cosa\037, il modo del canale +R verrà\n"
|
||||
"forzato, anche se non è impostato. Se non è impostato, gli utenti\n"
|
||||
"verranno bannati per assicurare che non rientrino semplicemente."
|
||||
|
||||
#: ../cs_enforce.cpp:196
|
||||
#: cs_enforce.cpp:198
|
||||
msgid ""
|
||||
"If what is MODES, nothing will be enforced, since it would\n"
|
||||
"enforce modes that the current ircd does not support. If +R is\n"
|
||||
@@ -74,12 +74,12 @@ msgid ""
|
||||
"but have not identified for their nickname will be kicked and\n"
|
||||
"banned from the channel."
|
||||
msgstr ""
|
||||
"Se cosa è MODES, niente verrà forzato, siccome forzerebbe\n"
|
||||
"Se \037cosa\037 è MODES, niente verrà forzato, siccome forzerebbe\n"
|
||||
"dei modi che l'ircd in uso non supporterebbe. Se +R è specificato\n"
|
||||
"per cosa, un modo equivalente a +R sui altri ircd verrà\n"
|
||||
"per \037cosa\037, un modo equivalente a +R sui altri ircd verrà\n"
|
||||
"forzato. Tutti gli utenti presenti nel canale ma non identificati\n"
|
||||
"per il loro nickname verranno bannati ed espulsi dal canale."
|
||||
|
||||
#: ../cs_enforce.cpp:176 ../cs_enforce.cpp:208
|
||||
#: cs_enforce.cpp:178 cs_enforce.cpp:210
|
||||
msgid "Syntax: ENFORCE channel [what]"
|
||||
msgstr "Sintassi: ENFORCE canale [cosa]"
|
||||
msgstr "Sintassi: \002ENFORCE \037canale\037 [\037cosa\037]\002"
|
||||
@@ -1,14 +1,14 @@
|
||||
# Dutch translations for cs_enforce
|
||||
# Engelse vertalingen voor het cs_enforce
|
||||
# Copyright (C) 2011 Anope Team
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as the Anope IRC Services
|
||||
# Adam <adam@anope.org>, 2011.
|
||||
# Adam <adam@anope.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Anope\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-25 21:06-0400\n"
|
||||
"PO-Revision-Date: 2010-09-25 21:07-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: Dutch\n"
|
||||
@@ -17,11 +17,11 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../cs_enforce.cpp:213
|
||||
#: cs_enforce.cpp:215
|
||||
msgid " ENFORCE Enforce various channel modes and set options"
|
||||
msgstr " ENFORCE Forceer enkele kanaalmodes en set-opties"
|
||||
|
||||
#: ../cs_enforce.cpp:178
|
||||
#: cs_enforce.cpp:180
|
||||
msgid ""
|
||||
"Enforce various channel modes and set options. The channel\n"
|
||||
"option indicates what channel to enforce the modes and options\n"
|
||||
@@ -35,39 +35,39 @@ msgid ""
|
||||
"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n"
|
||||
"if it's not enabled."
|
||||
msgstr ""
|
||||
"Forceer enkele kannalmodes en set-opties. De kanaal optie\n"
|
||||
"Forceer enkele kannalmodes en set-opties. De \037kanaal\037 optie\n"
|
||||
"geeft aan op welk kanaal de modes en opties geforceerd moeten\n"
|
||||
"worden. De wat optie geeft aan welke modes en opties\n"
|
||||
"worden. De \037wat\037 optie geeft aan welke modes en opties\n"
|
||||
"geforceerd moeten worden; dit kan SET, SECUREOPS, RESTRICTED,\n"
|
||||
"MODES, of +R zijn. Indien weggelaten is dit standaard SET.\n"
|
||||
" \n"
|
||||
"Als er voor wat SET wordt ingevuld, zullen SECUREOPS en\n"
|
||||
"Als er voor \037wat\037 SET wordt ingevuld, zullen SECUREOPS en\n"
|
||||
"RESTRICTED geforceerd worden op de gebruikers in het kanaal,\n"
|
||||
"maar alleen als die opties aangezet zijn voor het kanaal. Als\n"
|
||||
"SECUREOPS of RESTRICTED wordt gegeven voor wat zal die optie\n"
|
||||
"SECUREOPS of RESTRICTED wordt gegeven voor \037wat\037 zal die optie\n"
|
||||
"altijd geforceerd worden, ook als die niet is aangezet."
|
||||
|
||||
#: ../cs_enforce.cpp:145 ../cs_enforce.cpp:150 ../cs_enforce.cpp:155
|
||||
#: ../cs_enforce.cpp:160 ../cs_enforce.cpp:165
|
||||
#: cs_enforce.cpp:147 cs_enforce.cpp:152 cs_enforce.cpp:157 cs_enforce.cpp:162
|
||||
#: cs_enforce.cpp:167
|
||||
#, c-format
|
||||
msgid "Enforced %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../cs_enforce.cpp:191
|
||||
#: cs_enforce.cpp:193
|
||||
msgid ""
|
||||
"If what is MODES, it will enforce channelmode +R if it is\n"
|
||||
"set. If +R is specified for what, the +R channelmode will\n"
|
||||
"also be enforced, but even if it is not set. If it is not set,\n"
|
||||
"users will be banned to ensure they don't just rejoin."
|
||||
msgstr ""
|
||||
"Als er voor wat MODES wordt ingevuld, zal kanaalmode +R worden\n"
|
||||
"Als er voor \037wat\037 MODES wordt ingevuld, zal kanaalmode +R worden\n"
|
||||
"geforceerd, als die op het kanaal aan staat. Als +R wordt ingevuld,\n"
|
||||
"zal kanaalmode +R worden geforceerd, maar ook als die niet aanstaat voor het "
|
||||
"kanaal. Als +R niet aan staat, zullen alle ook\n"
|
||||
"zal kanaalmode +R worden geforceerd, maar ook als die niet aan"
|
||||
"staat voor het kanaal. Als +R niet aan staat, zullen alle ook\n"
|
||||
"gebanned worden om te zorgen dat ze niet opnieuw het kanaal binnen\n"
|
||||
"kunnen komen."
|
||||
|
||||
#: ../cs_enforce.cpp:196
|
||||
#: cs_enforce.cpp:198
|
||||
msgid ""
|
||||
"If what is MODES, nothing will be enforced, since it would\n"
|
||||
"enforce modes that the current ircd does not support. If +R is\n"
|
||||
@@ -76,13 +76,13 @@ msgid ""
|
||||
"but have not identified for their nickname will be kicked and\n"
|
||||
"banned from the channel."
|
||||
msgstr ""
|
||||
"Als er voor wat MODES wordt ingevuld, zal er niks gebeuren.\n"
|
||||
"Als er voor \037wat\037 MODES wordt ingevuld, zal er niks gebeuren.\n"
|
||||
"Normaal gesproken wordt er een kanaalmode geforceerd die op deze\n"
|
||||
"server niet ondersteund wordt. Als +R wordt ingevuld voor wat\n"
|
||||
"server niet ondersteund wordt. Als +R wordt ingevuld voor \037wat\037\n"
|
||||
"zullen alle gebruikers die in het kanaal zitten maar zich niet\n"
|
||||
"hebben geidentificeerd voor hun nick uit het kanaal gekicked en\n"
|
||||
"verbannen worden."
|
||||
|
||||
#: ../cs_enforce.cpp:176 ../cs_enforce.cpp:208
|
||||
#: cs_enforce.cpp:178 cs_enforce.cpp:210
|
||||
msgid "Syntax: ENFORCE channel [what]"
|
||||
msgstr "Syntax: ENFORCE kanaal [wat]"
|
||||
msgstr "Syntax: \002ENFORCE \037kanaal\037 [\037wat\037]\002"
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-25 21:11-0400\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -16,11 +16,11 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: ../cs_enforce.cpp:213
|
||||
#: cs_enforce.cpp:215
|
||||
msgid " ENFORCE Enforce various channel modes and set options"
|
||||
msgstr ""
|
||||
|
||||
#: ../cs_enforce.cpp:178
|
||||
#: cs_enforce.cpp:180
|
||||
msgid ""
|
||||
"Enforce various channel modes and set options. The channel\n"
|
||||
"option indicates what channel to enforce the modes and options\n"
|
||||
@@ -35,13 +35,13 @@ msgid ""
|
||||
"if it's not enabled."
|
||||
msgstr ""
|
||||
|
||||
#: ../cs_enforce.cpp:145 ../cs_enforce.cpp:150 ../cs_enforce.cpp:155
|
||||
#: ../cs_enforce.cpp:160 ../cs_enforce.cpp:165
|
||||
#: cs_enforce.cpp:147 cs_enforce.cpp:152 cs_enforce.cpp:157 cs_enforce.cpp:162
|
||||
#: cs_enforce.cpp:167
|
||||
#, c-format
|
||||
msgid "Enforced %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../cs_enforce.cpp:191
|
||||
#: cs_enforce.cpp:193
|
||||
msgid ""
|
||||
"If what is MODES, it will enforce channelmode +R if it is\n"
|
||||
"set. If +R is specified for what, the +R channelmode will\n"
|
||||
@@ -49,7 +49,7 @@ msgid ""
|
||||
"users will be banned to ensure they don't just rejoin."
|
||||
msgstr ""
|
||||
|
||||
#: ../cs_enforce.cpp:196
|
||||
#: cs_enforce.cpp:198
|
||||
msgid ""
|
||||
"If what is MODES, nothing will be enforced, since it would\n"
|
||||
"enforce modes that the current ircd does not support. If +R is\n"
|
||||
@@ -59,6 +59,6 @@ msgid ""
|
||||
"banned from the channel."
|
||||
msgstr ""
|
||||
|
||||
#: ../cs_enforce.cpp:176 ../cs_enforce.cpp:208
|
||||
#: cs_enforce.cpp:178 cs_enforce.cpp:210
|
||||
msgid "Syntax: ENFORCE channel [what]"
|
||||
msgstr ""
|
||||
@@ -1,13 +1,13 @@
|
||||
# Portuguese translations for cs_enforce
|
||||
# Copyright (C) 2011 Anope Team
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as the Anope IRC Services
|
||||
# Adam <adam@anope.org>, 2011.
|
||||
# Adam <adam@anope.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Anope\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-25 21:11-0400\n"
|
||||
"PO-Revision-Date: 2010-09-25 21:24-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: Portuguese\n"
|
||||
@@ -16,13 +16,11 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../cs_enforce.cpp:213
|
||||
#: cs_enforce.cpp:215
|
||||
msgid " ENFORCE Enforce various channel modes and set options"
|
||||
msgstr ""
|
||||
" ENFORCE Verifica o cumprimento de vários modos de canal e opções "
|
||||
"ajustadas"
|
||||
msgstr " ENFORCE Verifica o cumprimento de vários modos de canal e opções ajustadas"
|
||||
|
||||
#: ../cs_enforce.cpp:178
|
||||
#: cs_enforce.cpp:180
|
||||
msgid ""
|
||||
"Enforce various channel modes and set options. The channel\n"
|
||||
"option indicates what channel to enforce the modes and options\n"
|
||||
@@ -37,37 +35,36 @@ msgid ""
|
||||
"if it's not enabled."
|
||||
msgstr ""
|
||||
"Verifica o cumprimento de vários modos de canal e opções ajustadas.\n"
|
||||
"O campo canal indica qual canal deve ter os modos e opções verificadas\n"
|
||||
"O campo opção indica quais modos e opções devem ser verificadas,\n"
|
||||
"O campo \037canal\037 indica qual canal deve ter os modos e opções verificadas\n"
|
||||
"O campo \037opção\037 indica quais modos e opções devem ser verificadas,\n"
|
||||
"e pode ser: SET, SECUREOPS, RESTRICTED, MODES ou +R\n"
|
||||
"Quando deixado em branco, o padrão é SET.\n"
|
||||
" \n"
|
||||
"Se opção for SET, serão verificadas as opções SECUREOPS e RESTRICTED\n"
|
||||
"Se \037opção\037 for SET, serão verificadas as opções SECUREOPS e RESTRICTED\n"
|
||||
"para usuários que estiverem no canal, caso elas estejam ativadas. Use\n"
|
||||
"SECUREOPS para verificar a opção SECUREOPS, mesmo que ela não esteja "
|
||||
"ativada\n"
|
||||
"SECUREOPS para verificar a opção SECUREOPS, mesmo que ela não esteja ativada\n"
|
||||
"Use RESTRICTED para verificar a opção RESTRICTED, mesmo que ela não esteja\n"
|
||||
"ativada."
|
||||
|
||||
#: ../cs_enforce.cpp:145 ../cs_enforce.cpp:150 ../cs_enforce.cpp:155
|
||||
#: ../cs_enforce.cpp:160 ../cs_enforce.cpp:165
|
||||
#: cs_enforce.cpp:147 cs_enforce.cpp:152 cs_enforce.cpp:157 cs_enforce.cpp:162
|
||||
#: cs_enforce.cpp:167
|
||||
#, c-format
|
||||
msgid "Enforced %s"
|
||||
msgstr "Verificado %s"
|
||||
|
||||
#: ../cs_enforce.cpp:191
|
||||
#: cs_enforce.cpp:193
|
||||
msgid ""
|
||||
"If what is MODES, it will enforce channelmode +R if it is\n"
|
||||
"set. If +R is specified for what, the +R channelmode will\n"
|
||||
"also be enforced, but even if it is not set. If it is not set,\n"
|
||||
"users will be banned to ensure they don't just rejoin."
|
||||
msgstr ""
|
||||
"Se opção for MODES, será verificado o modo de canal +R caso ele\n"
|
||||
"esteja ativado. Se +R for especificado para opção, o modo de canal\n"
|
||||
"Se \037opção\037 for MODES, será verificado o modo de canal +R caso ele\n"
|
||||
"esteja ativado. Se +R for especificado para \037opção\037, o modo de canal\n"
|
||||
"+R também será verificado, mesmo que ele não esteja ativado. Se ele não\n"
|
||||
"estiver ativado, os usuários serão banidos para evitar que reentrem no canal."
|
||||
|
||||
#: ../cs_enforce.cpp:196
|
||||
#: cs_enforce.cpp:198
|
||||
msgid ""
|
||||
"If what is MODES, nothing will be enforced, since it would\n"
|
||||
"enforce modes that the current ircd does not support. If +R is\n"
|
||||
@@ -76,12 +73,12 @@ msgid ""
|
||||
"but have not identified for their nickname will be kicked and\n"
|
||||
"banned from the channel."
|
||||
msgstr ""
|
||||
"Se opção for MODES, nada será verificado, visto que isto poderia\n"
|
||||
"Se \037opção\037 for MODES, nada será verificado, visto que isto poderia\n"
|
||||
"verificar modos que o IRCd atual não suporta. Se +R for especificado\n"
|
||||
"para opção, um equivalente ao modo de canal +R em outros IRCds\n"
|
||||
"para \037opção\037, um equivalente ao modo de canal +R em outros IRCds\n"
|
||||
"será verificado. Todos os usuários que estão no canal, mas não estejam\n"
|
||||
"identificados para seus nicks serão kickados e banidos do canal."
|
||||
|
||||
#: ../cs_enforce.cpp:176 ../cs_enforce.cpp:208
|
||||
#: cs_enforce.cpp:178 cs_enforce.cpp:210
|
||||
msgid "Syntax: ENFORCE channel [what]"
|
||||
msgstr "Sintaxe: ENFORCE canal [opção]"
|
||||
msgstr "Sintaxe: \002ENFORCE \037canal\037 [\037opção\037]\002"
|
||||
@@ -1,14 +1,14 @@
|
||||
# Russian translations for cs_enforce
|
||||
# ?????????? ???????? ??? ?????? cs_enforce
|
||||
# Copyright (C) 2011 Anope Team
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as Anope IRC Services
|
||||
# Adam <adam@anope.org>, 2011.
|
||||
# Adam <adam@anope.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Anope\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-25 21:11-0400\n"
|
||||
"PO-Revision-Date: 2010-09-25 21:38-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: Russian\n"
|
||||
@@ -18,12 +18,11 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
|
||||
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
|
||||
#: ../cs_enforce.cpp:213
|
||||
#: cs_enforce.cpp:215
|
||||
msgid " ENFORCE Enforce various channel modes and set options"
|
||||
msgstr ""
|
||||
" ENFORCE Перепроверка и установка различных режимов и опций канала"
|
||||
msgstr " ENFORCE Перепроверка и установка различных режимов и опций канала"
|
||||
|
||||
#: ../cs_enforce.cpp:178
|
||||
#: cs_enforce.cpp:180
|
||||
msgid ""
|
||||
"Enforce various channel modes and set options. The channel\n"
|
||||
"option indicates what channel to enforce the modes and options\n"
|
||||
@@ -38,37 +37,35 @@ msgid ""
|
||||
"if it's not enabled."
|
||||
msgstr ""
|
||||
"Ïåðåïðîâåðêà è óñòàíîâêà ðàçëè÷íûõ ðåæèìîâ è îïöèé êàíàëà.\n"
|
||||
"Параметр указывает какие опции или режимы канала должны быть\n"
|
||||
"\037Параметр\037 указывает какие опции или режимы канала должны быть\n"
|
||||
"ïåðåïðîâåðåíû.  êà÷åñòâå ïàðàìåòðà ìîãóò áûòü óêàçàíû: SET, SECUREOPS,\n"
|
||||
"RESTRICTED, MODES, èëè +R. Åñëè ïàðàìåòð íå óêàçàí, ïî-óìîë÷àíèþ áóäåò SET.\n"
|
||||
" \n"
|
||||
"Если в качестве параметра указано SET, будут перепроверены опции\n"
|
||||
"Если в качестве \037параметра\037 указано SET, будут перепроверены опции\n"
|
||||
"SECUREOPS è RESTRICTED îòíîñèòåëüíî ïîëüçîâàòåëåé íà óêàçàííîì êàíàëå\n"
|
||||
"(ïðè óñëîâèè, ÷òî îïöèè âêëþ÷åíû). Îòäåëüíî óêàçàííûé ïàðàìåòð SECUREOPS\n"
|
||||
"применит опцию SECUREOPS (даже если она НЕ установлена). Параметр\n"
|
||||
"RESTRICTED применит опцию RESTRICTED (даже если она НЕ установлена)"
|
||||
"применит опцию SECUREOPS (даже если она \037НЕ\037 установлена). Параметр\n"
|
||||
"RESTRICTED применит опцию RESTRICTED (даже если она \037НЕ\037 установлена)"
|
||||
|
||||
#: ../cs_enforce.cpp:145 ../cs_enforce.cpp:150 ../cs_enforce.cpp:155
|
||||
#: ../cs_enforce.cpp:160 ../cs_enforce.cpp:165
|
||||
#: cs_enforce.cpp:147 cs_enforce.cpp:152 cs_enforce.cpp:157 cs_enforce.cpp:162
|
||||
#: cs_enforce.cpp:167
|
||||
#, c-format
|
||||
msgid "Enforced %s"
|
||||
msgstr "Ïåðåïðîâåðåíî: %s"
|
||||
|
||||
#: ../cs_enforce.cpp:191
|
||||
#: cs_enforce.cpp:193
|
||||
msgid ""
|
||||
"If what is MODES, it will enforce channelmode +R if it is\n"
|
||||
"set. If +R is specified for what, the +R channelmode will\n"
|
||||
"also be enforced, but even if it is not set. If it is not set,\n"
|
||||
"users will be banned to ensure they don't just rejoin."
|
||||
msgstr ""
|
||||
"Если в качестве параметра указано MODES, будет перепроверен режим +R\n"
|
||||
"(если он установлен). Отдельно указанный параметр +R применит\n"
|
||||
"канальный режим +R, даже если он не установлен, и забанит всех "
|
||||
"пользователей,\n"
|
||||
"которые не идентифицировались к своему нику или не имеют зарегистрированного "
|
||||
"ника."
|
||||
"Если в качестве \037параметра\037 указано MODES, будет перепроверен режим +R\n"
|
||||
"(если он установлен). Отдельно указанный параметр \037+R\037 применит\n"
|
||||
"канальный режим +R, даже если он не установлен, и забанит всех пользователей,\n"
|
||||
"которые не идентифицировались к своему нику или не имеют зарегистрированного ника."
|
||||
|
||||
#: ../cs_enforce.cpp:196
|
||||
#: cs_enforce.cpp:198
|
||||
msgid ""
|
||||
"If what is MODES, nothing will be enforced, since it would\n"
|
||||
"enforce modes that the current ircd does not support. If +R is\n"
|
||||
@@ -77,13 +74,12 @@ msgid ""
|
||||
"but have not identified for their nickname will be kicked and\n"
|
||||
"banned from the channel."
|
||||
msgstr ""
|
||||
"Если в качестве параметра указано MODES, перепроверка осуществлена\n"
|
||||
"Если в качестве \037параметра\037 указано MODES, перепроверка осуществлена\n"
|
||||
"ÍÅ ÁÓÄÅÒ, òàê êàê òåêóùèé IRCD íå ïîääåðæèâàåò íåîáõîäèìûå ðåæèìû.\n"
|
||||
"Отдельно указанный параметр +R применит канальный режим, эквивалентный\n"
|
||||
"режиму +R и забанит всех пользователей, которые не идентифицировались к "
|
||||
"своему\n"
|
||||
"Отдельно указанный параметр \037+R\037 применит канальный режим, эквивалентный\n"
|
||||
"режиму +R и забанит всех пользователей, которые не идентифицировались к своему\n"
|
||||
"íèêó èëè íå èìåþò çàðåãèñòðèðîâàííîãî íèêà."
|
||||
|
||||
#: ../cs_enforce.cpp:176 ../cs_enforce.cpp:208
|
||||
#: cs_enforce.cpp:178 cs_enforce.cpp:210
|
||||
msgid "Syntax: ENFORCE channel [what]"
|
||||
msgstr "Синтаксис: ENFORCE #канал параметр"
|
||||
msgstr "Синтаксис: \002ENFORCE \037#канал\037 \037параметр\037\002"
|
||||
@@ -1,14 +1,14 @@
|
||||
# German translations for cs_tban
|
||||
# German messages for cs_tban
|
||||
# Copyright (C) 2011 Anope Team
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as the Anope IRC Services
|
||||
# Adam <adam@anope.org>, 2011.
|
||||
# Adam <adam@anope.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Anope\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-26 00:14-0400\n"
|
||||
"PO-Revision-Date: 2010-09-26 00:16-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: German\n"
|
||||
@@ -17,16 +17,16 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../cs_tban.cpp:106
|
||||
#: cs_tban.cpp:104
|
||||
msgid " TBAN Bans the user for a given length of time"
|
||||
msgstr " TBAN Bant ein User für eine bestimmte Zeit aus ein Channel"
|
||||
|
||||
#: ../cs_tban.cpp:83
|
||||
#: cs_tban.cpp:81
|
||||
#, c-format
|
||||
msgid "%s banned from %s, will auto-expire in %s"
|
||||
msgstr "%s gebannt von %s, wird auto-auslaufen in %s"
|
||||
|
||||
#: ../cs_tban.cpp:93
|
||||
#: cs_tban.cpp:91
|
||||
msgid ""
|
||||
"Bans the given user from a channel for a specified length of\n"
|
||||
"time. If the ban is removed before by hand, it will NOT be replaced."
|
||||
@@ -34,6 +34,6 @@ msgstr ""
|
||||
"Bant ein User für eine bestimmte Zeit aus ein Channel\n"
|
||||
"Wenn der Ban manuell entfernt wird, wird es NICHT ersetzt."
|
||||
|
||||
#: ../cs_tban.cpp:101
|
||||
#: cs_tban.cpp:99
|
||||
msgid "Syntax: TBAN channel nick time"
|
||||
msgstr "Syntax: TBAN Channel Nickname Zeit"
|
||||
@@ -1,14 +1,14 @@
|
||||
# Italian translations for cs_tban
|
||||
# Traduzioni italiane per il cs_tban
|
||||
# Copyright (C) 2011 Anope Team
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as the Anope IRC Services
|
||||
# Adam <adam@anope.org>, 2011.
|
||||
# Adam <adam@anope.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Anope\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-26 00:14-0400\n"
|
||||
"PO-Revision-Date: 2010-09-26 00:22-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: Italian\n"
|
||||
@@ -17,24 +17,23 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../cs_tban.cpp:106
|
||||
#: cs_tban.cpp:104
|
||||
msgid " TBAN Bans the user for a given length of time"
|
||||
msgstr " TBAN Banna l'utente per un periodo di tempo specificato"
|
||||
|
||||
#: ../cs_tban.cpp:83
|
||||
#: cs_tban.cpp:81
|
||||
#, c-format
|
||||
msgid "%s banned from %s, will auto-expire in %s"
|
||||
msgstr "%s bannato da %s, scadrà automaticamente tra %s"
|
||||
|
||||
#: ../cs_tban.cpp:93
|
||||
#: cs_tban.cpp:91
|
||||
msgid ""
|
||||
"Bans the given user from a channel for a specified length of\n"
|
||||
"time. If the ban is removed before by hand, it will NOT be replaced."
|
||||
msgstr ""
|
||||
"Banna l'utente specificato da un canale per un periodo di tempo\n"
|
||||
"specificato. Se il ban viene rimosso a mano prima della scadenza, NON verrà "
|
||||
"rimpiazzato."
|
||||
"specificato. Se il ban viene rimosso a mano prima della scadenza, NON verrà rimpiazzato."
|
||||
|
||||
#: ../cs_tban.cpp:101
|
||||
#: cs_tban.cpp:99
|
||||
msgid "Syntax: TBAN channel nick time"
|
||||
msgstr "Sintassi: TBAN canale nick tempo"
|
||||
@@ -1,14 +1,14 @@
|
||||
# Dutch translations for cs_tban
|
||||
# Engelse vertalingen voor het cs_tban
|
||||
# Copyright (C) 2011 Anope Team
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as the Anope IRC Services
|
||||
# Adam <adam@anope.org>, 2011.
|
||||
# Adam <adam@anope.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Anope\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-26 00:14-0400\n"
|
||||
"PO-Revision-Date: 2010-09-26 00:15-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: Dutch\n"
|
||||
@@ -17,16 +17,16 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../cs_tban.cpp:106
|
||||
#: cs_tban.cpp:104
|
||||
msgid " TBAN Bans the user for a given length of time"
|
||||
msgstr " TBAN Verban een gebruiker voor een bepaalde tijd"
|
||||
|
||||
#: ../cs_tban.cpp:83
|
||||
#: cs_tban.cpp:81
|
||||
#, c-format
|
||||
msgid "%s banned from %s, will auto-expire in %s"
|
||||
msgstr "%s verbannen van %s, zal verlopen in %s"
|
||||
|
||||
#: ../cs_tban.cpp:93
|
||||
#: cs_tban.cpp:91
|
||||
msgid ""
|
||||
"Bans the given user from a channel for a specified length of\n"
|
||||
"time. If the ban is removed before by hand, it will NOT be replaced."
|
||||
@@ -35,6 +35,6 @@ msgstr ""
|
||||
"gegeven tijdsduur. Als de verbanning eerder wordt verwijderd,\n"
|
||||
"zal deze NIET worden vervangen."
|
||||
|
||||
#: ../cs_tban.cpp:101
|
||||
#: cs_tban.cpp:99
|
||||
msgid "Syntax: TBAN channel nick time"
|
||||
msgstr "Syntax: TBAN kanaal nick tijd"
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-26 00:14-0400\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -16,21 +16,21 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: ../cs_tban.cpp:106
|
||||
#: cs_tban.cpp:104
|
||||
msgid " TBAN Bans the user for a given length of time"
|
||||
msgstr ""
|
||||
|
||||
#: ../cs_tban.cpp:83
|
||||
#: cs_tban.cpp:81
|
||||
#, c-format
|
||||
msgid "%s banned from %s, will auto-expire in %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../cs_tban.cpp:93
|
||||
#: cs_tban.cpp:91
|
||||
msgid ""
|
||||
"Bans the given user from a channel for a specified length of\n"
|
||||
"time. If the ban is removed before by hand, it will NOT be replaced."
|
||||
msgstr ""
|
||||
|
||||
#: ../cs_tban.cpp:101
|
||||
#: cs_tban.cpp:99
|
||||
msgid "Syntax: TBAN channel nick time"
|
||||
msgstr ""
|
||||
@@ -1,13 +1,13 @@
|
||||
# Portuguese translations for cs_tban
|
||||
# Copyright (C) 2011 Anope Team
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as the Anope IRC Services
|
||||
# Adam <adam@anope.org>, 2011.
|
||||
# Adam <adam@anope.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Anope\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-26 00:14-0400\n"
|
||||
"PO-Revision-Date: 2010-09-26 00:18-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: Portuguese\n"
|
||||
@@ -16,24 +16,23 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../cs_tban.cpp:106
|
||||
#: cs_tban.cpp:104
|
||||
msgid " TBAN Bans the user for a given length of time"
|
||||
msgstr " TBAN Bane o usuário por um determinado período de tempo"
|
||||
|
||||
#: ../cs_tban.cpp:83
|
||||
#: cs_tban.cpp:81
|
||||
#, c-format
|
||||
msgid "%s banned from %s, will auto-expire in %s"
|
||||
msgstr "%s foi banido do %s, irá auto-expirar em %s"
|
||||
|
||||
#: ../cs_tban.cpp:93
|
||||
#: cs_tban.cpp:91
|
||||
msgid ""
|
||||
"Bans the given user from a channel for a specified length of\n"
|
||||
"time. If the ban is removed before by hand, it will NOT be replaced."
|
||||
msgstr ""
|
||||
"Bane de um canal o usuário especificado por um determinado período de\n"
|
||||
"tempo. Se o ban for removido manualmente antes do tempo, ele não será "
|
||||
"recolocado."
|
||||
"tempo. Se o ban for removido manualmente antes do tempo, ele não será recolocado."
|
||||
|
||||
#: ../cs_tban.cpp:101
|
||||
#: cs_tban.cpp:99
|
||||
msgid "Syntax: TBAN channel nick time"
|
||||
msgstr "Sintaxe: TBAN canal nick tempo"
|
||||
@@ -1,14 +1,14 @@
|
||||
# Russian translations for cs_tban
|
||||
# ?????????? ???????? ??? ?????? cs_tban
|
||||
# Copyright (C) 2011 Anope Team
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as the Anope IRC Services
|
||||
# Adam <adam@anope.org>, 2011.
|
||||
# Adam <adam@anope.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Anope\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-26 00:14-0400\n"
|
||||
"PO-Revision-Date: 2010-09-26 00:20-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: Russian\n"
|
||||
@@ -18,16 +18,16 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
|
||||
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
|
||||
#: ../cs_tban.cpp:106
|
||||
#: cs_tban.cpp:104
|
||||
msgid " TBAN Bans the user for a given length of time"
|
||||
msgstr " TBAN Áàíèò ïîëüçîâàòåëÿ íà óêàçàííûé ïðîìåæóòîê âðåìåíè"
|
||||
|
||||
#: ../cs_tban.cpp:83
|
||||
#: cs_tban.cpp:81
|
||||
#, c-format
|
||||
msgid "%s banned from %s, will auto-expire in %s"
|
||||
msgstr "Óñòàíîâëåííûé áàí %s íà êàíàëå %s èñòå÷åò ÷åðåç %s ñåêóíä"
|
||||
|
||||
#: ../cs_tban.cpp:93
|
||||
#: cs_tban.cpp:91
|
||||
msgid ""
|
||||
"Bans the given user from a channel for a specified length of\n"
|
||||
"time. If the ban is removed before by hand, it will NOT be replaced."
|
||||
@@ -36,6 +36,6 @@ msgstr ""
|
||||
"Ïðèìå÷àíèå: óäàëåííûé âðó÷íóþ (äî ñâîåãî èñòå÷åíèÿ) áàí ÍÅ ÁÓÄÅÒ\n"
|
||||
"ïåðåóñòàíîâëåí ñåðâèñàìè àâòîìàòè÷åñêè!"
|
||||
|
||||
#: ../cs_tban.cpp:101
|
||||
#: cs_tban.cpp:99
|
||||
msgid "Syntax: TBAN channel nick time"
|
||||
msgstr "Ñèíòàêñèñ: TBAN #êàíàë íèê âðåìÿ"
|
||||
@@ -1,14 +1,14 @@
|
||||
# Italian translations for hs_request
|
||||
# Traduzioni italiane per il hs_request
|
||||
# Copyright (C) 2011 Anope Team
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as Anope IRC Services
|
||||
# Adam <adam@anope.org>, 2011.
|
||||
# Adam <adam@anope.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Anope\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-25 22:23-0400\n"
|
||||
"PO-Revision-Date: 2010-09-25 23:42-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: Italian\n"
|
||||
@@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../hs_request.cpp:193
|
||||
#: hs_request.cpp:195
|
||||
msgid ""
|
||||
" ACTIVATE Approve the requested vHost of a user\n"
|
||||
" REJECT Reject the requested vHost of a user\n"
|
||||
@@ -27,48 +27,33 @@ msgstr ""
|
||||
" REJECT Rifiuta il vHost richiesto di un utente\n"
|
||||
" WAITING Comando per LIST +req"
|
||||
|
||||
#: ../hs_request.cpp:132
|
||||
#: hs_request.cpp:137
|
||||
msgid " REQUEST Request a vHost for your nick"
|
||||
msgstr " REQUEST Richiede un vHost per il tuo nick"
|
||||
|
||||
#: ../hs_request.cpp:274
|
||||
#, c-format
|
||||
msgid "#%d Nick:%s, vhost:%s (%s - %s)"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:272
|
||||
#, c-format
|
||||
msgid "#%d Nick:%s, vhost:%s@%s (%s - %s)"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:181 ../hs_request.cpp:245
|
||||
#: hs_request.cpp:183 hs_request.cpp:245
|
||||
msgid "A memo informing the user will also be sent."
|
||||
msgstr "Viene inviato un memo per informare l'utente."
|
||||
|
||||
#: ../hs_request.cpp:179
|
||||
#: hs_request.cpp:181
|
||||
msgid "Activate the requested vHost for the given nick."
|
||||
msgstr "Attiva il vHost richiesto per il nick specificato."
|
||||
|
||||
#: ../hs_request.cpp:278
|
||||
#, c-format
|
||||
msgid "Displayed all records (Count: %d)"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:167 ../hs_request.cpp:234
|
||||
#: hs_request.cpp:169 hs_request.cpp:234
|
||||
#, c-format
|
||||
msgid "No request for nick %s found."
|
||||
msgstr "Nessuna richiesta trovata per il nick %s."
|
||||
|
||||
#: ../hs_request.cpp:102
|
||||
#: hs_request.cpp:104
|
||||
#, c-format
|
||||
msgid "Please wait %d seconds before requesting a new vHost"
|
||||
msgstr "Prego attendere %d secondi prima di richiedere un nuovo vHost"
|
||||
|
||||
#: ../hs_request.cpp:243
|
||||
#: hs_request.cpp:243
|
||||
msgid "Reject the requested vHost for the given nick."
|
||||
msgstr "Rifiuta il vHost richiesto per il nick specificato."
|
||||
|
||||
#: ../hs_request.cpp:119
|
||||
#: hs_request.cpp:124
|
||||
msgid ""
|
||||
"Request the given vHost to be actived for your nick by the\n"
|
||||
"network administrators. Please be patient while your request\n"
|
||||
@@ -78,23 +63,23 @@ msgstr ""
|
||||
"degli amministratori di rete. Sei pregato di pazientare finchè la tua\n"
|
||||
"richiesta viene elaborata."
|
||||
|
||||
#: ../hs_request.cpp:177 ../hs_request.cpp:188
|
||||
#: hs_request.cpp:179 hs_request.cpp:190
|
||||
msgid "Syntax: ACTIVATE nick"
|
||||
msgstr "Sintassi: ACTIVATE nick"
|
||||
msgstr "Sintassi: \002ACTIVATE \037nick\037\002"
|
||||
|
||||
#: ../hs_request.cpp:241 ../hs_request.cpp:252
|
||||
#: hs_request.cpp:241 hs_request.cpp:252
|
||||
msgid "Syntax: REJECT nick"
|
||||
msgstr "Sintassi: REJECT nick"
|
||||
msgstr "Sintassi: \002REJECT \037nick\037\002"
|
||||
|
||||
#: ../hs_request.cpp:65 ../hs_request.cpp:117 ../hs_request.cpp:127
|
||||
#: hs_request.cpp:65 hs_request.cpp:122 hs_request.cpp:132
|
||||
msgid "Syntax: REQUEST vhost"
|
||||
msgstr "Sintassi: REQUEST vhost"
|
||||
msgstr "Sintassi: \002REQUEST \037vhost\037\002"
|
||||
|
||||
#: ../hs_request.cpp:307
|
||||
#: hs_request.cpp:307
|
||||
msgid "Syntax: WAITING"
|
||||
msgstr "Sintassi: WAITING"
|
||||
msgstr "Sintassi: \002WAITING\002"
|
||||
|
||||
#: ../hs_request.cpp:309
|
||||
#: hs_request.cpp:309
|
||||
msgid ""
|
||||
"This command is provided for convenience. It is essentially\n"
|
||||
"the same as performing a LIST +req ."
|
||||
@@ -102,34 +87,35 @@ msgstr ""
|
||||
"Questo comando è per comodità. Praticamente è la stessa cosa che\n"
|
||||
"eseguire un LIST +req ."
|
||||
|
||||
#: ../hs_request.cpp:108
|
||||
#: hs_request.cpp:110
|
||||
msgid "Your vHost has been requested"
|
||||
msgstr "Il tuo vHost è stato richiesto"
|
||||
|
||||
#: ../hs_request.cpp:159
|
||||
#: hs_request.cpp:161
|
||||
msgid "[auto memo] Your requested vHost has been approved."
|
||||
msgstr "[auto memo] Il vHost da te richiesto è stato approvato."
|
||||
|
||||
#: ../hs_request.cpp:225
|
||||
#: hs_request.cpp:225
|
||||
#, c-format
|
||||
msgid "[auto memo] Your requested vHost has been rejected."
|
||||
msgstr "[auto memo] Il vHost da te richiesto è stato rifiutato."
|
||||
|
||||
#: ../hs_request.cpp:223
|
||||
#: hs_request.cpp:223
|
||||
#, c-format
|
||||
msgid "[auto memo] Your requested vHost has been rejected. Reason: %s"
|
||||
msgstr "[auto memo] Il vHost da te richiesto è stato rifiutato. Motivo: %s"
|
||||
|
||||
#: ../hs_request.cpp:443
|
||||
#: hs_request.cpp:646
|
||||
#, c-format
|
||||
msgid "[auto memo] vHost %s has been requested."
|
||||
msgstr "[auto memo] è stato richiesto il vHost %s."
|
||||
msgstr "[auto memo] è stato richiesto il vHost \002%s\002."
|
||||
|
||||
#: ../hs_request.cpp:161
|
||||
#: hs_request.cpp:163
|
||||
#, c-format
|
||||
msgid "vHost for %s has been activated"
|
||||
msgstr "Il vHost per %s è stato attivato"
|
||||
|
||||
#: ../hs_request.cpp:230
|
||||
#: hs_request.cpp:230
|
||||
#, c-format
|
||||
msgid "vHost for %s has been rejected"
|
||||
msgstr "Il vHost per %s è stato rifiutato"
|
||||
@@ -1,14 +1,14 @@
|
||||
# Dutch translations for hs_request
|
||||
# Engelse vertalingen voor het hs_request
|
||||
# Copyright (C) 2011 Anope Team
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as Anope IRC Services
|
||||
# Adam <adam@anope.org>, 2011.
|
||||
# Adam <adam@anope.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Anope\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-25 22:23-0400\n"
|
||||
"PO-Revision-Date: 2010-09-25 22:26-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: Dutch\n"
|
||||
@@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../hs_request.cpp:193
|
||||
#: hs_request.cpp:195
|
||||
msgid ""
|
||||
" ACTIVATE Approve the requested vHost of a user\n"
|
||||
" REJECT Reject the requested vHost of a user\n"
|
||||
@@ -27,49 +27,33 @@ msgstr ""
|
||||
" REJECT Keur de aangevraagde vHost voor een gebruiker af\n"
|
||||
" WAITING Snelkoppeling naar LIST +req"
|
||||
|
||||
#: ../hs_request.cpp:132
|
||||
#: hs_request.cpp:137
|
||||
msgid " REQUEST Request a vHost for your nick"
|
||||
msgstr " REQUEST Vraag een vHost aan voor je nick"
|
||||
|
||||
#: ../hs_request.cpp:274
|
||||
#, c-format
|
||||
msgid "#%d Nick:%s, vhost:%s (%s - %s)"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:272
|
||||
#, c-format
|
||||
msgid "#%d Nick:%s, vhost:%s@%s (%s - %s)"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:181 ../hs_request.cpp:245
|
||||
#: hs_request.cpp:183 hs_request.cpp:245
|
||||
msgid "A memo informing the user will also be sent."
|
||||
msgstr ""
|
||||
"Een memo die de gebruiker op de hoogste stelt zal ook worden verstuurd."
|
||||
msgstr "Een memo die de gebruiker op de hoogste stelt zal ook worden verstuurd."
|
||||
|
||||
#: ../hs_request.cpp:179
|
||||
#: hs_request.cpp:181
|
||||
msgid "Activate the requested vHost for the given nick."
|
||||
msgstr "Activeer de aangevraagde vHost voor de gegeven nick."
|
||||
|
||||
#: ../hs_request.cpp:278
|
||||
#, c-format
|
||||
msgid "Displayed all records (Count: %d)"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:167 ../hs_request.cpp:234
|
||||
#: hs_request.cpp:169 hs_request.cpp:234
|
||||
#, c-format
|
||||
msgid "No request for nick %s found."
|
||||
msgstr "Geen aanvraag voor nick %s gevonden."
|
||||
|
||||
#: ../hs_request.cpp:102
|
||||
#: hs_request.cpp:104
|
||||
#, c-format
|
||||
msgid "Please wait %d seconds before requesting a new vHost"
|
||||
msgstr "Wacht %d seconden voor je een nieuwe vHost aanvraagt"
|
||||
|
||||
#: ../hs_request.cpp:243
|
||||
#: hs_request.cpp:243
|
||||
msgid "Reject the requested vHost for the given nick."
|
||||
msgstr "Keur de aangevraagde vHost voor de gegeven nick af."
|
||||
|
||||
#: ../hs_request.cpp:119
|
||||
#: hs_request.cpp:124
|
||||
msgid ""
|
||||
"Request the given vHost to be actived for your nick by the\n"
|
||||
"network administrators. Please be patient while your request\n"
|
||||
@@ -79,23 +63,23 @@ msgstr ""
|
||||
"netwerk beheerders. Het kan even duren voordat je aanvraag\n"
|
||||
"afgehandeld wordt."
|
||||
|
||||
#: ../hs_request.cpp:177 ../hs_request.cpp:188
|
||||
#: hs_request.cpp:179 hs_request.cpp:190
|
||||
msgid "Syntax: ACTIVATE nick"
|
||||
msgstr "Gebruik: ACTIVATE nick"
|
||||
msgstr "Gebruik: \002ACTIVATE \037nick\037\002"
|
||||
|
||||
#: ../hs_request.cpp:241 ../hs_request.cpp:252
|
||||
#: hs_request.cpp:241 hs_request.cpp:252
|
||||
msgid "Syntax: REJECT nick"
|
||||
msgstr "Gebruik: REJECT nick"
|
||||
msgstr "Gebruik: \002REJECT \037nick\037\002"
|
||||
|
||||
#: ../hs_request.cpp:65 ../hs_request.cpp:117 ../hs_request.cpp:127
|
||||
#: hs_request.cpp:65 hs_request.cpp:122 hs_request.cpp:132
|
||||
msgid "Syntax: REQUEST vhost"
|
||||
msgstr "Gebruik: REQUEST vhost"
|
||||
msgstr "Gebruik: \002REQUEST \037vhost\037\002"
|
||||
|
||||
#: ../hs_request.cpp:307
|
||||
#: hs_request.cpp:307
|
||||
msgid "Syntax: WAITING"
|
||||
msgstr "Gebruik: WAITING"
|
||||
msgstr "Gebruik: \002WAITING\002"
|
||||
|
||||
#: ../hs_request.cpp:309
|
||||
#: hs_request.cpp:309
|
||||
msgid ""
|
||||
"This command is provided for convenience. It is essentially\n"
|
||||
"the same as performing a LIST +req ."
|
||||
@@ -103,34 +87,35 @@ msgstr ""
|
||||
"Dit commando is beschikbaar als handigheid. Het is simpelweg\n"
|
||||
"hetzelfde als LIST +req ."
|
||||
|
||||
#: ../hs_request.cpp:108
|
||||
#: hs_request.cpp:110
|
||||
msgid "Your vHost has been requested"
|
||||
msgstr "Je vHost is aangevraagd"
|
||||
|
||||
#: ../hs_request.cpp:159
|
||||
#: hs_request.cpp:161
|
||||
msgid "[auto memo] Your requested vHost has been approved."
|
||||
msgstr "[auto memo] Je aangevraagde vHost is geaccepteerd."
|
||||
|
||||
#: ../hs_request.cpp:225
|
||||
#: hs_request.cpp:225
|
||||
#, c-format
|
||||
msgid "[auto memo] Your requested vHost has been rejected."
|
||||
msgstr "[auto memo] Je aangevraagde vHost is afgekeurd."
|
||||
|
||||
#: ../hs_request.cpp:223
|
||||
#: hs_request.cpp:223
|
||||
#, c-format
|
||||
msgid "[auto memo] Your requested vHost has been rejected. Reason: %s"
|
||||
msgstr "[auto memo] Je aangevraagde vHost is afgekeurd. Reden: %s"
|
||||
|
||||
#: ../hs_request.cpp:443
|
||||
#: hs_request.cpp:646
|
||||
#, c-format
|
||||
msgid "[auto memo] vHost %s has been requested."
|
||||
msgstr "[auto memo] vHost %s is aangevraagd."
|
||||
msgstr "[auto memo] vHost \002%s\002 is aangevraagd."
|
||||
|
||||
#: ../hs_request.cpp:161
|
||||
#: hs_request.cpp:163
|
||||
#, c-format
|
||||
msgid "vHost for %s has been activated"
|
||||
msgstr "vHost voor %s is geactiveerd"
|
||||
|
||||
#: ../hs_request.cpp:230
|
||||
#: hs_request.cpp:230
|
||||
#, c-format
|
||||
msgid "vHost for %s has been rejected"
|
||||
msgstr "vHost voor %s is afgekeurd"
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-25 22:23-0400\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -16,111 +16,97 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: ../hs_request.cpp:193
|
||||
#: hs_request.cpp:195
|
||||
msgid ""
|
||||
" ACTIVATE Approve the requested vHost of a user\n"
|
||||
" REJECT Reject the requested vHost of a user\n"
|
||||
" WAITING Convenience command for LIST +req"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:132
|
||||
#: hs_request.cpp:137
|
||||
msgid " REQUEST Request a vHost for your nick"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:274
|
||||
#, c-format
|
||||
msgid "#%d Nick:%s, vhost:%s (%s - %s)"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:272
|
||||
#, c-format
|
||||
msgid "#%d Nick:%s, vhost:%s@%s (%s - %s)"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:181 ../hs_request.cpp:245
|
||||
#: hs_request.cpp:183 hs_request.cpp:245
|
||||
msgid "A memo informing the user will also be sent."
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:179
|
||||
#: hs_request.cpp:181
|
||||
msgid "Activate the requested vHost for the given nick."
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:278
|
||||
#, c-format
|
||||
msgid "Displayed all records (Count: %d)"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:167 ../hs_request.cpp:234
|
||||
#: hs_request.cpp:169 hs_request.cpp:234
|
||||
#, c-format
|
||||
msgid "No request for nick %s found."
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:102
|
||||
#: hs_request.cpp:104
|
||||
#, c-format
|
||||
msgid "Please wait %d seconds before requesting a new vHost"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:243
|
||||
#: hs_request.cpp:243
|
||||
msgid "Reject the requested vHost for the given nick."
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:119
|
||||
#: hs_request.cpp:124
|
||||
msgid ""
|
||||
"Request the given vHost to be actived for your nick by the\n"
|
||||
"network administrators. Please be patient while your request\n"
|
||||
"is being considered."
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:177 ../hs_request.cpp:188
|
||||
#: hs_request.cpp:179 hs_request.cpp:190
|
||||
msgid "Syntax: ACTIVATE nick"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:241 ../hs_request.cpp:252
|
||||
#: hs_request.cpp:241 hs_request.cpp:252
|
||||
msgid "Syntax: REJECT nick"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:65 ../hs_request.cpp:117 ../hs_request.cpp:127
|
||||
#: hs_request.cpp:65 hs_request.cpp:122 hs_request.cpp:132
|
||||
msgid "Syntax: REQUEST vhost"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:307
|
||||
#: hs_request.cpp:307
|
||||
msgid "Syntax: WAITING"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:309
|
||||
#: hs_request.cpp:309
|
||||
msgid ""
|
||||
"This command is provided for convenience. It is essentially\n"
|
||||
"the same as performing a LIST +req ."
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:108
|
||||
#: hs_request.cpp:110
|
||||
msgid "Your vHost has been requested"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:159
|
||||
#: hs_request.cpp:161
|
||||
msgid "[auto memo] Your requested vHost has been approved."
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:225
|
||||
#: hs_request.cpp:225
|
||||
#, c-format
|
||||
msgid "[auto memo] Your requested vHost has been rejected."
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:223
|
||||
#: hs_request.cpp:223
|
||||
#, c-format
|
||||
msgid "[auto memo] Your requested vHost has been rejected. Reason: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:443
|
||||
#: hs_request.cpp:646
|
||||
#, c-format
|
||||
msgid "[auto memo] vHost %s has been requested."
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:161
|
||||
#: hs_request.cpp:163
|
||||
#, c-format
|
||||
msgid "vHost for %s has been activated"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:230
|
||||
#: hs_request.cpp:230
|
||||
#, c-format
|
||||
msgid "vHost for %s has been rejected"
|
||||
msgstr ""
|
||||
@@ -1,13 +1,13 @@
|
||||
# Portuguese translations for hs_request
|
||||
# Copyright (C) 2011 Anope Team
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as Anope IRC Services
|
||||
# Adam <adam@anope.org>, 2011.
|
||||
# Adam <adam@anope.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Anope\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-25 22:23-0400\n"
|
||||
"PO-Revision-Date: 2010-09-25 22:48-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: Portuguese\n"
|
||||
@@ -16,7 +16,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../hs_request.cpp:193
|
||||
#: hs_request.cpp:195
|
||||
msgid ""
|
||||
" ACTIVATE Approve the requested vHost of a user\n"
|
||||
" REJECT Reject the requested vHost of a user\n"
|
||||
@@ -26,48 +26,33 @@ msgstr ""
|
||||
" REJECT Recusa o pedido de vHost de um usuário\n"
|
||||
" WAITING Comando para LISTAR +req"
|
||||
|
||||
#: ../hs_request.cpp:132
|
||||
#: hs_request.cpp:137
|
||||
msgid " REQUEST Request a vHost for your nick"
|
||||
msgstr " REQUEST Request a vHost for your nick"
|
||||
|
||||
#: ../hs_request.cpp:274
|
||||
#, c-format
|
||||
msgid "#%d Nick:%s, vhost:%s (%s - %s)"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:272
|
||||
#, c-format
|
||||
msgid "#%d Nick:%s, vhost:%s@%s (%s - %s)"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:181 ../hs_request.cpp:245
|
||||
#: hs_request.cpp:183 hs_request.cpp:245
|
||||
msgid "A memo informing the user will also be sent."
|
||||
msgstr "Um memo informando o usuário também será enviado."
|
||||
|
||||
#: ../hs_request.cpp:179
|
||||
#: hs_request.cpp:181
|
||||
msgid "Activate the requested vHost for the given nick."
|
||||
msgstr "Ativa o vHost solicitado para o nick fornecido."
|
||||
|
||||
#: ../hs_request.cpp:278
|
||||
#, c-format
|
||||
msgid "Displayed all records (Count: %d)"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:167 ../hs_request.cpp:234
|
||||
#: hs_request.cpp:169 hs_request.cpp:234
|
||||
#, c-format
|
||||
msgid "No request for nick %s found."
|
||||
msgstr "Nenhum pedido encontrado para o nick %s."
|
||||
|
||||
#: ../hs_request.cpp:102
|
||||
#: hs_request.cpp:104
|
||||
#, c-format
|
||||
msgid "Please wait %d seconds before requesting a new vHost"
|
||||
msgstr "Por favor, espere %d segundos antes de fazer um novo pedido de vHost"
|
||||
|
||||
#: ../hs_request.cpp:243
|
||||
#: hs_request.cpp:243
|
||||
msgid "Reject the requested vHost for the given nick."
|
||||
msgstr "Recusa o pedido de vHost para o nick fornecido."
|
||||
|
||||
#: ../hs_request.cpp:119
|
||||
#: hs_request.cpp:124
|
||||
msgid ""
|
||||
"Request the given vHost to be actived for your nick by the\n"
|
||||
"network administrators. Please be patient while your request\n"
|
||||
@@ -77,23 +62,23 @@ msgstr ""
|
||||
"administradores da rede. Por favor, tenha paciência\n"
|
||||
"enquanto seu pedido é analisado."
|
||||
|
||||
#: ../hs_request.cpp:177 ../hs_request.cpp:188
|
||||
#: hs_request.cpp:179 hs_request.cpp:190
|
||||
msgid "Syntax: ACTIVATE nick"
|
||||
msgstr "Sintaxe: ACTIVATE nick"
|
||||
msgstr "Sintaxe: \002ACTIVATE \037nick\037\002"
|
||||
|
||||
#: ../hs_request.cpp:241 ../hs_request.cpp:252
|
||||
#: hs_request.cpp:241 hs_request.cpp:252
|
||||
msgid "Syntax: REJECT nick"
|
||||
msgstr "Sintaxe: REJECT nick"
|
||||
msgstr "Sintaxe: \002REJECT \037nick\037\002"
|
||||
|
||||
#: ../hs_request.cpp:65 ../hs_request.cpp:117 ../hs_request.cpp:127
|
||||
#: hs_request.cpp:65 hs_request.cpp:122 hs_request.cpp:132
|
||||
msgid "Syntax: REQUEST vhost"
|
||||
msgstr "Sintaxe: REQUEST vhost"
|
||||
msgstr "Sintaxe: \002REQUEST \037vhost\037\002"
|
||||
|
||||
#: ../hs_request.cpp:307
|
||||
#: hs_request.cpp:307
|
||||
msgid "Syntax: WAITING"
|
||||
msgstr "Sintaxe: WAITING"
|
||||
msgstr "Sintaxe: \002WAITING\002"
|
||||
|
||||
#: ../hs_request.cpp:309
|
||||
#: hs_request.cpp:309
|
||||
msgid ""
|
||||
"This command is provided for convenience. It is essentially\n"
|
||||
"the same as performing a LIST +req ."
|
||||
@@ -101,34 +86,35 @@ msgstr ""
|
||||
"Este comando é usado por conveniência. É essencialmente\n"
|
||||
"o mesmo que fazer um LIST +req"
|
||||
|
||||
#: ../hs_request.cpp:108
|
||||
#: hs_request.cpp:110
|
||||
msgid "Your vHost has been requested"
|
||||
msgstr "Seu pedido de vHost foi encaminhado"
|
||||
|
||||
#: ../hs_request.cpp:159
|
||||
#: hs_request.cpp:161
|
||||
msgid "[auto memo] Your requested vHost has been approved."
|
||||
msgstr "[Auto Memo] Seu pedido de vHost foi aprovado."
|
||||
|
||||
#: ../hs_request.cpp:225
|
||||
#: hs_request.cpp:225
|
||||
#, c-format
|
||||
msgid "[auto memo] Your requested vHost has been rejected."
|
||||
msgstr "[Auto Memo] Seu pedido de vHost foi recusado."
|
||||
|
||||
#: ../hs_request.cpp:223
|
||||
#: hs_request.cpp:223
|
||||
#, c-format
|
||||
msgid "[auto memo] Your requested vHost has been rejected. Reason: %s"
|
||||
msgstr "[Auto Memo] Seu pedido de vHost foi recusado. Motivo: %s"
|
||||
|
||||
#: ../hs_request.cpp:443
|
||||
#: hs_request.cpp:646
|
||||
#, c-format
|
||||
msgid "[auto memo] vHost %s has been requested."
|
||||
msgstr "[Auto Memo] O vHost %s foi solicitado."
|
||||
msgstr "[Auto Memo] O vHost \002%s\002 foi solicitado."
|
||||
|
||||
#: ../hs_request.cpp:161
|
||||
#: hs_request.cpp:163
|
||||
#, c-format
|
||||
msgid "vHost for %s has been activated"
|
||||
msgstr "O vHost para %s foi ativado"
|
||||
|
||||
#: ../hs_request.cpp:230
|
||||
#: hs_request.cpp:230
|
||||
#, c-format
|
||||
msgid "vHost for %s has been rejected"
|
||||
msgstr "O vHost de %s foi recusado"
|
||||
@@ -1,14 +1,14 @@
|
||||
# Russian translations for hs_request
|
||||
# ?????????? ???????? ??? ?????? PACKAGE.
|
||||
# Copyright (C) 2011 Anope Team
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as Anope IRC Services
|
||||
# Adam <adam@anope.org>, 2011.
|
||||
# Adam <adam@anope.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Anope\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-25 22:23-0400\n"
|
||||
"PO-Revision-Date: 2010-09-25 23:27-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: Russian\n"
|
||||
@@ -18,7 +18,7 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
|
||||
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
|
||||
#: ../hs_request.cpp:193
|
||||
#: hs_request.cpp:195
|
||||
msgid ""
|
||||
" ACTIVATE Approve the requested vHost of a user\n"
|
||||
" REJECT Reject the requested vHost of a user\n"
|
||||
@@ -28,48 +28,33 @@ msgstr ""
|
||||
" REJECT Îòêëîíèòü çàïðàøèâàåìûé ïîëüçîâàòåëåì vHost\n"
|
||||
" WAITING Ñïèñîê çàïðîñîâ îæèäàþùèõ îáðàáîòêè (àíàëîã LIST +req)"
|
||||
|
||||
#: ../hs_request.cpp:132
|
||||
#: hs_request.cpp:137
|
||||
msgid " REQUEST Request a vHost for your nick"
|
||||
msgstr " REQUEST Çàïðîñ íà vHost äëÿ âàøåãî òåêóùåãî íèêà"
|
||||
|
||||
#: ../hs_request.cpp:274
|
||||
#, c-format
|
||||
msgid "#%d Nick:%s, vhost:%s (%s - %s)"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:272
|
||||
#, c-format
|
||||
msgid "#%d Nick:%s, vhost:%s@%s (%s - %s)"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:181 ../hs_request.cpp:245
|
||||
#: hs_request.cpp:183 hs_request.cpp:245
|
||||
msgid "A memo informing the user will also be sent."
|
||||
msgstr "Ïîëüçîâàòåëþ áóäåò ïîñëàíî àâòî-óâåäîìëåíèå îá àêòèâàöèè åãî çàïðîñà."
|
||||
|
||||
#: ../hs_request.cpp:179
|
||||
#: hs_request.cpp:181
|
||||
msgid "Activate the requested vHost for the given nick."
|
||||
msgstr "Óòâåðäèòü çàïðàøèâàåìûé vHost äëÿ óêàçàííîãî íèêà."
|
||||
|
||||
#: ../hs_request.cpp:278
|
||||
#, c-format
|
||||
msgid "Displayed all records (Count: %d)"
|
||||
msgstr ""
|
||||
|
||||
#: ../hs_request.cpp:167 ../hs_request.cpp:234
|
||||
#: hs_request.cpp:169 hs_request.cpp:234
|
||||
#, c-format
|
||||
msgid "No request for nick %s found."
|
||||
msgstr "Çàïðîñ íà vHost äëÿ íèêà %s íå íàéäåí."
|
||||
|
||||
#: ../hs_request.cpp:102
|
||||
#: hs_request.cpp:104
|
||||
#, c-format
|
||||
msgid "Please wait %d seconds before requesting a new vHost"
|
||||
msgstr "Ïîæàëóéñòà, ïîäîæäèòå %d ñåêóíä, ïðåæäå ÷åì çàïðàøèâàòü íîâûé vHost"
|
||||
|
||||
#: ../hs_request.cpp:243
|
||||
#: hs_request.cpp:243
|
||||
msgid "Reject the requested vHost for the given nick."
|
||||
msgstr "Îòêëîíèòü çàïðàøèâàåìûé vHost äëÿ óêàçàííîãî íèêà."
|
||||
|
||||
#: ../hs_request.cpp:119
|
||||
#: hs_request.cpp:124
|
||||
msgid ""
|
||||
"Request the given vHost to be actived for your nick by the\n"
|
||||
"network administrators. Please be patient while your request\n"
|
||||
@@ -79,59 +64,59 @@ msgstr ""
|
||||
"àäìèíèñòðàòîðîâ ñåòè. Ïðîñüáà ïðîÿâèòü òåðïåíèå, ïîêà çàïðîñ\n"
|
||||
"ðàññìàòðèâàåòñÿ àäìèíèñòðàöèåé."
|
||||
|
||||
#: ../hs_request.cpp:177 ../hs_request.cpp:188
|
||||
#: hs_request.cpp:179 hs_request.cpp:190
|
||||
msgid "Syntax: ACTIVATE nick"
|
||||
msgstr "Ñèíòàêñèñ: ACTIVATE íèê"
|
||||
msgstr "Ñèíòàêñèñ: \002ACTIVATE \037íèê\037\002"
|
||||
|
||||
#: ../hs_request.cpp:241 ../hs_request.cpp:252
|
||||
#: hs_request.cpp:241 hs_request.cpp:252
|
||||
msgid "Syntax: REJECT nick"
|
||||
msgstr "Ñèíòàêñèñ: REJECT íèê"
|
||||
msgstr "Ñèíòàêñèñ: \002REJECT \037íèê\037\002"
|
||||
|
||||
#: ../hs_request.cpp:65 ../hs_request.cpp:117 ../hs_request.cpp:127
|
||||
#: hs_request.cpp:65 hs_request.cpp:122 hs_request.cpp:132
|
||||
msgid "Syntax: REQUEST vhost"
|
||||
msgstr "Ñèíòàêñèñ: REQUEST vHost"
|
||||
msgstr "Ñèíòàêñèñ: \002REQUEST \037vHost\037\002"
|
||||
|
||||
#: ../hs_request.cpp:307
|
||||
#: hs_request.cpp:307
|
||||
msgid "Syntax: WAITING"
|
||||
msgstr "Ñèíòàêñèñ: WAITING"
|
||||
msgstr "Ñèíòàêñèñ: \002WAITING\002"
|
||||
|
||||
#: ../hs_request.cpp:309
|
||||
#: hs_request.cpp:309
|
||||
msgid ""
|
||||
"This command is provided for convenience. It is essentially\n"
|
||||
"the same as performing a LIST +req ."
|
||||
msgstr ""
|
||||
"Äàííàÿ êîìàíäà ñîçäàíà äëÿ óäîáñòâà èñïîëüçîâàíèÿ è âûâîäèò ñïèñîê "
|
||||
"çàïðîñîâ,\n"
|
||||
"Äàííàÿ êîìàíäà ñîçäàíà äëÿ óäîáñòâà èñïîëüçîâàíèÿ è âûâîäèò ñïèñîê çàïðîñîâ,\n"
|
||||
"îæèäàþùèõ îáðàáîòêè. Àíàëîãè÷íàÿ êîìàíäà: LIST +req ."
|
||||
|
||||
#: ../hs_request.cpp:108
|
||||
#: hs_request.cpp:110
|
||||
msgid "Your vHost has been requested"
|
||||
msgstr "Âàø çàïðîñ íà vHost îòïðàâëåí."
|
||||
|
||||
#: ../hs_request.cpp:159
|
||||
#: hs_request.cpp:161
|
||||
msgid "[auto memo] Your requested vHost has been approved."
|
||||
msgstr "[àâòî-ñîîáùåíèå] Çàïðàøèâàåìûé âàìè vHost óòâåðæäåí è àêòèâèðîâàí."
|
||||
|
||||
#: ../hs_request.cpp:225
|
||||
#: hs_request.cpp:225
|
||||
#, c-format
|
||||
msgid "[auto memo] Your requested vHost has been rejected."
|
||||
msgstr "[àâòî-ñîîáùåíèå] Çàïðàøèâàåìûé âàìè vHost îòêëîíåí."
|
||||
|
||||
#: ../hs_request.cpp:223
|
||||
#: hs_request.cpp:223
|
||||
#, c-format
|
||||
msgid "[auto memo] Your requested vHost has been rejected. Reason: %s"
|
||||
msgstr "[àâòî-ñîîáùåíèå] Çàïðàøèâàåìûé âàìè vHost îòêëîíåí. Ïðè÷èíà: %s"
|
||||
|
||||
#: ../hs_request.cpp:443
|
||||
#: hs_request.cpp:646
|
||||
#, c-format
|
||||
msgid "[auto memo] vHost %s has been requested."
|
||||
msgstr "[àâòî-ñîîáùåíèå] Áûë çàïðîøåí vHost %s"
|
||||
msgstr "[àâòî-ñîîáùåíèå] Áûë çàïðîøåí vHost \002%s\002"
|
||||
|
||||
#: ../hs_request.cpp:161
|
||||
#: hs_request.cpp:163
|
||||
#, c-format
|
||||
msgid "vHost for %s has been activated"
|
||||
msgstr "vHost äëÿ %s óñïåøíî àêòèâèðîâàí"
|
||||
|
||||
#: ../hs_request.cpp:230
|
||||
#: hs_request.cpp:230
|
||||
#, c-format
|
||||
msgid "vHost for %s has been rejected"
|
||||
msgstr "vHost äëÿ %s îòêëîíåí."
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
HLANG=`cat ../include/language.h | grep "^\s" | sed 's/[\t,]//g'`
|
||||
CPPLANG=`cat ../src/language.cpp | grep "\s\/\* [A-Z0-9_]* \*\/" | sed 's/\/\* \(.*\) \*\//\1/' | sed 's/\t//'`
|
||||
echo "${HLANG} ${CPPLANG}" | sed 's/ /\n/' | sort | uniq -u
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
# German translations for ns_maxemail
|
||||
# German messages for ns_maxemail
|
||||
# Copyright (C) 2011 Anope Team
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as Anope IRC Services
|
||||
# Adam <adam@anope.org>, 2011.
|
||||
# Adam <adam@anope.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Anope\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-25 23:51-0400\n"
|
||||
"PO-Revision-Date: 2010-09-26 00:03-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: German\n"
|
||||
@@ -17,12 +17,11 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../ns_maxemail.cpp:33
|
||||
#, fuzzy, c-format
|
||||
msgid "The given email address has reached its usage limit of %d users."
|
||||
#: ns_maxemail.cpp:33
|
||||
#, c-format
|
||||
msgid "The given email address has reached it's usage limit of %d users."
|
||||
msgstr "Die angegebene eMail hat die limit Begrenzung von %d User erreicht."
|
||||
|
||||
#: ../ns_maxemail.cpp:31
|
||||
#, fuzzy
|
||||
msgid "The given email address has reached its usage limit of 1 user."
|
||||
#: ns_maxemail.cpp:31
|
||||
msgid "The given email address has reached it's usage limit of 1 user."
|
||||
msgstr "Die angegebene eMail hat die limit Begrenzung von 1 User erreicht."
|
||||
@@ -0,0 +1,27 @@
|
||||
# Italian translations for ns_maxemail
|
||||
# Traduzioni italiane per il ns_maxemail
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as Anope IRC Services
|
||||
# Adam <adam@anope.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Anope\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-09-25 23:51-0400\n"
|
||||
"PO-Revision-Date: 2010-09-26 00:11-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: Italian\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=ISO-8859-1\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ns_maxemail.cpp:33
|
||||
#, c-format
|
||||
msgid "The given email address has reached it's usage limit of %d users."
|
||||
msgstr "L'indirizzo email specificato ha raggiunto il suo limite d'utilizzo di %d utenti."
|
||||
|
||||
#: ns_maxemail.cpp:31
|
||||
msgid "The given email address has reached it's usage limit of 1 user."
|
||||
msgstr "L'indirizzo email specificato ha raggiunto il suo limite d'utilizzo di 1 utente."
|
||||
@@ -1,14 +1,14 @@
|
||||
# Dutch translations for ns_maxemail
|
||||
# Engelse vertalingen voor het ns_maxemail
|
||||
# Copyright (C) 2011 Anope Team
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as Anope IRC Services
|
||||
# Adam <adam@anope.org>, 2011.
|
||||
# Adam <adam@anope.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Anope\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-25 23:51-0400\n"
|
||||
"PO-Revision-Date: 2010-09-25 23:57-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: Dutch\n"
|
||||
@@ -17,12 +17,11 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../ns_maxemail.cpp:33
|
||||
#, fuzzy, c-format
|
||||
msgid "The given email address has reached its usage limit of %d users."
|
||||
#: ns_maxemail.cpp:33
|
||||
#, c-format
|
||||
msgid "The given email address has reached it's usage limit of %d users."
|
||||
msgstr "Het gegeven email adres heeft de limiet van %d gebruikers bereikt."
|
||||
|
||||
#: ../ns_maxemail.cpp:31
|
||||
#, fuzzy
|
||||
msgid "The given email address has reached its usage limit of 1 user."
|
||||
#: ns_maxemail.cpp:31
|
||||
msgid "The given email address has reached it's usage limit of 1 user."
|
||||
msgstr "Het gegeven email adres heeft de limiet van 1 gebruiker bereikt."
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-25 23:51-0400\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -16,11 +16,11 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: ../ns_maxemail.cpp:33
|
||||
#: ns_maxemail.cpp:33
|
||||
#, c-format
|
||||
msgid "The given email address has reached its usage limit of %d users."
|
||||
msgid "The given email address has reached it's usage limit of %d users."
|
||||
msgstr ""
|
||||
|
||||
#: ../ns_maxemail.cpp:31
|
||||
msgid "The given email address has reached its usage limit of 1 user."
|
||||
#: ns_maxemail.cpp:31
|
||||
msgid "The given email address has reached it's usage limit of 1 user."
|
||||
msgstr ""
|
||||
@@ -1,13 +1,13 @@
|
||||
# Portuguese translations for ns_maxemail
|
||||
# Copyright (C) 2011 Anope Team
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as Anope IRC Services
|
||||
# Adam <adam@anope.org>, 2011.
|
||||
# Adam <adam@anope.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Anope\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-25 23:51-0400\n"
|
||||
"PO-Revision-Date: 2010-09-26 00:05-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: Portuguese\n"
|
||||
@@ -16,13 +16,11 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../ns_maxemail.cpp:33
|
||||
#, fuzzy, c-format
|
||||
msgid "The given email address has reached its usage limit of %d users."
|
||||
msgstr ""
|
||||
"O endereço de email fornecido alcançou seu limite de uso de %d usuários."
|
||||
#: ns_maxemail.cpp:33
|
||||
#, c-format
|
||||
msgid "The given email address has reached it's usage limit of %d users."
|
||||
msgstr "O endereço de email fornecido alcançou seu limite de uso de %d usuários."
|
||||
|
||||
#: ../ns_maxemail.cpp:31
|
||||
#, fuzzy
|
||||
msgid "The given email address has reached its usage limit of 1 user."
|
||||
#: ns_maxemail.cpp:31
|
||||
msgid "The given email address has reached it's usage limit of 1 user."
|
||||
msgstr "O endereço de email fornecido alcançou seu limite de uso de 1 usuário."
|
||||
@@ -1,14 +1,14 @@
|
||||
# Russian translations for ns_maxemail
|
||||
# ?????????? ???????? ??? ?????? ns_maxemail
|
||||
# Copyright (C) 2011 Anope Team
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as Anope IRC Services
|
||||
# Adam <adam@anope.org>, 2011.
|
||||
# Adam <adam@anope.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Anope\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-04 03:41-0500\n"
|
||||
"POT-Creation-Date: 2010-09-25 23:51-0400\n"
|
||||
"PO-Revision-Date: 2010-09-26 00:07-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: Russian\n"
|
||||
@@ -18,13 +18,11 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
|
||||
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
|
||||
#: ../ns_maxemail.cpp:33
|
||||
#, fuzzy, c-format
|
||||
msgid "The given email address has reached its usage limit of %d users."
|
||||
msgstr ""
|
||||
"Óêàçàííûé âàìè email-àäðåñ èñïîëüçóåòñÿ ìàêñèìàëüíî äîïóñòèìîå êîë-âî ðàç: %d"
|
||||
#: ns_maxemail.cpp:33
|
||||
#, c-format
|
||||
msgid "The given email address has reached it's usage limit of %d users."
|
||||
msgstr "Óêàçàííûé âàìè email-àäðåñ èñïîëüçóåòñÿ ìàêñèìàëüíî äîïóñòèìîå êîë-âî ðàç: %d"
|
||||
|
||||
#: ../ns_maxemail.cpp:31
|
||||
#, fuzzy
|
||||
msgid "The given email address has reached its usage limit of 1 user."
|
||||
#: ns_maxemail.cpp:31
|
||||
msgid "The given email address has reached it's usage limit of 1 user."
|
||||
msgstr "Óêàçàííûé âàìè email-àäðåñ óæå êåì-òî èñïîëüçóåòñÿ."
|
||||
Executable
+10
@@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
for string in `egrep "^.+[A-Z]+," ../include/language.h | sed "s/\t\(.*\),/\1/"` ; do
|
||||
CMD=`grep -RI $string {../src,../modules,../include} | grep -v "language\.cpp:.*\/\* $string" | grep -v "language\.h:"`
|
||||
if [ ! -n "$CMD" ] ; then
|
||||
echo "$string is unused"
|
||||
sed -i "s/\/\* $string \*\//\/* $string - UNUSED *\//" ../src/language.cpp
|
||||
sed -i "/$string,/d" ../include/language.h
|
||||
fi
|
||||
done
|
||||
Executable
+10
@@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
pushd ../src > /dev/null
|
||||
xgettext -C -s -d Anope -o ../lang/anope.pot --from-code=utf-8 --keyword=_ language.cpp
|
||||
popd > /dev/null
|
||||
|
||||
for f in *.po
|
||||
do
|
||||
msgmerge -v -s -U $f `echo $f | cut -d'.' -f1`.pot
|
||||
done
|
||||
@@ -1,20 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
rm anope.pot
|
||||
touch anope.pot
|
||||
|
||||
cd ..
|
||||
FILES=`find ./ -name *.cpp -o -name *.h | grep -v /modules/extra/`
|
||||
for f in $FILES
|
||||
do
|
||||
xgettext -C -s -d Anope -j -o language/anope.pot --from-code=utf-8 --keyword=_ $f
|
||||
done
|
||||
|
||||
cd -
|
||||
|
||||
for f in *.po
|
||||
do
|
||||
msgmerge -v -s -U $f `echo $f | cut -d'.' -f1`.pot
|
||||
done
|
||||
|
||||
rm -f *~
|
||||
+8
-15
@@ -1,5 +1,3 @@
|
||||
add_subdirectory("extra/language")
|
||||
|
||||
# Get a list of ALL files and directories within the current directory
|
||||
file(GLOB MODULES_FOLDERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*")
|
||||
remove_item_from_list(MODULES_FOLDERS "CMakeFiles")
|
||||
@@ -77,10 +75,10 @@ foreach(MODULE_FOLDER ${MODULES_FOLDERS})
|
||||
set(WIN32_NO_LIBS)
|
||||
endif(WIN32)
|
||||
set_target_properties(${SO} PROPERTIES LINKER_LANGUAGE CXX PREFIX "" SUFFIX "" LINK_FLAGS "${TEMP_LDFLAGS} ${WIN32_NO_LIBS}")
|
||||
add_dependencies(${SO} ${PROGRAM_NAME} module_language)
|
||||
# For Windows only, have the module link to the export library of Anope as well as wsock32 and Ws2_32 libraries (most of the modules probably don't need this, but this is to be on the safe side), also set it's version
|
||||
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 Ws2_32 ${WIN32_MEMORY} ${TEMP_DEPENDENCIES})
|
||||
target_link_libraries(${SO} ${PROGRAM_NAME} wsock32 ${WIN32_MEMORY} ${TEMP_DEPENDENCIES})
|
||||
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
|
||||
@@ -88,15 +86,12 @@ foreach(MODULE_FOLDER ${MODULES_FOLDERS})
|
||||
DESTINATION data/modules
|
||||
)
|
||||
endif(HAS_FUNCTION)
|
||||
else(NOT SKIP_DEPENDS AND NOT SKIP_LIBRARIES)
|
||||
message(" This is not a fatal error - ${SRC} will not be built.")
|
||||
endif(NOT SKIP_DEPENDS AND NOT SKIP_LIBRARIES)
|
||||
endforeach(SRC)
|
||||
|
||||
# Get a list of ALL files and directories within this modules directory
|
||||
file(GLOB SUBMODULE_DIRS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${MODULE_FOLDER}/*")
|
||||
remove_item_from_list(SUBMODULE_DIRS "CMakeFiles")
|
||||
remove_item_from_list(SUBMODULE_DIRS "extra/language")
|
||||
|
||||
foreach(SUBDIR ${SUBMODULE_DIRS})
|
||||
if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIR}")
|
||||
@@ -154,7 +149,7 @@ foreach(MODULE_FOLDER ${MODULES_FOLDERS})
|
||||
endforeach(SRC)
|
||||
|
||||
# Continue if library and function requirements are met
|
||||
if(NOT SKIP_DEPENDS AND NOT SKIP_LIBRARIES AND HAS_FUNCTION)
|
||||
if(NOT SKIP AND HAS_FUNCTION)
|
||||
# Remove duplicates from the linker flags
|
||||
if(SUBDIR_LDFLAGS)
|
||||
remove_list_duplicates(SUBDIR_LDFLAGS)
|
||||
@@ -174,19 +169,17 @@ foreach(MODULE_FOLDER ${MODULES_FOLDERS})
|
||||
# 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 ${MODULES_SUBDIR_SRCS})
|
||||
set_target_properties(${SO} PROPERTIES LINKER_LANGUAGE CXX PREFIX "" SUFFIX "" LINK_FLAGS "${SUBDIR_LDFLAGS}")
|
||||
add_dependencies(${SO} ${PROGRAM_NAME} module_language)
|
||||
# For Windows only, have the module link to the export library of Anope as well as wsock32 and Ws2_32 libraries (most of the modules probably don't need this, but this is to be on the safe side), also set it's version
|
||||
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 Ws2_32 ${WIN32_MEMORY} ${SUBDIR_EXTRA_DEPENDS})
|
||||
target_link_libraries(${SO} ${PROGRAM_NAME} wsock32 ${WIN32_MEMORY} ${SUBDIR_EXTRA_DEPENDS})
|
||||
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
|
||||
install(TARGETS ${SO}
|
||||
DESTINATION data/modules
|
||||
)
|
||||
else(NOT SKIP_DEPENDS AND NOT SKIP_LIBRARIES AND HAS_FUNCTION)
|
||||
message(" This is not a fatal error - ${SUBDIR} will not be built.")
|
||||
endif(NOT SKIP_DEPENDS AND NOT SKIP_LIBRARIES AND HAS_FUNCTION)
|
||||
endif(NOT SKIP AND HAS_FUNCTION)
|
||||
endif(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIR}")
|
||||
endforeach(SUBDIR)
|
||||
endif(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${MODULE_FOLDER}")
|
||||
|
||||
+15
-15
@@ -1,6 +1,6 @@
|
||||
/* BotServ core functions
|
||||
*
|
||||
* (C) 2003-2011 Anope Team
|
||||
* (C) 2003-2010 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
@@ -18,30 +18,28 @@ class CommandBSAct : public Command
|
||||
public:
|
||||
CommandBSAct() : Command("ACT", 2, 2)
|
||||
{
|
||||
this->SetDesc(_("Makes the bot do the equivalent of a \"/me\" command"));
|
||||
}
|
||||
|
||||
CommandReturn Execute(CommandSource &source, const std::vector<Anope::string> ¶ms)
|
||||
CommandReturn Execute(User *u, const std::vector<Anope::string> ¶ms)
|
||||
{
|
||||
User *u = source.u;
|
||||
ChannelInfo *ci = source.ci;
|
||||
ChannelInfo *ci = cs_findchan(params[0]);
|
||||
Anope::string message = params[1];
|
||||
|
||||
if (!check_access(u, ci, CA_SAY))
|
||||
{
|
||||
source.Reply(_(ACCESS_DENIED));
|
||||
u->SendMessage(BotServ, ACCESS_DENIED);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (!ci->bi)
|
||||
{
|
||||
source.Reply(_(BOT_NOT_ASSIGNED), Config->UseStrictPrivMsgString.c_str(), BotServ->nick.c_str());
|
||||
u->SendMessage(BotServ, BOT_NOT_ASSIGNED);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (!ci->c || !ci->c->FindUser(ci->bi))
|
||||
{
|
||||
source.Reply(_(BOT_NOT_ON_CHANNEL), ci->name.c_str());
|
||||
u->SendMessage(BotServ, BOT_NOT_ON_CHANNEL, ci->name.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
@@ -58,19 +56,21 @@ class CommandBSAct : public Command
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
void OnSyntaxError(CommandSource &source, const Anope::string &subcommand)
|
||||
void OnSyntaxError(User *u, const Anope::string &subcommand)
|
||||
{
|
||||
SyntaxError(source, "ACT", _("ACT \037channel\037 \037text\037"));
|
||||
SyntaxError(BotServ, u, "ACT", BOT_ACT_SYNTAX);
|
||||
}
|
||||
|
||||
bool OnHelp(CommandSource &source, const Anope::string &subcommand)
|
||||
bool OnHelp(User *u, const Anope::string &subcommand)
|
||||
{
|
||||
source.Reply(_("Syntax: \002ACT \037channel\037 \037text\037\002\n"
|
||||
" \n"
|
||||
"Makes the bot do the equivalent of a \"/me\" command\n"
|
||||
"on the given channel using the given text."));
|
||||
u->SendMessage(BotServ, BOT_HELP_ACT);
|
||||
return true;
|
||||
}
|
||||
|
||||
void OnServHelp(User *u)
|
||||
{
|
||||
u->SendMessage(BotServ, BOT_HELP_CMD_ACT);
|
||||
}
|
||||
};
|
||||
|
||||
class BSAct : public Module
|
||||
|
||||
+26
-25
@@ -1,6 +1,6 @@
|
||||
/* BotServ core functions
|
||||
*
|
||||
* (C) 2003-2011 Anope Team
|
||||
* (C) 2003-2010 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
@@ -18,44 +18,44 @@ class CommandBSAssign : public Command
|
||||
public:
|
||||
CommandBSAssign() : Command("ASSIGN", 2, 2)
|
||||
{
|
||||
this->SetDesc(_("Assigns a bot to a channel"));
|
||||
}
|
||||
|
||||
CommandReturn Execute(CommandSource &source, const std::vector<Anope::string> ¶ms)
|
||||
CommandReturn Execute(User *u, const std::vector<Anope::string> ¶ms)
|
||||
{
|
||||
const Anope::string &chan = params[0];
|
||||
const Anope::string &nick = params[1];
|
||||
User *u = source.u;
|
||||
ChannelInfo *ci = source.ci;
|
||||
Anope::string chan = params[0];
|
||||
Anope::string nick = params[1];
|
||||
BotInfo *bi;
|
||||
ChannelInfo *ci;
|
||||
|
||||
if (readonly)
|
||||
{
|
||||
source.Reply(_(BOT_ASSIGN_READONLY));
|
||||
u->SendMessage(BotServ, BOT_ASSIGN_READONLY);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
BotInfo *bi = findbot(nick);
|
||||
if (!bi)
|
||||
if (!(bi = findbot(nick)))
|
||||
{
|
||||
source.Reply(_(BOT_DOES_NOT_EXIST), nick.c_str());
|
||||
u->SendMessage(BotServ, BOT_DOES_NOT_EXIST, nick.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (ci->botflags.HasFlag(BS_NOBOT) || (!check_access(u, ci, CA_ASSIGN) && !u->HasPriv("botserv/administration")))
|
||||
ci = cs_findchan(chan);
|
||||
|
||||
if (ci->botflags.HasFlag(BS_NOBOT) || (!check_access(u, ci, CA_ASSIGN) && !u->Account()->HasPriv("botserv/administration")))
|
||||
{
|
||||
source.Reply(_(ACCESS_DENIED));
|
||||
u->SendMessage(BotServ, ACCESS_DENIED);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (bi->HasFlag(BI_PRIVATE) && !u->HasCommand("botserv/assign/private"))
|
||||
if (bi->HasFlag(BI_PRIVATE) && !u->Account()->HasCommand("botserv/assign/private"))
|
||||
{
|
||||
source.Reply(_(ACCESS_DENIED));
|
||||
u->SendMessage(BotServ, ACCESS_DENIED);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (ci->bi && nick.equals_ci(ci->bi->nick))
|
||||
{
|
||||
source.Reply(_("Bot \002%s\002 is already assigned to channel \002%s\002."), ci->bi->nick.c_str(), chan.c_str());
|
||||
u->SendMessage(BotServ, BOT_ASSIGN_ALREADY, ci->bi->nick.c_str(), chan.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
@@ -63,23 +63,24 @@ class CommandBSAssign : public Command
|
||||
Log(override ? LOG_OVERRIDE : LOG_COMMAND, u, this, ci) << "for " << bi->nick;
|
||||
|
||||
bi->Assign(u, ci);
|
||||
source.Reply(_("Bot \002%s\002 has been assigned to %s."), bi->nick.c_str(), ci->name.c_str());
|
||||
u->SendMessage(BotServ, BOT_ASSIGN_ASSIGNED, bi->nick.c_str(), ci->name.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
bool OnHelp(CommandSource &source, const Anope::string &subcommand)
|
||||
bool OnHelp(User *u, const Anope::string &subcommand)
|
||||
{
|
||||
source.Reply(_("Syntax: \002ASSIGN \037chan\037 \037nick\037\002\n"
|
||||
" \n"
|
||||
"Assigns a bot pointed out by nick to the channel chan. You\n"
|
||||
"can then configure the bot for the channel so it fits\n"
|
||||
"your needs."));
|
||||
u->SendMessage(BotServ, BOT_HELP_ASSIGN);
|
||||
return true;
|
||||
}
|
||||
|
||||
void OnSyntaxError(CommandSource &source, const Anope::string &subcommand)
|
||||
void OnSyntaxError(User *u, const Anope::string &subcommand)
|
||||
{
|
||||
SyntaxError(source, "ASSIGN", _("ASSIGN \037chan\037 \037nick\037"));
|
||||
SyntaxError(BotServ, u, "ASSIGN", BOT_ASSIGN_SYNTAX);
|
||||
}
|
||||
|
||||
void OnServHelp(User *u)
|
||||
{
|
||||
u->SendMessage(BotServ, BOT_HELP_CMD_ASSIGN);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
+69
-100
@@ -1,6 +1,6 @@
|
||||
/* BotServ core functions
|
||||
*
|
||||
* (C) 2003-2011 Anope Team
|
||||
* (C) 2003-2010 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
@@ -15,88 +15,88 @@
|
||||
|
||||
class BadwordsListCallback : public NumberList
|
||||
{
|
||||
CommandSource &source;
|
||||
User *u;
|
||||
ChannelInfo *ci;
|
||||
bool SentHeader;
|
||||
public:
|
||||
BadwordsListCallback(CommandSource &_source, const Anope::string &list) : NumberList(list, false), source(_source), SentHeader(false)
|
||||
BadwordsListCallback(User *_u, ChannelInfo *_ci, const Anope::string &list) : NumberList(list, false), u(_u), ci(_ci), SentHeader(false)
|
||||
{
|
||||
}
|
||||
|
||||
~BadwordsListCallback()
|
||||
{
|
||||
if (!SentHeader)
|
||||
source.Reply(_("No matching entries on %s bad words list."), source.ci->name.c_str());
|
||||
u->SendMessage(BotServ, BOT_BADWORDS_NO_MATCH, ci->name.c_str());
|
||||
}
|
||||
|
||||
void HandleNumber(unsigned Number)
|
||||
{
|
||||
if (!Number || Number > source.ci->GetBadWordCount())
|
||||
if (!Number || Number > ci->GetBadWordCount())
|
||||
return;
|
||||
|
||||
if (!SentHeader)
|
||||
{
|
||||
SentHeader = true;
|
||||
source.Reply(_("Bad words list for %s:\n"
|
||||
" Num Word Type"), source.ci->name.c_str());
|
||||
u->SendMessage(BotServ, BOT_BADWORDS_LIST_HEADER, ci->name.c_str());
|
||||
}
|
||||
|
||||
DoList(source, Number - 1, source.ci->GetBadWord(Number - 1));
|
||||
DoList(u, ci, Number - 1, ci->GetBadWord(Number - 1));
|
||||
}
|
||||
|
||||
static void DoList(CommandSource &source, unsigned Number, BadWord *bw)
|
||||
static void DoList(User *u, ChannelInfo *ci, unsigned Number, BadWord *bw)
|
||||
{
|
||||
source.Reply(_(" %3d %-30s %s"), Number + 1, bw->word.c_str(), bw->type == BW_SINGLE ? "(SINGLE)" : (bw->type == BW_START ? "(START)" : (bw->type == BW_END ? "(END)" : "")));
|
||||
u->SendMessage(BotServ, BOT_BADWORDS_LIST_FORMAT, Number + 1, bw->word.c_str(), bw->type == BW_SINGLE ? "(SINGLE)" : (bw->type == BW_START ? "(START)" : (bw->type == BW_END ? "(END)" : "")));
|
||||
}
|
||||
};
|
||||
|
||||
class BadwordsDelCallback : public NumberList
|
||||
{
|
||||
CommandSource &source;
|
||||
User *u;
|
||||
ChannelInfo *ci;
|
||||
Command *c;
|
||||
unsigned Deleted;
|
||||
bool override;
|
||||
public:
|
||||
BadwordsDelCallback(CommandSource &_source, Command *_c, const Anope::string &list) : NumberList(list, true), source(_source), c(_c), Deleted(0), override(false)
|
||||
BadwordsDelCallback(User *_u, ChannelInfo *_ci, Command *_c, const Anope::string &list) : NumberList(list, true), u(_u), ci(_ci), c(_c), Deleted(0), override(false)
|
||||
{
|
||||
if (!check_access(source.u, source.ci, CA_BADWORDS) && source.u->HasPriv("botserv/administration"))
|
||||
if (!check_access(u, ci, CA_BADWORDS) && u->Account()->HasPriv("botserv/administration"))
|
||||
this->override = true;
|
||||
}
|
||||
|
||||
~BadwordsDelCallback()
|
||||
{
|
||||
if (!Deleted)
|
||||
source.Reply(_("No matching entries on %s bad words list."), source.ci->name.c_str());
|
||||
u->SendMessage(BotServ, BOT_BADWORDS_NO_MATCH, ci->name.c_str());
|
||||
else if (Deleted == 1)
|
||||
source.Reply(_("Deleted 1 entry from %s bad words list."), source.ci->name.c_str());
|
||||
u->SendMessage(BotServ, BOT_BADWORDS_DELETED_ONE, ci->name.c_str());
|
||||
else
|
||||
source.Reply(_("Deleted %d entries from %s bad words list."), Deleted, source.ci->name.c_str());
|
||||
u->SendMessage(BotServ, BOT_BADWORDS_DELETED_SEVERAL, Deleted, ci->name.c_str());
|
||||
}
|
||||
|
||||
void HandleNumber(unsigned Number)
|
||||
{
|
||||
if (!Number || Number > source.ci->GetBadWordCount())
|
||||
if (!Number || Number > ci->GetBadWordCount())
|
||||
return;
|
||||
|
||||
Log(override ? LOG_OVERRIDE : LOG_COMMAND, source.u, c, source.ci) << "DEL " << source.ci->GetBadWord(Number - 1)->word;
|
||||
Log(override ? LOG_OVERRIDE : LOG_COMMAND, u, c, ci) << "DEL " << ci->GetBadWord(Number -1 )->word;
|
||||
++Deleted;
|
||||
source.ci->EraseBadWord(Number - 1);
|
||||
ci->EraseBadWord(Number - 1);
|
||||
}
|
||||
};
|
||||
|
||||
class CommandBSBadwords : public Command
|
||||
{
|
||||
private:
|
||||
CommandReturn DoList(CommandSource &source, const Anope::string &word)
|
||||
CommandReturn DoList(User *u, ChannelInfo *ci, const Anope::string &word)
|
||||
{
|
||||
ChannelInfo *ci = source.ci;
|
||||
bool override = !check_access(source.u, ci, CA_BADWORDS);
|
||||
Log(override ? LOG_OVERRIDE : LOG_COMMAND, source.u, this, ci) << "LIST";
|
||||
bool override = !check_access(u, ci, CA_BADWORDS);
|
||||
Log(override ? LOG_OVERRIDE : LOG_COMMAND, u, this, ci) << "LIST";
|
||||
|
||||
if (!ci->GetBadWordCount())
|
||||
source.Reply(_("%s bad words list is empty."), ci->name.c_str());
|
||||
u->SendMessage(BotServ, BOT_BADWORDS_LIST_EMPTY, ci->name.c_str());
|
||||
else if (!word.empty() && word.find_first_not_of("1234567890,-") == Anope::string::npos)
|
||||
{
|
||||
BadwordsListCallback list(source, word);
|
||||
BadwordsListCallback list(u, ci, word);
|
||||
list.Process();
|
||||
}
|
||||
else
|
||||
@@ -113,24 +113,21 @@ class CommandBSBadwords : public Command
|
||||
if (!SentHeader)
|
||||
{
|
||||
SentHeader = true;
|
||||
source.Reply(_("Bad words list for %s:\n"
|
||||
" Num Word Type"), ci->name.c_str());
|
||||
|
||||
u->SendMessage(BotServ, BOT_BADWORDS_LIST_HEADER, ci->name.c_str());
|
||||
}
|
||||
|
||||
BadwordsListCallback::DoList(source, i, bw);
|
||||
BadwordsListCallback::DoList(u, ci, i, bw);
|
||||
}
|
||||
|
||||
if (!SentHeader)
|
||||
source.Reply(_("No matching entries on %s bad words list."), ci->name.c_str());
|
||||
u->SendMessage(BotServ, BOT_BADWORDS_NO_MATCH, ci->name.c_str());
|
||||
}
|
||||
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
CommandReturn DoAdd(CommandSource &source, const Anope::string &word)
|
||||
CommandReturn DoAdd(User *u, ChannelInfo *ci, const Anope::string &word)
|
||||
{
|
||||
ChannelInfo *ci = source.ci;
|
||||
size_t pos = word.rfind(' ');
|
||||
BadWordType type = BW_ANY;
|
||||
Anope::string realword = word;
|
||||
@@ -152,7 +149,7 @@ class CommandBSBadwords : public Command
|
||||
|
||||
if (ci->GetBadWordCount() >= Config->BSBadWordsMax)
|
||||
{
|
||||
source.Reply(_("Sorry, you can only have %d bad words entries on a channel."), Config->BSBadWordsMax);
|
||||
u->SendMessage(BotServ, BOT_BADWORDS_REACHED_LIMIT, Config->BSBadWordsMax);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
@@ -162,27 +159,26 @@ class CommandBSBadwords : public Command
|
||||
|
||||
if (!bw->word.empty() && ((Config->BSCaseSensitive && realword.equals_cs(bw->word)) || (!Config->BSCaseSensitive && realword.equals_ci(bw->word))))
|
||||
{
|
||||
source.Reply(_("\002%s\002 already exists in %s bad words list."), bw->word.c_str(), ci->name.c_str());
|
||||
u->SendMessage(BotServ, BOT_BADWORDS_ALREADY_EXISTS, bw->word.c_str(), ci->name.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
}
|
||||
|
||||
bool override = !check_access(source.u, ci, CA_BADWORDS);
|
||||
Log(override ? LOG_OVERRIDE : LOG_COMMAND, source.u, this, ci) << "ADD " << realword;
|
||||
bool override = !check_access(u, ci, CA_BADWORDS);
|
||||
Log(override ? LOG_OVERRIDE : LOG_COMMAND, u, this, ci) << "ADD " << realword;
|
||||
ci->AddBadWord(realword, type);
|
||||
|
||||
source.Reply(_("\002%s\002 added to %s bad words list."), realword.c_str(), ci->name.c_str());
|
||||
u->SendMessage(BotServ, BOT_BADWORDS_ADDED, realword.c_str(), ci->name.c_str());
|
||||
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
CommandReturn DoDelete(CommandSource &source, const Anope::string &word)
|
||||
CommandReturn DoDelete(User *u, ChannelInfo *ci, const Anope::string &word)
|
||||
{
|
||||
ChannelInfo *ci = source.ci;
|
||||
/* Special case: is it a number/list? Only do search if it isn't. */
|
||||
if (!word.empty() && isdigit(word[0]) && word.find_first_not_of("1234567890,-") == Anope::string::npos)
|
||||
{
|
||||
BadwordsDelCallback list(source, this, word);
|
||||
BadwordsDelCallback list(u, ci, this, word);
|
||||
list.Process();
|
||||
}
|
||||
else
|
||||
@@ -200,14 +196,14 @@ class CommandBSBadwords : public Command
|
||||
|
||||
if (i == end)
|
||||
{
|
||||
source.Reply(_("\002%s\002 not found on %s bad words list."), word.c_str(), ci->name.c_str());
|
||||
u->SendMessage(BotServ, BOT_BADWORDS_NOT_FOUND, word.c_str(), ci->name.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
bool override = !check_access(source.u, ci, CA_BADWORDS);
|
||||
Log(override ? LOG_OVERRIDE : LOG_COMMAND, source.u, this, ci) << "DEL " << badword->word;
|
||||
bool override = !check_access(u, ci, CA_BADWORDS);
|
||||
Log(override ? LOG_OVERRIDE : LOG_COMMAND, u, this, ci) << "DEL " << badword->word;
|
||||
|
||||
source.Reply(_("\002%s\002 deleted from %s bad words list."), badword->word.c_str(), ci->name.c_str());
|
||||
u->SendMessage(BotServ, BOT_BADWORDS_DELETED, badword->word.c_str(), ci->name.c_str());
|
||||
|
||||
ci->EraseBadWord(i);
|
||||
}
|
||||
@@ -215,103 +211,76 @@ class CommandBSBadwords : public Command
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
CommandReturn DoClear(CommandSource &source)
|
||||
CommandReturn DoClear(User *u, ChannelInfo *ci)
|
||||
{
|
||||
ChannelInfo *ci = source.ci;
|
||||
bool override = !check_access(source.u, ci, CA_BADWORDS);
|
||||
Log(override ? LOG_OVERRIDE : LOG_COMMAND, source.u, this, ci) << "CLEAR";
|
||||
bool override = !check_access(u, ci, CA_BADWORDS);
|
||||
Log(override ? LOG_OVERRIDE : LOG_COMMAND, u, this, ci) << "CLEAR";
|
||||
|
||||
ci->ClearBadWords();
|
||||
source.Reply(_("Bad words list is now empty."));
|
||||
u->SendMessage(BotServ, BOT_BADWORDS_CLEAR);
|
||||
return MOD_CONT;
|
||||
}
|
||||
public:
|
||||
CommandBSBadwords() : Command("BADWORDS", 2, 3)
|
||||
{
|
||||
this->SetDesc(_("Maintains bad words list"));
|
||||
}
|
||||
|
||||
CommandReturn Execute(CommandSource &source, const std::vector<Anope::string> ¶ms)
|
||||
CommandReturn Execute(User *u, const std::vector<Anope::string> ¶ms)
|
||||
{
|
||||
const Anope::string &cmd = params[1];
|
||||
const Anope::string &word = params.size() > 2 ? params[2] : "";
|
||||
User *u = source.u;
|
||||
ChannelInfo *ci = source.ci;
|
||||
Anope::string chan = params[0];
|
||||
Anope::string cmd = params[1];
|
||||
Anope::string word = params.size() > 2 ? params[2] : "";
|
||||
ChannelInfo *ci;
|
||||
bool need_args = cmd.equals_ci("LIST") || cmd.equals_ci("CLEAR");
|
||||
|
||||
if (!need_args && word.empty())
|
||||
{
|
||||
this->OnSyntaxError(source, cmd);
|
||||
this->OnSyntaxError(u, cmd);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (!check_access(u, ci, CA_BADWORDS) && (!need_args || !u->HasPriv("botserv/administration")))
|
||||
ci = cs_findchan(chan);
|
||||
|
||||
if (!check_access(u, ci, CA_BADWORDS) && (!need_args || !u->Account()->HasPriv("botserv/administration")))
|
||||
{
|
||||
source.Reply(_(ACCESS_DENIED));
|
||||
u->SendMessage(BotServ, ACCESS_DENIED);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (readonly)
|
||||
{
|
||||
source.Reply(_("Sorry, channel bad words list modification is temporarily disabled."));
|
||||
u->SendMessage(BotServ, BOT_BADWORDS_DISABLED);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (cmd.equals_ci("ADD"))
|
||||
return this->DoAdd(source, word);
|
||||
return this->DoAdd(u, ci, word);
|
||||
else if (cmd.equals_ci("DEL"))
|
||||
return this->DoDelete(source, word);
|
||||
return this->DoDelete(u, ci, word);
|
||||
else if (cmd.equals_ci("LIST"))
|
||||
return this->DoList(source, word);
|
||||
return this->DoList(u, ci, word);
|
||||
else if (cmd.equals_ci("CLEAR"))
|
||||
return this->DoClear(source);
|
||||
return this->DoClear(u, ci);
|
||||
else
|
||||
this->OnSyntaxError(source, "");
|
||||
this->OnSyntaxError(u, "");
|
||||
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
bool OnHelp(CommandSource &source, const Anope::string &subcommand)
|
||||
bool OnHelp(User *u, const Anope::string &subcommand)
|
||||
{
|
||||
source.Reply(_("Syntax: \002BADWORDS \037channel\037 ADD \037word\037 [\037SINGLE\037 | \037START\037 | \037END\037]\002\n"
|
||||
" \002BADWORDS \037channel\037 DEL {\037word\037 | \037entry-num\037 | \037list\037}\002\n"
|
||||
" \002BADWORDS \037channel\037 LIST [\037mask\037 | \037list\037]\002\n"
|
||||
" \002BADWORDS \037channel\037 CLEAR\002\n"
|
||||
" \n"
|
||||
"Maintains the \002bad words list\002 for a channel. The bad\n"
|
||||
"words list determines which words are to be kicked\n"
|
||||
"when the bad words kicker is enabled. For more information,\n"
|
||||
"type \002%s%s HELP KICK BADWORDS\002.\n"
|
||||
" \n"
|
||||
"The \002BADWORDS ADD\002 command adds the given word to the\n"
|
||||
"badword list. If SINGLE is specified, a kick will be\n"
|
||||
"done only if a user says the entire word. If START is \n"
|
||||
"specified, a kick will be done if a user says a word\n"
|
||||
"that starts with \037word\037. If END is specified, a kick\n"
|
||||
"will be done if a user says a word that ends with\n"
|
||||
"\037word\037. If you don't specify anything, a kick will\n"
|
||||
"be issued every time \037word\037 is said by a user.\n"
|
||||
" \n"), Config->UseStrictPrivMsgString.c_str(), BotServ->nick.c_str());
|
||||
source.Reply(_("The \002BADWORDS DEL\002 command removes the given word from the\n"
|
||||
"bad words list. If a list of entry numbers is given, those\n"
|
||||
"entries are deleted. (See the example for LIST below.)\n"
|
||||
" \n"
|
||||
"The \002BADWORDS LIST\002 command displays the bad words list. If\n"
|
||||
"a wildcard mask is given, only those entries matching the\n"
|
||||
"mask are displayed. If a list of entry numbers is given,\n"
|
||||
"only those entries are shown; for example:\n"
|
||||
" \002BADWORDS #channel LIST 2-5,7-9\002\n"
|
||||
" Lists bad words entries numbered 2 through 5 and\n"
|
||||
" 7 through 9.\n"
|
||||
" \n"
|
||||
"The \002BADWORDS CLEAR\002 command clears all entries of the\n"
|
||||
"bad words list."));
|
||||
u->SendMessage(BotServ, BOT_HELP_BADWORDS);
|
||||
return true;
|
||||
}
|
||||
|
||||
void OnSyntaxError(CommandSource &source, const Anope::string &subcommand)
|
||||
void OnSyntaxError(User *u, const Anope::string &subcommand)
|
||||
{
|
||||
SyntaxError(source, "BADWORDS", _("BADWORDS \037channel\037 {ADD|DEL|LIST|CLEAR} [\037word\037 | \037entry-list\037] [SINGLE|START|END]"));
|
||||
SyntaxError(BotServ, u, "BADWORDS", BOT_BADWORDS_SYNTAX);
|
||||
}
|
||||
|
||||
void OnServHelp(User *u)
|
||||
{
|
||||
u->SendMessage(BotServ, BOT_HELP_CMD_BADWORDS);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
+80
-93
@@ -1,6 +1,6 @@
|
||||
/* BotServ core functions
|
||||
*
|
||||
* (C) 2003-2011 Anope Team
|
||||
* (C) 2003-2010 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
@@ -16,70 +16,70 @@
|
||||
class CommandBSBot : public Command
|
||||
{
|
||||
private:
|
||||
CommandReturn DoAdd(CommandSource &source, const std::vector<Anope::string> ¶ms)
|
||||
CommandReturn DoAdd(User *u, const std::vector<Anope::string> ¶ms)
|
||||
{
|
||||
const Anope::string &nick = params[1];
|
||||
const Anope::string &user = params[2];
|
||||
const Anope::string &host = params[3];
|
||||
const Anope::string &real = params[4];
|
||||
Anope::string nick = params[1];
|
||||
Anope::string user = params[2];
|
||||
Anope::string host = params[3];
|
||||
Anope::string real = params[4];
|
||||
BotInfo *bi;
|
||||
|
||||
if (findbot(nick))
|
||||
{
|
||||
source.Reply(_("Bot \002%s\002 already exists."), nick.c_str());
|
||||
u->SendMessage(BotServ, BOT_BOT_ALREADY_EXISTS, nick.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (nick.length() > Config->NickLen)
|
||||
{
|
||||
source.Reply(_("Bot Nicks may only contain valid nick characters."));
|
||||
u->SendMessage(BotServ, BOT_BAD_NICK);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (user.length() > Config->UserLen)
|
||||
{
|
||||
source.Reply(_("Bot Idents may only contain %d characters."), Config->UserLen);
|
||||
u->SendMessage(BotServ, BOT_LONG_IDENT, Config->UserLen);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (host.length() > Config->HostLen)
|
||||
{
|
||||
source.Reply(_("Bot Hosts may only contain %d characters."), Config->HostLen);
|
||||
u->SendMessage(BotServ, BOT_LONG_HOST, Config->HostLen);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
/* Check the nick is valid re RFC 2812 */
|
||||
if (isdigit(nick[0]) || nick[0] == '-')
|
||||
{
|
||||
source.Reply(_("Bot Nicks may only contain valid nick characters."));
|
||||
u->SendMessage(BotServ, BOT_BAD_NICK);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
for (unsigned i = 0, end = nick.length(); i < end && i < Config->NickLen; ++i)
|
||||
if (!isvalidnick(nick[i]))
|
||||
{
|
||||
source.Reply(_("Bot Nicks may only contain valid nick characters."));
|
||||
u->SendMessage(BotServ, BOT_BAD_NICK);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
/* check for hardcored ircd forbidden nicks */
|
||||
if (!ircdproto->IsNickValid(nick))
|
||||
{
|
||||
source.Reply(_("Bot Nicks may only contain valid nick characters."));
|
||||
u->SendMessage(BotServ, BOT_BAD_NICK);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
/* Check the host is valid re RFC 2812 */
|
||||
if (!isValidHost(host, 3))
|
||||
{
|
||||
source.Reply(_("Bot Hosts may only contain valid host characters."));
|
||||
u->SendMessage(BotServ, BOT_BAD_HOST);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
for (unsigned i = 0, end = user.length(); i < end && i < Config->UserLen; ++i)
|
||||
if (!isalnum(user[i]))
|
||||
{
|
||||
source.Reply(_("Bot Idents may only contain valid characters."), Config->UserLen);
|
||||
u->SendMessage(BotServ, BOT_BAD_IDENT, Config->UserLen);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
@@ -89,73 +89,73 @@ class CommandBSBot : public Command
|
||||
*/
|
||||
if (findnick(nick))
|
||||
{
|
||||
source.Reply(_(NICK_ALREADY_REGISTERED), nick.c_str());
|
||||
u->SendMessage(BotServ, NICK_ALREADY_REGISTERED, nick.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (!(bi = new BotInfo(nick, user, host, real)))
|
||||
{
|
||||
// XXX this cant happen?
|
||||
source.Reply(_("Sorry, bot creation failed."));
|
||||
u->SendMessage(BotServ, BOT_BOT_CREATION_FAILED);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
Log(LOG_ADMIN, source.u, this) << "ADD " << bi->GetMask() << " " << bi->realname;
|
||||
Log(LOG_ADMIN, u, this) << "ADD " << bi->GetMask() << " " << bi->realname;
|
||||
|
||||
source.Reply(_("%s!%s@%s (%s) added to the bot list."), bi->nick.c_str(), bi->GetIdent().c_str(), bi->host.c_str(), bi->realname.c_str());
|
||||
u->SendMessage(BotServ, BOT_BOT_ADDED, bi->nick.c_str(), bi->GetIdent().c_str(), bi->host.c_str(), bi->realname.c_str());
|
||||
|
||||
FOREACH_MOD(I_OnBotCreate, OnBotCreate(bi));
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
CommandReturn DoChange(CommandSource &source, const std::vector<Anope::string> ¶ms)
|
||||
CommandReturn DoChange(User *u, const std::vector<Anope::string> ¶ms)
|
||||
{
|
||||
const Anope::string &oldnick = params[1];
|
||||
const Anope::string &nick = params.size() > 2 ? params[2] : "";
|
||||
const Anope::string &user = params.size() > 3 ? params[3] : "";
|
||||
const Anope::string &host = params.size() > 4 ? params[4] : "";
|
||||
const Anope::string &real = params.size() > 5 ? params[5] : "";
|
||||
Anope::string oldnick = params[1];
|
||||
Anope::string nick = params.size() > 2 ? params[2] : "";
|
||||
Anope::string user = params.size() > 3 ? params[3] : "";
|
||||
Anope::string host = params.size() > 4 ? params[4] : "";
|
||||
Anope::string real = params.size() > 5 ? params[5] : "";
|
||||
BotInfo *bi;
|
||||
|
||||
if (oldnick.empty() || nick.empty())
|
||||
{
|
||||
this->OnSyntaxError(source, "CHANGE");
|
||||
this->OnSyntaxError(u, "CHANGE");
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (!(bi = findbot(oldnick)))
|
||||
{
|
||||
source.Reply(_(BOT_DOES_NOT_EXIST), oldnick.c_str());
|
||||
u->SendMessage(BotServ, BOT_DOES_NOT_EXIST, oldnick.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (!oldnick.equals_ci(nick) && nickIsServices(oldnick, false))
|
||||
{
|
||||
source.Reply(_(BOT_DOES_NOT_EXIST), oldnick.c_str());
|
||||
u->SendMessage(BotServ, BOT_DOES_NOT_EXIST, oldnick.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (nick.length() > Config->NickLen)
|
||||
{
|
||||
source.Reply(_("Bot Nicks may only contain valid nick characters."));
|
||||
u->SendMessage(BotServ, BOT_BAD_NICK);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (!user.empty() && user.length() > Config->UserLen)
|
||||
{
|
||||
source.Reply(_("Bot Idents may only contain %d characters."), Config->UserLen);
|
||||
u->SendMessage(BotServ, BOT_LONG_IDENT, Config->UserLen);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (!host.empty() && host.length() > Config->HostLen)
|
||||
{
|
||||
source.Reply(_("Bot Hosts may only contain %d characters."), Config->HostLen);
|
||||
u->SendMessage(BotServ, BOT_LONG_HOST, Config->HostLen);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (!oldnick.equals_ci(nick) && nickIsServices(nick, false))
|
||||
{
|
||||
source.Reply(_(BOT_DOES_NOT_EXIST), oldnick.c_str());
|
||||
u->SendMessage(BotServ, BOT_DOES_NOT_EXIST, oldnick.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
@@ -166,34 +166,34 @@ class CommandBSBot : public Command
|
||||
*/
|
||||
if (nick.equals_cs(bi->nick) && (!user.empty() ? user.equals_cs(bi->GetIdent()) : 1) && (!host.empty() ? host.equals_cs(bi->host) : 1) && (!real.empty() ? real.equals_cs(bi->realname) : 1))
|
||||
{
|
||||
source.Reply(_("Old info is equal to the new one."));
|
||||
u->SendMessage(BotServ, BOT_BOT_ANY_CHANGES);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
/* Check the nick is valid re RFC 2812 */
|
||||
if (isdigit(nick[0]) || nick[0] == '-')
|
||||
{
|
||||
source.Reply(_("Bot Nicks may only contain valid nick characters."));
|
||||
u->SendMessage(BotServ, BOT_BAD_NICK);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
for (unsigned i = 0, end = nick.length(); i < end && i < Config->NickLen; ++i)
|
||||
if (!isvalidnick(nick[i]))
|
||||
{
|
||||
source.Reply(_("Bot Nicks may only contain valid nick characters."));
|
||||
u->SendMessage(BotServ, BOT_BAD_NICK);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
/* check for hardcored ircd forbidden nicks */
|
||||
if (!ircdproto->IsNickValid(nick))
|
||||
{
|
||||
source.Reply(_("Bot Nicks may only contain valid nick characters."));
|
||||
u->SendMessage(BotServ, BOT_BAD_NICK);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (!host.empty() && !isValidHost(host, 3))
|
||||
{
|
||||
source.Reply(_("Bot Hosts may only contain valid host characters."));
|
||||
u->SendMessage(BotServ, BOT_BAD_HOST);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
@@ -201,13 +201,13 @@ class CommandBSBot : public Command
|
||||
for (unsigned i = 0, end = user.length(); i < end && i < Config->UserLen; ++i)
|
||||
if (!isalnum(user[i]))
|
||||
{
|
||||
source.Reply(_("Bot Idents may only contain valid characters."), Config->UserLen);
|
||||
u->SendMessage(BotServ, BOT_BAD_IDENT, Config->UserLen);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (!nick.equals_ci(bi->nick) && findbot(nick))
|
||||
{
|
||||
source.Reply(_("Bot \002%s\002 already exists."), nick.c_str());
|
||||
u->SendMessage(BotServ, BOT_BOT_ALREADY_EXISTS, nick.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
@@ -219,7 +219,7 @@ class CommandBSBot : public Command
|
||||
*/
|
||||
if (findnick(nick))
|
||||
{
|
||||
source.Reply(_(NICK_ALREADY_REGISTERED), nick.c_str());
|
||||
u->SendMessage(BotServ, NICK_ALREADY_REGISTERED, nick.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
@@ -241,7 +241,7 @@ class CommandBSBot : public Command
|
||||
{
|
||||
ircdproto->SendChangeBotNick(bi, nick);
|
||||
XLine x(bi->nick, "Reserved for services");
|
||||
ircdproto->SendSQLine(NULL, &x);
|
||||
ircdproto->SendSQLine(&x);
|
||||
}
|
||||
|
||||
if (!nick.equals_cs(bi->nick))
|
||||
@@ -258,78 +258,80 @@ class CommandBSBot : public Command
|
||||
{
|
||||
ircdproto->SendClientIntroduction(bi, ircd->pseudoclient_mode);
|
||||
XLine x(bi->nick, "Reserved for services");
|
||||
ircdproto->SendSQLine(NULL, &x);
|
||||
ircdproto->SendSQLine(&x);
|
||||
bi->RejoinAll();
|
||||
}
|
||||
|
||||
source.Reply(_("Bot \002%s\002 has been changed to %s!%s@%s (%s)"), oldnick.c_str(), bi->nick.c_str(), bi->GetIdent().c_str(), bi->host.c_str(), bi->realname.c_str());
|
||||
Log(LOG_ADMIN, source.u, this) << "CHANGE " << oldnick << " to " << bi->GetMask() << " " << bi->realname;
|
||||
u->SendMessage(BotServ, BOT_BOT_CHANGED, oldnick.c_str(), bi->nick.c_str(), bi->GetIdent().c_str(), bi->host.c_str(), bi->realname.c_str());
|
||||
Log(LOG_ADMIN, u, this) << "CHANGE " << oldnick << " to " << bi->GetMask() << " " << bi->realname;
|
||||
|
||||
FOREACH_MOD(I_OnBotChange, OnBotChange(bi));
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
CommandReturn DoDel(CommandSource &source, const std::vector<Anope::string> ¶ms)
|
||||
CommandReturn DoDel(User *u, const std::vector<Anope::string> ¶ms)
|
||||
{
|
||||
const Anope::string &nick = params[1];
|
||||
Anope::string nick = params[1];
|
||||
BotInfo *bi;
|
||||
|
||||
if (nick.empty())
|
||||
{
|
||||
this->OnSyntaxError(source, "DEL");
|
||||
this->OnSyntaxError(u, "DEL");
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (!(bi = findbot(nick)))
|
||||
{
|
||||
source.Reply(_(BOT_DOES_NOT_EXIST), nick.c_str());
|
||||
u->SendMessage(BotServ, BOT_DOES_NOT_EXIST, nick.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (nickIsServices(nick, false))
|
||||
{
|
||||
source.Reply(_(BOT_DOES_NOT_EXIST), nick.c_str());
|
||||
u->SendMessage(BotServ, BOT_DOES_NOT_EXIST, nick.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
FOREACH_MOD(I_OnBotDelete, OnBotDelete(bi));
|
||||
|
||||
Log(LOG_ADMIN, source.u, this) << "DEL " << bi->nick;
|
||||
ircdproto->SendQuit(bi, "Quit: Help! I'm being deleted by %s!", u->nick.c_str());
|
||||
XLine x(bi->nick);
|
||||
ircdproto->SendSQLineDel(&x);
|
||||
|
||||
Log(LOG_ADMIN, u, this) << "DEL " << bi->nick;
|
||||
|
||||
source.Reply(_("Bot \002%s\002 has been deleted."), nick.c_str());
|
||||
delete bi;
|
||||
u->SendMessage(BotServ, BOT_BOT_DELETED, nick.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
public:
|
||||
CommandBSBot() : Command("BOT", 1, 6)
|
||||
{
|
||||
this->SetFlag(CFLAG_STRIP_CHANNEL);
|
||||
this->SetDesc(_("Maintains network bot list"));
|
||||
}
|
||||
|
||||
CommandReturn Execute(CommandSource &source, const std::vector<Anope::string> ¶ms)
|
||||
CommandReturn Execute(User *u, const std::vector<Anope::string> ¶ms)
|
||||
{
|
||||
const Anope::string &cmd = params[0];
|
||||
User *u = source.u;
|
||||
Anope::string cmd = params[0];
|
||||
|
||||
if (readonly)
|
||||
{
|
||||
source.Reply(_("Sorry, bot modification is temporarily disabled."));
|
||||
u->SendMessage(BotServ, BOT_BOT_READONLY);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (cmd.equals_ci("ADD"))
|
||||
{
|
||||
// ADD nick user host real - 5
|
||||
if (!u->HasCommand("botserv/bot/add"))
|
||||
if (!u->Account()->HasCommand("botserv/bot/add"))
|
||||
{
|
||||
source.Reply(_(ACCESS_DENIED));
|
||||
u->SendMessage(BotServ, ACCESS_DENIED);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (params.size() < 5)
|
||||
{
|
||||
this->OnSyntaxError(source, "ADD");
|
||||
this->OnSyntaxError(u, "ADD");
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
@@ -338,78 +340,63 @@ class CommandBSBot : public Command
|
||||
if (tempparams.size() >= 6)
|
||||
tempparams[4] = tempparams[4] + " " + tempparams[5];
|
||||
|
||||
return this->DoAdd(source, tempparams);
|
||||
return this->DoAdd(u, tempparams);
|
||||
}
|
||||
else if (cmd.equals_ci("CHANGE"))
|
||||
{
|
||||
// CHANGE oldn newn user host real - 6
|
||||
// but only oldn and newn are required
|
||||
if (!u->HasCommand("botserv/bot/change"))
|
||||
if (!u->Account()->HasCommand("botserv/bot/change"))
|
||||
{
|
||||
source.Reply(_(ACCESS_DENIED));
|
||||
u->SendMessage(BotServ, ACCESS_DENIED);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (params.size() < 3)
|
||||
{
|
||||
this->OnSyntaxError(source, "CHANGE");
|
||||
this->OnSyntaxError(u, "CHANGE");
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
return this->DoChange(source, params);
|
||||
return this->DoChange(u, params);
|
||||
}
|
||||
else if (cmd.equals_ci("DEL"))
|
||||
{
|
||||
// DEL nick
|
||||
if (!u->HasCommand("botserv/bot/del"))
|
||||
if (!u->Account()->HasCommand("botserv/bot/del"))
|
||||
{
|
||||
source.Reply(_(ACCESS_DENIED));
|
||||
u->SendMessage(BotServ, ACCESS_DENIED);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (params.size() < 1)
|
||||
{
|
||||
this->OnSyntaxError(source, "DEL");
|
||||
this->OnSyntaxError(u, "DEL");
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
return this->DoDel(source, params);
|
||||
return this->DoDel(u, params);
|
||||
}
|
||||
else
|
||||
this->OnSyntaxError(source, "");
|
||||
this->OnSyntaxError(u, "");
|
||||
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
bool OnHelp(CommandSource &source, const Anope::string &subcommand)
|
||||
bool OnHelp(User *u, const Anope::string &subcommand)
|
||||
{
|
||||
source.Reply(_("Syntax: \002BOT ADD \037nick\037 \037user\037 \037host\037 \037real\037\002\n"
|
||||
" \002BOT CHANGE \037oldnick\037 \037newnick\037 [\037user\037 [\037host\037 [\037real\037]]]\002\n"
|
||||
" \002BOT DEL \037nick\037\002\n"
|
||||
" \n"
|
||||
"Allows Services Operators to create, modify, and delete\n"
|
||||
"bots that users will be able to use on their own\n"
|
||||
"channels.\n"
|
||||
" \n"
|
||||
"\002BOT ADD\002 adds a bot with the given nickname, username,\n"
|
||||
"hostname and realname. Since no integrity checks are done \n"
|
||||
"for these settings, be really careful.\n"
|
||||
"\002BOT CHANGE\002 allows to change nickname, username, hostname\n"
|
||||
"or realname of a bot without actually delete it (and all\n"
|
||||
"the data associated with it).\n"
|
||||
"\002BOT DEL\002 removes the given bot from the bot list. \n"
|
||||
" \n"
|
||||
"\002Note\002: you cannot create a bot that has a nick that is\n"
|
||||
"currently registered. If an unregistered user is currently\n"
|
||||
"using the nick, they will be killed."));
|
||||
u->SendMessage(BotServ, BOT_SERVADMIN_HELP_BOT);
|
||||
return true;
|
||||
}
|
||||
|
||||
void OnSyntaxError(CommandSource &source, const Anope::string &subcommand)
|
||||
void OnSyntaxError(User *u, const Anope::string &subcommand)
|
||||
{
|
||||
SyntaxError(source, "BOT", _("BOT ADD \037nick\037 \037user\037 \037host\037 \037real\037\n"
|
||||
"\002BOT CHANGE \037oldnick\037 \037newnick\037 [\037user\037 [\037host\037 [\037real\037]]]\002\n"
|
||||
"\002BOT DEL \037nick\037\002"));
|
||||
SyntaxError(BotServ, u, "BOT", BOT_BOT_SYNTAX);
|
||||
}
|
||||
|
||||
void OnServHelp(User *u)
|
||||
{
|
||||
u->SendMessage(BotServ, BOT_HELP_CMD_BOT);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
+24
-18
@@ -1,6 +1,6 @@
|
||||
/* BotServ core functions
|
||||
*
|
||||
* (C) 2003-2011 Anope Team
|
||||
* (C) 2003-2010 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
@@ -18,59 +18,65 @@ class CommandBSBotList : public Command
|
||||
public:
|
||||
CommandBSBotList() : Command("BOTLIST", 0, 0)
|
||||
{
|
||||
this->SetDesc(_("Lists available bots"));
|
||||
}
|
||||
|
||||
CommandReturn Execute(CommandSource &source, const std::vector<Anope::string> ¶ms)
|
||||
CommandReturn Execute(User *u, const std::vector<Anope::string> ¶ms)
|
||||
{
|
||||
User *u = source.u;
|
||||
unsigned count = 0;
|
||||
|
||||
for (Anope::insensitive_map<BotInfo *>::const_iterator it = BotListByNick.begin(), it_end = BotListByNick.end(); it != it_end; ++it)
|
||||
if (BotListByNick.empty())
|
||||
{
|
||||
u->SendMessage(BotServ, BOT_BOTLIST_EMPTY);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
for (botinfo_map::const_iterator it = BotListByNick.begin(), it_end = BotListByNick.end(); it != it_end; ++it)
|
||||
{
|
||||
BotInfo *bi = it->second;
|
||||
|
||||
if (!bi->HasFlag(BI_PRIVATE))
|
||||
{
|
||||
if (!count)
|
||||
source.Reply(_("Bot list:"));
|
||||
u->SendMessage(BotServ, BOT_BOTLIST_HEADER);
|
||||
++count;
|
||||
source.Reply(" %-15s (%s@%s)", bi->nick.c_str(), bi->GetIdent().c_str(), bi->host.c_str());
|
||||
u->SendMessage(Config->s_BotServ, " %-15s (%s@%s)", bi->nick.c_str(), bi->GetIdent().c_str(), bi->host.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
if (u->HasCommand("botserv/botlist") && count < BotListByNick.size())
|
||||
if (u->Account()->HasCommand("botserv/botlist") && count < BotListByNick.size())
|
||||
{
|
||||
source.Reply(_("Bots reserved to IRC operators:"));
|
||||
u->SendMessage(BotServ, BOT_BOTLIST_PRIVATE_HEADER);
|
||||
|
||||
for (Anope::insensitive_map<BotInfo *>::const_iterator it = BotListByNick.begin(), it_end = BotListByNick.end(); it != it_end; ++it)
|
||||
for (botinfo_map::const_iterator it = BotListByNick.begin(), it_end = BotListByNick.end(); it != it_end; ++it)
|
||||
{
|
||||
BotInfo *bi = it->second;
|
||||
|
||||
if (bi->HasFlag(BI_PRIVATE))
|
||||
{
|
||||
source.Reply(" %-15s (%s@%s)", bi->nick.c_str(), bi->GetIdent().c_str(), bi->host.c_str());
|
||||
u->SendMessage(Config->s_BotServ, " %-15s (%s@%s)", bi->nick.c_str(), bi->GetIdent().c_str(), bi->host.c_str());
|
||||
++count;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!count)
|
||||
source.Reply(_("There are no bots available at this time.\n"
|
||||
"Ask a Services Operator to create one!"));
|
||||
u->SendMessage(BotServ, BOT_BOTLIST_EMPTY);
|
||||
else
|
||||
source.Reply(_("%d bots available."), count);
|
||||
u->SendMessage(BotServ, BOT_BOTLIST_FOOTER, count);
|
||||
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
bool OnHelp(CommandSource &source, const Anope::string &subcommand)
|
||||
bool OnHelp(User *u, const Anope::string &subcommand)
|
||||
{
|
||||
source.Reply(_("Syntax: \002BOTLIST\002\n"
|
||||
" \n"
|
||||
"Lists all available bots on this network."));
|
||||
u->SendMessage(BotServ, BOT_HELP_BOTLIST);
|
||||
return true;
|
||||
}
|
||||
|
||||
void OnServHelp(User *u)
|
||||
{
|
||||
u->SendMessage(BotServ, BOT_HELP_CMD_BOTLIST);
|
||||
}
|
||||
};
|
||||
|
||||
class BSBotList : public Module
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* BotServ core functions
|
||||
*
|
||||
* (C) 2003-2011 Anope Team
|
||||
* (C) 2003-2010 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
@@ -20,35 +20,22 @@ class CommandBSHelp : public Command
|
||||
{
|
||||
this->SetFlag(CFLAG_ALLOW_UNREGISTERED);
|
||||
this->SetFlag(CFLAG_STRIP_CHANNEL);
|
||||
this->SetDesc(_("Displays this list and give information about commands"));
|
||||
}
|
||||
|
||||
CommandReturn Execute(CommandSource &source, const std::vector<Anope::string> ¶ms)
|
||||
CommandReturn Execute(User *u, const std::vector<Anope::string> ¶ms)
|
||||
{
|
||||
mod_help_cmd(BotServ, source.u, NULL, params[0]);
|
||||
mod_help_cmd(findbot(Config->s_BotServ), u, params[0]);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
void OnSyntaxError(CommandSource &source, const Anope::string &subcommand)
|
||||
void OnSyntaxError(User *u, const Anope::string &subcommand)
|
||||
{
|
||||
// Abuse syntax error to display general list help.
|
||||
User *u = source.u;
|
||||
source.Reply(_("\002%s\002 allows you to have a bot on your own channel.\n"
|
||||
"It has been created for users that can't host or\n"
|
||||
"configure a bot, or for use on networks that don't\n"
|
||||
"allow user bots. Available commands are listed \n"
|
||||
"below; to use them, type \002%s%s \037command\037\002. For\n"
|
||||
"more information on a specific command, type\n"
|
||||
"\002%s%s HELP \037command\037\002."),
|
||||
BotServ->nick.c_str(), Config->UseStrictPrivMsgString.c_str(), BotServ->nick.c_str(),
|
||||
Config->UseStrictPrivMsgString.c_str(), BotServ->nick.c_str());
|
||||
u->SendMessage(BotServ, BOT_HELP);
|
||||
for (CommandMap::const_iterator it = BotServ->Commands.begin(), it_end = BotServ->Commands.end(); it != it_end; ++it)
|
||||
if (!Config->HidePrivilegedCommands || it->second->permission.empty() || u->HasCommand(it->second->permission))
|
||||
it->second->OnServHelp(source);
|
||||
source.Reply(_("Bot will join a channel whenever there is at least\n"
|
||||
"\002%d\002 user(s) on it. Additionally, all %s commands\n"
|
||||
"can be used if fantasy is enabled by prefixing the command\n"
|
||||
"name with a %c."), Config->BSMinUsers, Config->s_ChanServ.c_str(), Config->BSFantasyCharacter[0]);
|
||||
if (!Config->HidePrivilegedCommands || it->second->permission.empty() || (u->Account() && u->Account()->HasCommand(it->second->permission)))
|
||||
it->second->OnServHelp(u);
|
||||
u->SendMessage(BotServ, BOT_HELP_FOOTER, Config->BSMinUsers);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
+73
-92
@@ -1,6 +1,6 @@
|
||||
/* BotServ core functions
|
||||
*
|
||||
* (C) 2003-2011 Anope Team
|
||||
* (C) 2003-2010 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
@@ -17,7 +17,7 @@
|
||||
class CommandBSInfo : public Command
|
||||
{
|
||||
private:
|
||||
void send_bot_channels(CommandSource &source, BotInfo *bi)
|
||||
void send_bot_channels(User *u, BotInfo *bi)
|
||||
{
|
||||
Anope::string buf;
|
||||
for (registered_channel_map::const_iterator it = RegisteredChannelList.begin(), it_end = RegisteredChannelList.end(); it != it_end; ++it)
|
||||
@@ -28,7 +28,7 @@ class CommandBSInfo : public Command
|
||||
{
|
||||
if (buf.length() + ci->name.length() > 300)
|
||||
{
|
||||
source.Reply("%s", buf.c_str());
|
||||
u->SendMessage(Config->s_BotServ, "%s", buf.c_str());
|
||||
buf.clear();
|
||||
}
|
||||
buf += " " + ci->name + " ";
|
||||
@@ -36,204 +36,185 @@ class CommandBSInfo : public Command
|
||||
}
|
||||
|
||||
if (!buf.empty())
|
||||
source.Reply("%s", buf.c_str());
|
||||
u->SendMessage(Config->s_BotServ, "%s", buf.c_str());
|
||||
return;
|
||||
}
|
||||
public:
|
||||
CommandBSInfo() : Command("INFO", 1, 1)
|
||||
{
|
||||
this->SetFlag(CFLAG_STRIP_CHANNEL);
|
||||
this->SetDesc(_("Allows you to see BotServ information about a channel or a bot"));
|
||||
}
|
||||
|
||||
CommandReturn Execute(CommandSource &source, const std::vector<Anope::string> ¶ms)
|
||||
CommandReturn Execute(User *u, const std::vector<Anope::string> ¶ms)
|
||||
{
|
||||
const Anope::string &query = params[0];
|
||||
BotInfo *bi;
|
||||
ChannelInfo *ci;
|
||||
Anope::string query = params[0];
|
||||
|
||||
bool need_comma = false;
|
||||
int need_comma = 0;
|
||||
char buf[BUFSIZE], *end;
|
||||
|
||||
User *u = source.u;
|
||||
BotInfo *bi = findbot(query);
|
||||
ChannelInfo *ci;
|
||||
if (bi)
|
||||
if ((bi = findbot(query)))
|
||||
{
|
||||
source.Reply(_("Information for bot \002%s\002:"), bi->nick.c_str());
|
||||
source.Reply(_(" Mask : %s@%s"), bi->GetIdent().c_str(), bi->host.c_str());
|
||||
source.Reply(_(" Real name : %s"), bi->realname.c_str());
|
||||
source.Reply(_(" Created : %s"), do_strftime(bi->created).c_str());
|
||||
source.Reply(_(" Options : %s"), bi->HasFlag(BI_PRIVATE) ? _("Private") : _("None"));
|
||||
source.Reply(_(" Used on : %d channel(s)"), bi->chancount);
|
||||
u->SendMessage(BotServ, BOT_INFO_BOT_HEADER, bi->nick.c_str());
|
||||
u->SendMessage(BotServ, BOT_INFO_BOT_MASK, bi->GetIdent().c_str(), bi->host.c_str());
|
||||
u->SendMessage(BotServ, BOT_INFO_BOT_REALNAME, bi->realname.c_str());
|
||||
u->SendMessage(BotServ, BOT_INFO_BOT_CREATED, do_strftime(bi->created).c_str());
|
||||
u->SendMessage(BotServ, BOT_INFO_BOT_OPTIONS, GetString(u, (bi->HasFlag(BI_PRIVATE) ? NICK_INFO_OPT_PRIVATE : NICK_INFO_OPT_NONE)).c_str());
|
||||
u->SendMessage(BotServ, BOT_INFO_BOT_USAGE, bi->chancount);
|
||||
|
||||
if (u->HasPriv("botserv/administration"))
|
||||
this->send_bot_channels(source, bi);
|
||||
if (u->Account()->HasPriv("botserv/administration"))
|
||||
this->send_bot_channels(u, bi);
|
||||
}
|
||||
else if ((ci = cs_findchan(query)))
|
||||
{
|
||||
if (!check_access(u, ci, CA_FOUNDER) && !u->HasPriv("botserv/administration"))
|
||||
if (!check_access(u, ci, CA_FOUNDER) && !u->Account()->HasPriv("botserv/administration"))
|
||||
{
|
||||
source.Reply(_(ACCESS_DENIED));
|
||||
u->SendMessage(BotServ, ACCESS_DENIED);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
source.Reply(_(CHAN_INFO_HEADER), ci->name.c_str());
|
||||
u->SendMessage(BotServ, CHAN_INFO_HEADER, ci->name.c_str());
|
||||
if (ci->bi)
|
||||
source.Reply(_(" Bot nick : %s"), ci->bi->nick.c_str());
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_BOT, ci->bi->nick.c_str());
|
||||
else
|
||||
source.Reply(_(" Bot nick : not assigned yet."));
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_BOT_NONE);
|
||||
|
||||
if (ci->botflags.HasFlag(BS_KICK_BADWORDS))
|
||||
{
|
||||
if (ci->ttb[TTB_BADWORDS])
|
||||
source.Reply(_(" Bad words kicker : %s (%d kick(s) to ban)"), _(ENABLED), ci->ttb[TTB_BADWORDS]);
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_BADWORDS_BAN, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->ttb[TTB_BADWORDS]);
|
||||
else
|
||||
source.Reply(_(" Bad words kicker : %s"), _(ENABLED));
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_BADWORDS, GetString(u, BOT_INFO_ACTIVE).c_str());
|
||||
}
|
||||
else
|
||||
source.Reply(_(" Bad words kicker : %s"), _(DISABLED));
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_BADWORDS, GetString(u, BOT_INFO_INACTIVE).c_str());
|
||||
if (ci->botflags.HasFlag(BS_KICK_BOLDS))
|
||||
{
|
||||
if (ci->ttb[TTB_BOLDS])
|
||||
source.Reply(_(" Bolds kicker : %s (%d kick(s) to ban)"), _(ENABLED), ci->ttb[TTB_BOLDS]);
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_BOLDS_BAN, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->ttb[TTB_BOLDS]);
|
||||
else
|
||||
source.Reply(_(" Bolds kicker : %s"), _(ENABLED));
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_BOLDS, GetString(u, BOT_INFO_ACTIVE).c_str());
|
||||
}
|
||||
else
|
||||
source.Reply(_(" Bolds kicker : %s"), _(DISABLED));
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_BOLDS, GetString(u, BOT_INFO_INACTIVE).c_str());
|
||||
if (ci->botflags.HasFlag(BS_KICK_CAPS))
|
||||
{
|
||||
if (ci->ttb[TTB_CAPS])
|
||||
source.Reply(_(" Caps kicker : %s (%d kick(s) to ban; minimum %d/%d%%)"), _(ENABLED), ci->ttb[TTB_CAPS], ci->capsmin, ci->capspercent);
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_CAPS_BAN, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->ttb[TTB_CAPS], ci->capsmin, ci->capspercent);
|
||||
else
|
||||
source.Reply(_(" Caps kicker : %s (minimum %d/%d%%)"), _(ENABLED), ci->capsmin, ci->capspercent);
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_CAPS_ON, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->capsmin, ci->capspercent);
|
||||
}
|
||||
else
|
||||
source.Reply(_(" Caps kicker : %s"), _(DISABLED));
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_CAPS_OFF, GetString(u, BOT_INFO_INACTIVE).c_str());
|
||||
if (ci->botflags.HasFlag(BS_KICK_COLORS))
|
||||
{
|
||||
if (ci->ttb[TTB_COLORS])
|
||||
source.Reply(_(" Colors kicker : %s (%d kick(s) to ban)"), _(ENABLED), ci->ttb[TTB_COLORS]);
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_COLORS_BAN, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->ttb[TTB_COLORS]);
|
||||
else
|
||||
source.Reply(_(" Colors kicker : %s"), _(ENABLED));
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_COLORS, GetString(u, BOT_INFO_ACTIVE).c_str());
|
||||
}
|
||||
else
|
||||
source.Reply(_(" Colors kicker : %s"), _(DISABLED));
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_COLORS, GetString(u, BOT_INFO_INACTIVE).c_str());
|
||||
if (ci->botflags.HasFlag(BS_KICK_FLOOD))
|
||||
{
|
||||
if (ci->ttb[TTB_FLOOD])
|
||||
source.Reply(_(" Flood kicker : %s (%d kick(s) to ban; %d lines in %ds)"), _(ENABLED), ci->ttb[TTB_FLOOD], ci->floodlines, ci->floodsecs);
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_FLOOD_BAN, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->ttb[TTB_FLOOD], ci->floodlines, ci->floodsecs);
|
||||
else
|
||||
source.Reply(_(" Flood kicker : %s (%d lines in %ds)"), _(ENABLED), ci->floodlines, ci->floodsecs);
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_FLOOD_ON, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->floodlines, ci->floodsecs);
|
||||
}
|
||||
else
|
||||
source.Reply(_(" Flood kicker : %s"), _(DISABLED));
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_FLOOD_OFF, GetString(u, BOT_INFO_INACTIVE).c_str());
|
||||
if (ci->botflags.HasFlag(BS_KICK_REPEAT))
|
||||
{
|
||||
if (ci->ttb[TTB_REPEAT])
|
||||
source.Reply(_(" Repeat kicker : %s (%d kick(s) to ban; %d times)"), _(ENABLED), ci->ttb[TTB_REPEAT], ci->repeattimes);
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_REPEAT_BAN, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->ttb[TTB_REPEAT], ci->repeattimes);
|
||||
else
|
||||
source.Reply(_(" Repeat kicker : %s (%d times)"), _(ENABLED), ci->repeattimes);
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_REPEAT_ON, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->repeattimes);
|
||||
}
|
||||
else
|
||||
source.Reply(_(" Repeat kicker : %s"), _(DISABLED));
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_REPEAT_OFF, GetString(u, BOT_INFO_INACTIVE).c_str());
|
||||
if (ci->botflags.HasFlag(BS_KICK_REVERSES))
|
||||
{
|
||||
if (ci->ttb[TTB_REVERSES])
|
||||
source.Reply(_(" Reverses kicker : %s (%d kick(s) to ban)"), _(ENABLED), ci->ttb[TTB_REVERSES]);
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_REVERSES_BAN, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->ttb[TTB_REVERSES]);
|
||||
else
|
||||
source.Reply(_(" Reverses kicker : %s"), _(ENABLED));
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_REVERSES, GetString(u, BOT_INFO_ACTIVE).c_str());
|
||||
}
|
||||
else
|
||||
source.Reply(_(" Reverses kicker : %s"), _(DISABLED));
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_REVERSES, GetString(u, BOT_INFO_INACTIVE).c_str());
|
||||
if (ci->botflags.HasFlag(BS_KICK_UNDERLINES))
|
||||
{
|
||||
if (ci->ttb[TTB_UNDERLINES])
|
||||
source.Reply(_(" Underlines kicker : %s (%d kick(s) to ban)"), _(ENABLED), ci->ttb[TTB_UNDERLINES]);
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_UNDERLINES_BAN, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->ttb[TTB_UNDERLINES]);
|
||||
else
|
||||
source.Reply(_(" Underlines kicker : %s"), _(ENABLED));
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_UNDERLINES, GetString(u, BOT_INFO_ACTIVE).c_str());
|
||||
}
|
||||
else
|
||||
source.Reply(_(" Underlines kicker : %s"), _(DISABLED));
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_UNDERLINES, GetString(u, BOT_INFO_INACTIVE).c_str());
|
||||
if (ci->botflags.HasFlag(BS_KICK_ITALICS))
|
||||
{
|
||||
if (ci->ttb[TTB_ITALICS])
|
||||
source.Reply(_(" Italics kicker : %s (%d kick(s) to ban)"), _(ENABLED), ci->ttb[TTB_ITALICS]);
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_ITALICS_BAN, GetString(u, BOT_INFO_ACTIVE).c_str(), ci->ttb[TTB_ITALICS]);
|
||||
else
|
||||
source.Reply(_(" Italics kicker : %s"), _(ENABLED));
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_ITALICS, GetString(u, BOT_INFO_ACTIVE).c_str());
|
||||
}
|
||||
else
|
||||
source.Reply(_(" Italics kicker : %s"), _(DISABLED));
|
||||
if (ci->botflags.HasFlag(BS_KICK_AMSGS))
|
||||
{
|
||||
if (ci->ttb[TTB_AMSGS])
|
||||
source.Reply(_(" AMSG kicker : %s (%d kick(s) to ban)"), _(ENABLED), ci->ttb[TTB_AMSGS]);
|
||||
else
|
||||
source.Reply(_(" AMSG kicker : %s"), _(ENABLED));
|
||||
}
|
||||
else
|
||||
source.Reply(_(" AMSG kicker : %s"), _(DISABLED));
|
||||
|
||||
if (ci->botflags.HasFlag(BS_MSG_PRIVMSG))
|
||||
source.Reply(_(" Fantasy reply : %s"), "PRIVMSG");
|
||||
else if (ci->botflags.HasFlag(BS_MSG_NOTICE))
|
||||
source.Reply(_(" Fantasy reply : %s"), "NOTICE");
|
||||
else if (ci->botflags.HasFlag(BS_MSG_NOTICEOPS))
|
||||
source.Reply(_(" Fantasy reply : %s"), "NOTICEOPS");
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_KICK_ITALICS, GetString(u, BOT_INFO_INACTIVE).c_str());
|
||||
|
||||
end = buf;
|
||||
*end = 0;
|
||||
if (ci->botflags.HasFlag(BS_DONTKICKOPS))
|
||||
{
|
||||
end += snprintf(end, sizeof(buf) - (end - buf), "%s", _("Ops protection"));
|
||||
need_comma = true;
|
||||
end += snprintf(end, sizeof(buf) - (end - buf), "%s", GetString(u, BOT_INFO_OPT_DONTKICKOPS).c_str());
|
||||
need_comma = 1;
|
||||
}
|
||||
if (ci->botflags.HasFlag(BS_DONTKICKVOICES))
|
||||
{
|
||||
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? ", " : "", _("Voices protection"));
|
||||
need_comma = true;
|
||||
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? ", " : "", GetString(u, BOT_INFO_OPT_DONTKICKVOICES).c_str());
|
||||
need_comma = 1;
|
||||
}
|
||||
if (ci->botflags.HasFlag(BS_FANTASY))
|
||||
{
|
||||
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? ", " : "", _("Fantasy"));
|
||||
need_comma = true;
|
||||
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? ", " : "", GetString(u, BOT_INFO_OPT_FANTASY).c_str());
|
||||
need_comma = 1;
|
||||
}
|
||||
if (ci->botflags.HasFlag(BS_GREET))
|
||||
{
|
||||
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? ", " : "", _("Greet"));
|
||||
need_comma = true;
|
||||
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? ", " : "", GetString(u, BOT_INFO_OPT_GREET).c_str());
|
||||
need_comma = 1;
|
||||
}
|
||||
if (ci->botflags.HasFlag(BS_NOBOT))
|
||||
{
|
||||
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? ", " : "", _("No bot"));
|
||||
need_comma = true;
|
||||
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? ", " : "", GetString(u, BOT_INFO_OPT_NOBOT).c_str());
|
||||
need_comma = 1;
|
||||
}
|
||||
if (ci->botflags.HasFlag(BS_SYMBIOSIS))
|
||||
{
|
||||
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? ", " : "", _("Symbiosis"));
|
||||
need_comma = true;
|
||||
end += snprintf(end, sizeof(buf) - (end - buf), "%s%s", need_comma ? ", " : "", GetString(u, BOT_INFO_OPT_SYMBIOSIS).c_str());
|
||||
need_comma = 1;
|
||||
}
|
||||
source.Reply(_(" Options : %s"), *buf ? buf : _("None"));
|
||||
u->SendMessage(BotServ, BOT_INFO_CHAN_OPTIONS, *buf ? buf : GetString(u, BOT_INFO_OPT_NONE).c_str());
|
||||
}
|
||||
else
|
||||
source.Reply(_("\002%s\002 is not a valid bot or registered channel."), query.c_str());
|
||||
u->SendMessage(BotServ, BOT_INFO_NOT_FOUND, query.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
bool OnHelp(CommandSource &source, const Anope::string &subcommand)
|
||||
bool OnHelp(User *u, const Anope::string &subcommand)
|
||||
{
|
||||
source.Reply(_("Syntax: \002INFO {\037chan\037 | \037nick\037}\002\n"
|
||||
" \n"
|
||||
"Allows you to see %s information about a channel or a bot.\n"
|
||||
"If the parameter is a channel, then you'll get information\n"
|
||||
"such as enabled kickers. If the parameter is a nick,\n"
|
||||
"you'll get information about a bot, such as creation\n"
|
||||
"time or number of channels it is on."), NickServ->nick.c_str());
|
||||
u->SendMessage(BotServ, BOT_HELP_INFO);
|
||||
return true;
|
||||
}
|
||||
|
||||
void OnSyntaxError(CommandSource &source, const Anope::string &subcommand)
|
||||
void OnSyntaxError(User *u, const Anope::string &subcommand)
|
||||
{
|
||||
SyntaxError(source, "INFO", _("INFO {\037chan\037 | \037nick\037}"));
|
||||
SyntaxError(BotServ, u, "INFO", BOT_INFO_SYNTAX);
|
||||
}
|
||||
|
||||
void OnServHelp(User *u)
|
||||
{
|
||||
u->SendMessage(BotServ, BOT_HELP_CMD_INFO);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
+91
-252
@@ -1,6 +1,6 @@
|
||||
/* BotServ core functions
|
||||
*
|
||||
* (C) 2003-2011 Anope Team
|
||||
* (C) 2003-2010 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
@@ -19,29 +19,27 @@ class CommandBSKick : public Command
|
||||
public:
|
||||
CommandBSKick() : Command("KICK", 3, 6)
|
||||
{
|
||||
this->SetDesc(_("Configures kickers"));
|
||||
}
|
||||
|
||||
CommandReturn Execute(CommandSource &source, const std::vector<Anope::string> ¶ms)
|
||||
CommandReturn Execute(User *u, const std::vector<Anope::string> ¶ms)
|
||||
{
|
||||
const Anope::string &chan = params[0];
|
||||
const Anope::string &option = params[1];
|
||||
const Anope::string &value = params[2];
|
||||
const Anope::string &ttb = params.size() > 3 ? params[3] : "";
|
||||
Anope::string chan = params[0];
|
||||
Anope::string option = params[1];
|
||||
Anope::string value = params[2];
|
||||
Anope::string ttb = params.size() > 3 ? params[3] : "";
|
||||
|
||||
User *u = source.u;
|
||||
ChannelInfo *ci = source.ci;
|
||||
ChannelInfo *ci = cs_findchan(chan);
|
||||
|
||||
if (readonly)
|
||||
source.Reply(_("Sorry, kicker configuration is temporarily disabled."));
|
||||
u->SendMessage(BotServ, BOT_KICK_DISABLED);
|
||||
else if (chan.empty() || option.empty() || value.empty())
|
||||
SyntaxError(source, "KICK", _("KICK \037channel\037 \037option\037 {\037ON|\037} [\037settings\037]"));
|
||||
SyntaxError(BotServ, u, "KICK", BOT_KICK_SYNTAX);
|
||||
else if (!value.equals_ci("ON") && !value.equals_ci("OFF"))
|
||||
SyntaxError(source, "KICK", _("KICK \037channel\037 \037option\037 {\037ON|\037} [\037settings\037]"));
|
||||
else if (!check_access(u, ci, CA_SET) && !u->HasPriv("botserv/administration"))
|
||||
source.Reply(_(ACCESS_DENIED));
|
||||
SyntaxError(BotServ, u, "KICK", BOT_KICK_SYNTAX);
|
||||
else if (!check_access(u, ci, CA_SET) && !u->Account()->HasPriv("botserv/administration"))
|
||||
u->SendMessage(BotServ, ACCESS_DENIED);
|
||||
else if (!ci->bi)
|
||||
source.Reply(_(BOT_NOT_ASSIGNED), Config->UseStrictPrivMsgString.c_str(), BotServ->nick.c_str());
|
||||
u->SendMessage(BotServ, BOT_NOT_ASSIGNED);
|
||||
else
|
||||
{
|
||||
bool override = !check_access(u, ci, CA_SET);
|
||||
@@ -57,13 +55,13 @@ class CommandBSKick : public Command
|
||||
{
|
||||
ci->ttb[TTB_BADWORDS] = convertTo<int16>(ttb);
|
||||
if (ci->ttb[TTB_BADWORDS] < 0)
|
||||
throw ConvertException();
|
||||
throw CoreException();
|
||||
}
|
||||
catch (const ConvertException &)
|
||||
catch (const CoreException &)
|
||||
{
|
||||
/* reset the value back to 0 - TSL */
|
||||
ci->ttb[TTB_BADWORDS] = 0;
|
||||
source.Reply(_("\002%s\002 cannot be taken as times to ban."), ttb.c_str());
|
||||
u->SendMessage(BotServ, BOT_KICK_BAD_TTB, ttb.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
}
|
||||
@@ -72,17 +70,14 @@ class CommandBSKick : public Command
|
||||
|
||||
ci->botflags.SetFlag(BS_KICK_BADWORDS);
|
||||
if (ci->ttb[TTB_BADWORDS])
|
||||
source.Reply(_("Bot will now kick \002bad words\002, and will place a ban after \n"
|
||||
"%d kicks for the same user. Use the BADWORDS command\n"
|
||||
"to add or remove a bad word."), ci->ttb[TTB_BADWORDS]);
|
||||
u->SendMessage(BotServ, BOT_KICK_BADWORDS_ON_BAN, ci->ttb[TTB_BADWORDS]);
|
||||
else
|
||||
source.Reply(_("Bot will now kick \002bad words\002. Use the BADWORDS command\n"
|
||||
"to add or remove a bad word."));
|
||||
u->SendMessage(BotServ, BOT_KICK_BADWORDS_ON);
|
||||
}
|
||||
else
|
||||
{
|
||||
ci->botflags.UnsetFlag(BS_KICK_BADWORDS);
|
||||
source.Reply(_("Bot won't kick \002bad words\002 anymore."));
|
||||
u->SendMessage(BotServ, BOT_KICK_BADWORDS_OFF);
|
||||
}
|
||||
}
|
||||
else if (option.equals_ci("BOLDS"))
|
||||
@@ -95,12 +90,12 @@ class CommandBSKick : public Command
|
||||
{
|
||||
ci->ttb[TTB_BOLDS] = convertTo<int16>(ttb);
|
||||
if (ci->ttb[TTB_BOLDS] < 0)
|
||||
throw ConvertException();
|
||||
throw CoreException();
|
||||
}
|
||||
catch (const ConvertException &)
|
||||
catch (const CoreException &)
|
||||
{
|
||||
ci->ttb[TTB_BOLDS] = 0;
|
||||
source.Reply(_("\002%s\002 cannot be taken as times to ban."), ttb.c_str());
|
||||
u->SendMessage(BotServ, BOT_KICK_BAD_TTB, ttb.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
}
|
||||
@@ -108,14 +103,14 @@ class CommandBSKick : public Command
|
||||
ci->ttb[TTB_BOLDS] = 0;
|
||||
ci->botflags.SetFlag(BS_KICK_BOLDS);
|
||||
if (ci->ttb[TTB_BOLDS])
|
||||
source.Reply(_("Bot will now kick \002bolds\002, and will place a ban after\n%d kicks to the same user."), ci->ttb[TTB_BOLDS]);
|
||||
u->SendMessage(BotServ, BOT_KICK_BOLDS_ON_BAN, ci->ttb[TTB_BOLDS]);
|
||||
else
|
||||
source.Reply(_("Bot will now kick \002bolds\002."));
|
||||
u->SendMessage(BotServ, BOT_KICK_BOLDS_ON);
|
||||
}
|
||||
else
|
||||
{
|
||||
ci->botflags.UnsetFlag(BS_KICK_BOLDS);
|
||||
source.Reply(_("Bot won't kick \002bolds\002 anymore."));
|
||||
u->SendMessage(BotServ, BOT_KICK_BOLDS_OFF);
|
||||
}
|
||||
}
|
||||
else if (option.equals_ci("CAPS"))
|
||||
@@ -131,12 +126,12 @@ class CommandBSKick : public Command
|
||||
{
|
||||
ci->ttb[TTB_CAPS] = convertTo<int16>(ttb);
|
||||
if (ci->ttb[TTB_CAPS] < 0)
|
||||
throw ConvertException();
|
||||
throw CoreException();
|
||||
}
|
||||
catch (const ConvertException &)
|
||||
catch (const CoreException &)
|
||||
{
|
||||
ci->ttb[TTB_CAPS] = 0;
|
||||
source.Reply(_("\002%s\002 cannot be taken as times to ban."), ttb.c_str());
|
||||
u->SendMessage(BotServ, BOT_KICK_BAD_TTB, ttb.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
}
|
||||
@@ -148,7 +143,7 @@ class CommandBSKick : public Command
|
||||
{
|
||||
ci->capsmin = convertTo<int16>(min);
|
||||
}
|
||||
catch (const ConvertException &) { }
|
||||
catch (const CoreException &) { }
|
||||
if (ci->capsmin < 1)
|
||||
ci->capsmin = 10;
|
||||
|
||||
@@ -157,23 +152,20 @@ class CommandBSKick : public Command
|
||||
{
|
||||
ci->capspercent = convertTo<int16>(percent);
|
||||
}
|
||||
catch (const ConvertException &) { }
|
||||
catch (const CoreException &) { }
|
||||
if (ci->capspercent < 1 || ci->capspercent > 100)
|
||||
ci->capspercent = 25;
|
||||
|
||||
ci->botflags.SetFlag(BS_KICK_CAPS);
|
||||
if (ci->ttb[TTB_CAPS])
|
||||
source.Reply(_("Bot will now kick \002caps\002 (they must constitute at least\n"
|
||||
"%d characters and %d%% of the entire message), and will \n"
|
||||
"place a ban after %d kicks for the same user."), ci->capsmin, ci->capspercent, ci->ttb[TTB_CAPS]);
|
||||
u->SendMessage(BotServ, BOT_KICK_CAPS_ON_BAN, ci->capsmin, ci->capspercent, ci->ttb[TTB_CAPS]);
|
||||
else
|
||||
source.Reply(_("Bot will now kick \002caps\002 (they must constitute at least\n"
|
||||
"%d characters and %d%% of the entire message)."), ci->capsmin, ci->capspercent);
|
||||
u->SendMessage(BotServ, BOT_KICK_CAPS_ON, ci->capsmin, ci->capspercent);
|
||||
}
|
||||
else
|
||||
{
|
||||
ci->botflags.UnsetFlag(BS_KICK_CAPS);
|
||||
source.Reply(_("Bot won't kick \002caps\002 anymore."));
|
||||
u->SendMessage(BotServ, BOT_KICK_CAPS_OFF);
|
||||
}
|
||||
}
|
||||
else if (option.equals_ci("COLORS"))
|
||||
@@ -186,12 +178,12 @@ class CommandBSKick : public Command
|
||||
{
|
||||
ci->ttb[TTB_COLORS] = convertTo<int16>(ttb);
|
||||
if (ci->ttb[TTB_COLORS] < 1)
|
||||
throw ConvertException();
|
||||
throw CoreException();
|
||||
}
|
||||
catch (const ConvertException &)
|
||||
catch (const CoreException &)
|
||||
{
|
||||
ci->ttb[TTB_COLORS] = 0;
|
||||
source.Reply(_("\002%s\002 cannot be taken as times to ban."), ttb.c_str());
|
||||
u->SendMessage(BotServ, BOT_KICK_BAD_TTB, ttb.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
}
|
||||
@@ -200,14 +192,14 @@ class CommandBSKick : public Command
|
||||
|
||||
ci->botflags.SetFlag(BS_KICK_COLORS);
|
||||
if (ci->ttb[TTB_COLORS])
|
||||
source.Reply(_("Bot will now kick \002colors\002, and will place a ban after %d\nkicks for the same user."), ci->ttb[TTB_COLORS]);
|
||||
u->SendMessage(BotServ, BOT_KICK_COLORS_ON_BAN, ci->ttb[TTB_COLORS]);
|
||||
else
|
||||
source.Reply(_("Bot will now kick \002colors\002."));
|
||||
u->SendMessage(BotServ, BOT_KICK_COLORS_ON);
|
||||
}
|
||||
else
|
||||
{
|
||||
ci->botflags.UnsetFlag(BS_KICK_COLORS);
|
||||
source.Reply(_("Bot won't kick \002colors\002 anymore."));
|
||||
u->SendMessage(BotServ, BOT_KICK_COLORS_OFF);
|
||||
}
|
||||
}
|
||||
else if (option.equals_ci("FLOOD"))
|
||||
@@ -223,12 +215,12 @@ class CommandBSKick : public Command
|
||||
{
|
||||
ci->ttb[TTB_FLOOD] = convertTo<int16>(ttb);
|
||||
if (ci->ttb[TTB_FLOOD] < 1)
|
||||
throw ConvertException();
|
||||
throw CoreException();
|
||||
}
|
||||
catch (const ConvertException &)
|
||||
catch (const CoreException &)
|
||||
{
|
||||
ci->ttb[TTB_FLOOD] = 0;
|
||||
source.Reply(_("\002%s\002 cannot be taken as times to ban."), ttb.c_str());
|
||||
u->SendMessage(BotServ, BOT_KICK_BAD_TTB, ttb.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
}
|
||||
@@ -240,7 +232,7 @@ class CommandBSKick : public Command
|
||||
{
|
||||
ci->floodlines = convertTo<int16>(lines);
|
||||
}
|
||||
catch (const ConvertException &) { }
|
||||
catch (const CoreException &) { }
|
||||
if (ci->floodlines < 2)
|
||||
ci->floodlines = 6;
|
||||
|
||||
@@ -249,7 +241,7 @@ class CommandBSKick : public Command
|
||||
{
|
||||
ci->floodsecs = convertTo<int16>(secs);
|
||||
}
|
||||
catch (const ConvertException &) { }
|
||||
catch (const CoreException &) { }
|
||||
if (ci->floodsecs < 1)
|
||||
ci->floodsecs = 10;
|
||||
if (ci->floodsecs > Config->BSKeepData)
|
||||
@@ -257,14 +249,14 @@ class CommandBSKick : public Command
|
||||
|
||||
ci->botflags.SetFlag(BS_KICK_FLOOD);
|
||||
if (ci->ttb[TTB_FLOOD])
|
||||
source.Reply(_("Bot will now kick \002flood\002 (%d lines in %d seconds and\nwill place a ban after %d kicks for the same user."), ci->floodlines, ci->floodsecs, ci->ttb[TTB_FLOOD]);
|
||||
u->SendMessage(BotServ, BOT_KICK_FLOOD_ON_BAN, ci->floodlines, ci->floodsecs, ci->ttb[TTB_FLOOD]);
|
||||
else
|
||||
source.Reply(_("Bot will now kick \002flood\002 (%d lines in %d seconds)."), ci->floodlines, ci->floodsecs);
|
||||
u->SendMessage(BotServ, BOT_KICK_FLOOD_ON, ci->floodlines, ci->floodsecs);
|
||||
}
|
||||
else
|
||||
{
|
||||
ci->botflags.UnsetFlag(BS_KICK_FLOOD);
|
||||
source.Reply(_("Bot won't kick \002flood\002 anymore."));
|
||||
u->SendMessage(BotServ, BOT_KICK_FLOOD_OFF);
|
||||
}
|
||||
}
|
||||
else if (option.equals_ci("REPEAT"))
|
||||
@@ -279,12 +271,12 @@ class CommandBSKick : public Command
|
||||
{
|
||||
ci->ttb[TTB_REPEAT] = convertTo<int16>(ttb);
|
||||
if (ci->ttb[TTB_REPEAT] < 0)
|
||||
throw ConvertException();
|
||||
throw CoreException();
|
||||
}
|
||||
catch (const ConvertException &)
|
||||
catch (const CoreException &)
|
||||
{
|
||||
ci->ttb[TTB_REPEAT] = 0;
|
||||
source.Reply(_("\002%s\002 cannot be taken as times to ban."), ttb.c_str());
|
||||
u->SendMessage(BotServ, BOT_KICK_BAD_TTB, ttb.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
}
|
||||
@@ -296,23 +288,20 @@ class CommandBSKick : public Command
|
||||
{
|
||||
ci->repeattimes = convertTo<int16>(times);
|
||||
}
|
||||
catch (const ConvertException &) { }
|
||||
catch (const CoreException &) { }
|
||||
if (ci->repeattimes < 2)
|
||||
ci->repeattimes = 3;
|
||||
|
||||
ci->botflags.SetFlag(BS_KICK_REPEAT);
|
||||
if (ci->ttb[TTB_REPEAT])
|
||||
source.Reply(_("Bot will now kick \002repeats\002 (users that say %d times\n"
|
||||
"the same thing), and will place a ban after %d \n"
|
||||
"kicks for the same user."), ci->repeattimes, ci->ttb[TTB_REPEAT]);
|
||||
u->SendMessage(BotServ, BOT_KICK_REPEAT_ON_BAN, ci->repeattimes, ci->ttb[TTB_REPEAT]);
|
||||
else
|
||||
source.Reply(_("Bot will now kick \002repeats\002 (users that say %d times\n"
|
||||
"the same thing)."), ci->repeattimes);
|
||||
u->SendMessage(BotServ, BOT_KICK_REPEAT_ON, ci->repeattimes);
|
||||
}
|
||||
else
|
||||
{
|
||||
ci->botflags.UnsetFlag(BS_KICK_REPEAT);
|
||||
source.Reply(_("Bot won't kick \002repeats\002 anymore."));
|
||||
u->SendMessage(BotServ, BOT_KICK_REPEAT_OFF);
|
||||
}
|
||||
}
|
||||
else if (option.equals_ci("REVERSES"))
|
||||
@@ -325,12 +314,12 @@ class CommandBSKick : public Command
|
||||
{
|
||||
ci->ttb[TTB_REVERSES] = convertTo<int16>(ttb);
|
||||
if (ci->ttb[TTB_REVERSES] < 0)
|
||||
throw ConvertException();
|
||||
throw CoreException();
|
||||
}
|
||||
catch (const ConvertException &)
|
||||
catch (const CoreException &)
|
||||
{
|
||||
ci->ttb[TTB_REVERSES] = 0;
|
||||
source.Reply(_("\002%s\002 cannot be taken as times to ban."), ttb.c_str());
|
||||
u->SendMessage(BotServ, BOT_KICK_BAD_TTB, ttb.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
}
|
||||
@@ -338,14 +327,14 @@ class CommandBSKick : public Command
|
||||
ci->ttb[TTB_REVERSES] = 0;
|
||||
ci->botflags.SetFlag(BS_KICK_REVERSES);
|
||||
if (ci->ttb[TTB_REVERSES])
|
||||
source.Reply(_("Bot will now kick \002reverses\002, and will place a ban after %d\nkicks for the same user."), ci->ttb[TTB_REVERSES]);
|
||||
u->SendMessage(BotServ, BOT_KICK_REVERSES_ON_BAN, ci->ttb[TTB_REVERSES]);
|
||||
else
|
||||
source.Reply(_("Bot will now kick \002reverses\002."));
|
||||
u->SendMessage(BotServ, BOT_KICK_REVERSES_ON);
|
||||
}
|
||||
else
|
||||
{
|
||||
ci->botflags.UnsetFlag(BS_KICK_REVERSES);
|
||||
source.Reply(_("Bot won't kick \002reverses\002 anymore."));
|
||||
u->SendMessage(BotServ, BOT_KICK_REVERSES_OFF);
|
||||
}
|
||||
}
|
||||
else if (option.equals_ci("UNDERLINES"))
|
||||
@@ -358,12 +347,12 @@ class CommandBSKick : public Command
|
||||
{
|
||||
ci->ttb[TTB_UNDERLINES] = convertTo<int16>(ttb);
|
||||
if (ci->ttb[TTB_REVERSES] < 0)
|
||||
throw ConvertException();
|
||||
throw CoreException();
|
||||
}
|
||||
catch (const ConvertException &)
|
||||
catch (const CoreException &)
|
||||
{
|
||||
ci->ttb[TTB_UNDERLINES] = 0;
|
||||
source.Reply(_("\002%s\002 cannot be taken as times to ban."), ttb.c_str());
|
||||
u->SendMessage(BotServ, BOT_KICK_BAD_TTB, ttb.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
}
|
||||
@@ -372,14 +361,14 @@ class CommandBSKick : public Command
|
||||
|
||||
ci->botflags.SetFlag(BS_KICK_UNDERLINES);
|
||||
if (ci->ttb[TTB_UNDERLINES])
|
||||
source.Reply(_("Bot will now kick \002underlines\002, and will place a ban after %d\nkicks for the same user."), ci->ttb[TTB_UNDERLINES]);
|
||||
u->SendMessage(BotServ, BOT_KICK_UNDERLINES_ON_BAN, ci->ttb[TTB_UNDERLINES]);
|
||||
else
|
||||
source.Reply(_("Bot will now kick \002underlines\002."));
|
||||
u->SendMessage(BotServ, BOT_KICK_UNDERLINES_ON);
|
||||
}
|
||||
else
|
||||
{
|
||||
ci->botflags.UnsetFlag(BS_KICK_UNDERLINES);
|
||||
source.Reply(_("Bot won't kick \002underlines\002 anymore."));
|
||||
u->SendMessage(BotServ, BOT_KICK_UNDERLINES_OFF);
|
||||
}
|
||||
}
|
||||
else if (option.equals_ci("ITALICS"))
|
||||
@@ -392,12 +381,12 @@ class CommandBSKick : public Command
|
||||
{
|
||||
ci->ttb[TTB_ITALICS] = convertTo<int16>(ttb);
|
||||
if (ci->ttb[TTB_ITALICS] < 0)
|
||||
throw ConvertException();
|
||||
throw CoreException();
|
||||
}
|
||||
catch (const ConvertException &)
|
||||
catch (const CoreException &)
|
||||
{
|
||||
ci->ttb[TTB_ITALICS] = 0;
|
||||
source.Reply(_("\002%s\002 cannot be taken as times to ban."), ttb.c_str());
|
||||
u->SendMessage(BotServ, BOT_KICK_BAD_TTB, ttb.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
}
|
||||
@@ -406,174 +395,58 @@ class CommandBSKick : public Command
|
||||
|
||||
ci->botflags.SetFlag(BS_KICK_ITALICS);
|
||||
if (ci->ttb[TTB_ITALICS])
|
||||
source.Reply(_("Bot will now kick \002italics\002, and will place a ban after\n%d kicks for the same user."), ci->ttb[TTB_ITALICS]);
|
||||
u->SendMessage(BotServ, BOT_KICK_ITALICS_ON_BAN, ci->ttb[TTB_ITALICS]);
|
||||
else
|
||||
source.Reply(_("Bot will now kick \002italics\002."));
|
||||
u->SendMessage(BotServ, BOT_KICK_ITALICS_ON);
|
||||
}
|
||||
else
|
||||
{
|
||||
ci->botflags.UnsetFlag(BS_KICK_ITALICS);
|
||||
source.Reply(_("Bot won't kick \002italics\002 anymore."));
|
||||
}
|
||||
}
|
||||
else if (option.equals_ci("AMSGS"))
|
||||
{
|
||||
if (value.equals_ci("ON"))
|
||||
{
|
||||
if (!ttb.empty())
|
||||
{
|
||||
try
|
||||
{
|
||||
ci->ttb[TTB_AMSGS] = convertTo<int16>(ttb);
|
||||
if (ci->ttb[TTB_AMSGS] < 0)
|
||||
throw ConvertException();
|
||||
}
|
||||
catch (const ConvertException &)
|
||||
{
|
||||
ci->ttb[TTB_AMSGS] = 0;
|
||||
source.Reply(_("\002%s\002 cannot be taken as times to ban."), ttb.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
}
|
||||
else
|
||||
ci->ttb[TTB_AMSGS] = 0;
|
||||
|
||||
ci->botflags.SetFlag(BS_KICK_AMSGS);
|
||||
if (ci->ttb[TTB_AMSGS])
|
||||
source.Reply(_("Bot will now kick for \002amsgs\002, and will place a ban after %d\nkicks for the same user."), ci->ttb[TTB_AMSGS]);
|
||||
else
|
||||
source.Reply(_("Bot will now kick for \002amsgs\002"));
|
||||
}
|
||||
else
|
||||
{
|
||||
ci->botflags.UnsetFlag(BS_KICK_AMSGS);
|
||||
source.Reply(_("Bot won't kick for \002amsgs\002 anymore."));
|
||||
u->SendMessage(BotServ, BOT_KICK_ITALICS_OFF);
|
||||
}
|
||||
}
|
||||
else
|
||||
source.Reply(_(UNKNOWN_OPTION), Config->UseStrictPrivMsgString.c_str(), option.c_str(), this->name.c_str());
|
||||
u->SendMessage(BotServ, BOT_KICK_UNKNOWN, option.c_str());
|
||||
}
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
bool OnHelp(CommandSource &source, const Anope::string &subcommand)
|
||||
bool OnHelp(User *u, const Anope::string &subcommand)
|
||||
{
|
||||
if (subcommand.empty())
|
||||
source.Reply(_("Syntax: \002KICK \037channel\037 \037option\037 \037parameters\037\002\n"
|
||||
" \n"
|
||||
"Configures bot kickers. \037option\037 can be one of:\n"
|
||||
" \n"
|
||||
" AMSGS Sets if the bot kicks for amsgs\n"
|
||||
" BOLDS Sets if the bot kicks bolds\n"
|
||||
" BADWORDS Sets if the bot kicks bad words\n"
|
||||
" CAPS Sets if the bot kicks caps\n"
|
||||
" COLORS Sets if the bot kicks colors\n"
|
||||
" FLOOD Sets if the bot kicks flooding users\n"
|
||||
" REPEAT Sets if the bot kicks users who repeat\n"
|
||||
" themselves\n"
|
||||
" REVERSES Sets if the bot kicks reverses\n"
|
||||
" UNDERLINES Sets if the bot kicks underlines\n"
|
||||
" ITALICS Sets if the bot kicks italics\n"
|
||||
" \n"
|
||||
"Type \002%s%s HELP KICK \037option\037\002 for more information\n"
|
||||
"on a specific option.\n"
|
||||
" \n"
|
||||
"Note: access to this command is controlled by the\n"
|
||||
"level SET."), Config->UseStrictPrivMsgString.c_str(), BotServ->nick.c_str());
|
||||
u->SendMessage(BotServ, BOT_HELP_KICK);
|
||||
else if (subcommand.equals_ci("BADWORDS"))
|
||||
source.Reply(_("Syntax: \002KICK \037#channel\037 BADWORDS {\037ON|OFF\037} [\037ttb\037]\002\n"
|
||||
"Sets the bad words kicker on or off. When enabled, this\n"
|
||||
"option tells the bot to kick users who say certain words\n"
|
||||
"on the channels.\n"
|
||||
"You can define bad words for your channel using the\n"
|
||||
"\002BADWORDS\002 command. Type \002%s%s HELP BADWORDS\002 for\n"
|
||||
"more information.\n"
|
||||
"ttb is the number of times a user can be kicked\n"
|
||||
"before it get banned. Don't give ttb to disable\n"
|
||||
"the ban system once activated."), Config->UseStrictPrivMsgString.c_str(), BotServ->nick.c_str());
|
||||
u->SendMessage(BotServ, BOT_HELP_KICK_BADWORDS);
|
||||
else if (subcommand.equals_ci("BOLDS"))
|
||||
source.Reply(_("Syntax: \002KICK \037channel\037 BOLDS {\037ON|OFF\037} [\037ttb\037]\002\n"
|
||||
"Sets the bolds kicker on or off. When enabled, this\n"
|
||||
"option tells the bot to kick users who use bolds.\n"
|
||||
"ttb is the number of times a user can be kicked\n"
|
||||
"before it get banned. Don't give ttb to disable\n"
|
||||
"the ban system once activated."));
|
||||
u->SendMessage(BotServ, BOT_HELP_KICK_BOLDS);
|
||||
else if (subcommand.equals_ci("CAPS"))
|
||||
source.Reply(_("Syntax: \002KICK \037channel\037 CAPS {\037ON|OFF\037} [\037ttb\037 [\037min\037 [\037percent\037]]]\002\n"
|
||||
"Sets the caps kicker on or off. When enabled, this\n"
|
||||
"option tells the bot to kick users who are talking in\n"
|
||||
"CAPS.\n"
|
||||
"The bot kicks only if there are at least \002min\002 caps\n"
|
||||
"and they constitute at least \002percent\002%% of the total \n"
|
||||
"text line (if not given, it defaults to 10 characters\n"
|
||||
"and 25%%).\n"
|
||||
"ttb is the number of times a user can be kicked\n"
|
||||
"before it get banned. Don't give ttb to disable\n"
|
||||
"the ban system once activated."));
|
||||
u->SendMessage(BotServ, BOT_HELP_KICK_CAPS);
|
||||
else if (subcommand.equals_ci("COLORS"))
|
||||
source.Reply(_("Syntax: \002KICK \037channel\037 COLORS {\037ON|OFF\037} [\037ttb\037]\002\n"
|
||||
"Sets the colors kicker on or off. When enabled, this\n"
|
||||
"option tells the bot to kick users who use colors.\n"
|
||||
"ttb is the number of times a user can be kicked\n"
|
||||
"before it get banned. Don't give ttb to disable\n"
|
||||
"the ban system once activated."));
|
||||
u->SendMessage(BotServ, BOT_HELP_KICK_COLORS);
|
||||
else if (subcommand.equals_ci("FLOOD"))
|
||||
source.Reply(_("Syntax: \002KICK \037channel\037 FLOOD {\037ON|OFF\037} [\037ttb\037 [\037ln\037 [\037secs\037]]]\002\n"
|
||||
"Sets the flood kicker on or off. When enabled, this\n"
|
||||
"option tells the bot to kick users who are flooding\n"
|
||||
"the channel using at least \002ln\002 lines in \002secs\002 seconds\n"
|
||||
"(if not given, it defaults to 6 lines in 10 seconds).\n"
|
||||
" \n"
|
||||
"ttb is the number of times a user can be kicked\n"
|
||||
"before it get banned. Don't give ttb to disable\n"
|
||||
"the ban system once activated."));
|
||||
u->SendMessage(BotServ, BOT_HELP_KICK_FLOOD);
|
||||
else if (subcommand.equals_ci("REPEAT"))
|
||||
source.Reply(_("Syntax: \002KICK \037#channel\037 REPEAT {\037ON|OFF\037} [\037ttb\037 [\037num\037]]\002\n"
|
||||
"Sets the repeat kicker on or off. When enabled, this\n"
|
||||
"option tells the bot to kick users who are repeating\n"
|
||||
"themselves \002num\002 times (if num is not given, it\n"
|
||||
"defaults to 3).\n"
|
||||
"ttb is the number of times a user can be kicked\n"
|
||||
"before it get banned. Don't give ttb to disable\n"
|
||||
"the ban system once activated."));
|
||||
u->SendMessage(BotServ, BOT_HELP_KICK_REPEAT);
|
||||
else if (subcommand.equals_ci("REVERSES"))
|
||||
source.Reply(_("Syntax: \002KICK \037channel\037 REVERSES {\037ON|OFF\037} [\037ttb\037]\002\n"
|
||||
"Sets the reverses kicker on or off. When enabled, this\n"
|
||||
"option tells the bot to kick users who use reverses.\n"
|
||||
"ttb is the number of times a user can be kicked\n"
|
||||
"before it get banned. Don't give ttb to disable\n"
|
||||
"the ban system once activated."));
|
||||
u->SendMessage(BotServ, BOT_HELP_KICK_REVERSES);
|
||||
else if (subcommand.equals_ci("UNDERLINES"))
|
||||
source.Reply(_("Syntax: \002KICK \037channel\037 UNDERLINES {\037ON|OFF\037} [\037ttb\037]\002\n"
|
||||
"Sets the underlines kicker on or off. When enabled, this\n"
|
||||
"option tells the bot to kick users who use underlines.\n"
|
||||
"ttb is the number of times a user can be kicked\n"
|
||||
"before it get banned. Don't give ttb to disable\n"
|
||||
"the ban system once activated."));
|
||||
u->SendMessage(BotServ, BOT_HELP_KICK_UNDERLINES);
|
||||
else if (subcommand.equals_ci("ITALICS"))
|
||||
source.Reply(_("Syntax: \002KICK \037channel\037 ITALICS {\037ON|OFF\037} [\037ttb\037]\002\n"
|
||||
"Sets the italics kicker on or off. When enabled, this\n"
|
||||
"option tells the bot to kick users who use italics.\n"
|
||||
"ttb is the number of times a user can be kicked\n"
|
||||
"before it get banned. Don't give ttb to disable\n"
|
||||
"the ban system once activated."));
|
||||
else if (subcommand.equals_ci("AMSGS"))
|
||||
source.Reply(_("Syntax: \002KICK \037channel\037 AMSGS {\037ON|OFF\037} [\037ttb\037]\002\n"
|
||||
"Sets the amsg kicker on or off. When enabled, the bot will\n"
|
||||
"kick users who send the same message to multiple channels\n"
|
||||
"where BotServ bots are.\n"
|
||||
"Ttb is the number of times a user can be kicked\n"
|
||||
"before it get banned. Don't give ttb to disable\n"
|
||||
"the ban system once activated."));
|
||||
u->SendMessage(BotServ, BOT_HELP_KICK_ITALICS);
|
||||
else
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void OnSyntaxError(CommandSource &source, const Anope::string &subcommand)
|
||||
void OnSyntaxError(User *u, const Anope::string &subcommand)
|
||||
{
|
||||
SyntaxError(source, "KICK", _("KICK \037channel\037 \037option\037 {\037ON|\037} [\037settings\037]"));
|
||||
SyntaxError(BotServ, u, "KICK", BOT_KICK_SYNTAX);
|
||||
}
|
||||
|
||||
void OnServHelp(User *u)
|
||||
{
|
||||
u->SendMessage(BotServ, BOT_HELP_CMD_KICK);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -588,40 +461,6 @@ class BSKick : public Module
|
||||
this->SetType(CORE);
|
||||
|
||||
this->AddCommand(BotServ, &commandbskick);
|
||||
|
||||
ModuleManager::Attach(I_OnPrivmsg, this);
|
||||
}
|
||||
|
||||
EventReturn OnPrivmsg(User *u, ChannelInfo *ci, Anope::string &msg, bool &Allow)
|
||||
{
|
||||
Anope::string m, ch;
|
||||
time_t time;
|
||||
|
||||
if (u->GetExtRegular("bs_kick_lastmsg", m) && u->GetExtRegular("bs_kick_lasttime", time) && u->GetExtRegular("bs_kick_lastchan", ch))
|
||||
{
|
||||
if (time == Anope::CurTime && m == msg && ch != ci->name)
|
||||
{
|
||||
for (UChannelList::iterator it = u->chans.begin(); it != u->chans.end();)
|
||||
{
|
||||
Channel *c = (*it)->chan;
|
||||
++it;
|
||||
|
||||
if (c->ci != NULL && c->ci->botflags.HasFlag(BS_KICK_AMSGS))
|
||||
{
|
||||
check_ban(c->ci, u, TTB_AMSGS);
|
||||
bot_kick(c->ci, u, _("Don't use AMSGs!"));
|
||||
}
|
||||
}
|
||||
|
||||
return EVENT_CONTINUE;
|
||||
}
|
||||
}
|
||||
|
||||
u->Extend("bs_kick_lastmsg", new ExtensibleItemRegular<Anope::string>(msg));
|
||||
u->Extend("bs_kick_lasttime", new ExtensibleItemRegular<time_t>(Anope::CurTime));
|
||||
u->Extend("bs_kick_lastchan", new ExtensibleItemRegular<Anope::string>(ci->name));
|
||||
|
||||
return EVENT_CONTINUE;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
+20
-16
@@ -1,6 +1,6 @@
|
||||
/* BotServ core functions
|
||||
*
|
||||
* (C) 2003-2011 Anope Team
|
||||
* (C) 2003-2010 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
@@ -18,37 +18,38 @@ class CommandBSSay : public Command
|
||||
public:
|
||||
CommandBSSay() : Command("SAY", 2, 2)
|
||||
{
|
||||
this->SetDesc(_("Makes the bot say the given text on the given channel"));
|
||||
}
|
||||
|
||||
CommandReturn Execute(CommandSource &source, const std::vector<Anope::string> ¶ms)
|
||||
CommandReturn Execute(User *u, const std::vector<Anope::string> ¶ms)
|
||||
{
|
||||
const Anope::string &text = params[1];
|
||||
ChannelInfo *ci;
|
||||
|
||||
User *u = source.u;
|
||||
ChannelInfo *ci = source.ci;
|
||||
Anope::string chan = params[0];
|
||||
Anope::string text = params[1];
|
||||
|
||||
ci = cs_findchan(chan);
|
||||
|
||||
if (!check_access(u, ci, CA_SAY))
|
||||
{
|
||||
source.Reply(_(ACCESS_DENIED));
|
||||
u->SendMessage(BotServ, ACCESS_DENIED);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (!ci->bi)
|
||||
{
|
||||
source.Reply(_(BOT_NOT_ASSIGNED), Config->UseStrictPrivMsgString.c_str(), BotServ->nick.c_str());
|
||||
u->SendMessage(BotServ, BOT_NOT_ASSIGNED);
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (!ci->c || !ci->c->FindUser(ci->bi))
|
||||
{
|
||||
source.Reply(_(BOT_NOT_ON_CHANNEL), ci->name.c_str());
|
||||
u->SendMessage(BotServ, BOT_NOT_ON_CHANNEL, ci->name.c_str());
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
if (text[0] == '\001')
|
||||
{
|
||||
this->OnSyntaxError(source, "");
|
||||
this->OnSyntaxError(u, "");
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
@@ -61,17 +62,20 @@ class CommandBSSay : public Command
|
||||
return MOD_CONT;
|
||||
}
|
||||
|
||||
bool OnHelp(CommandSource &source, const Anope::string &subcommand)
|
||||
bool OnHelp(User *u, const Anope::string &subcommand)
|
||||
{
|
||||
source.Reply(_("Syntax: \002SAY \037channel\037 \037text\037\002\n"
|
||||
" \n"
|
||||
"Makes the bot say the given text on the given channel."));
|
||||
u->SendMessage(BotServ, BOT_HELP_SAY);
|
||||
return true;
|
||||
}
|
||||
|
||||
void OnSyntaxError(CommandSource &source, const Anope::string &subcommand)
|
||||
void OnSyntaxError(User *u, const Anope::string &subcommand)
|
||||
{
|
||||
SyntaxError(source, "SAY", _("SAY \037channel\037 \037text\037"));
|
||||
SyntaxError(BotServ, u, "SAY", BOT_SAY_SYNTAX);
|
||||
}
|
||||
|
||||
void OnServHelp(User *u)
|
||||
{
|
||||
u->SendMessage(BotServ, BOT_HELP_CMD_SAY);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user