mirror of
https://github.com/anope/anope.git
synced 2026-06-18 20:24:46 +02:00
Compare commits
477 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3a502f2189 | |||
| b6dad375a3 | |||
| 3cbad7f0df | |||
| b80a0a8d74 | |||
| f844b0a161 | |||
| 6bd31b0333 | |||
| 7de1a7a6d1 | |||
| 3815e7d61e | |||
| 30e6fc07d6 | |||
| fe1c5d41f9 | |||
| fa5ba63542 | |||
| 073db54354 | |||
| ef10b5a834 | |||
| 1c5ff92c93 | |||
| b24ea29bf5 | |||
| 5cf3ddb7b1 | |||
| 1e1a41f0e7 | |||
| 28e8190e6b | |||
| 670c928a9f | |||
| d07a69278d | |||
| bb52530eb2 | |||
| 309dfa36e7 | |||
| 5c57f5aa0b | |||
| a36e575500 | |||
| 8702031bcd | |||
| 1571508aac | |||
| 6dacec22a4 | |||
| fdbbea2609 | |||
| dffed5a259 | |||
| 5d681a74ad | |||
| d80e00f5d7 | |||
| 21a8bff011 | |||
| fb14f7706c | |||
| 2284c31f90 | |||
| b5b2c42242 | |||
| a2f92b642c | |||
| c996356fab | |||
| d71ae412bb | |||
| 68a125bf6e | |||
| 37c7ca8b87 | |||
| 4663970722 | |||
| a68d17c17e | |||
| fa3b74a5b4 | |||
| fd999b996f | |||
| b4f57247b8 | |||
| abdc69aa94 | |||
| 1b02216f2d | |||
| db340f96d6 | |||
| 0cdca534a8 | |||
| 71b9bbd1ac | |||
| 2f3969b4be | |||
| ff7479f437 | |||
| 487d828fa0 | |||
| f41081ba51 | |||
| ede910d655 | |||
| 0f4c9a43b3 | |||
| 9aa414b1f6 | |||
| 2d9ddb065f | |||
| 1f542e1e75 | |||
| 68e0d99f62 | |||
| f43287f43d | |||
| 2e7bd6498f | |||
| 786397f77d | |||
| 960c339a4c | |||
| fddb2304c6 | |||
| 1b8dc4d096 | |||
| fcc03f4ed8 | |||
| 78b8b30766 | |||
| 91d8cc4c5b | |||
| 11619be8b9 | |||
| e767ded69f | |||
| 83a579fb9a | |||
| 244f87917c | |||
| 6f0da68915 | |||
| af438527e9 | |||
| ad4c4e462b | |||
| ed33a4f75b | |||
| f3d7d4ee37 | |||
| bd4916ee84 | |||
| feee50e695 | |||
| 54710a782b | |||
| d44a1d0867 | |||
| c2780e1de4 | |||
| 4e1f54ff9c | |||
| 3755bf5bcd | |||
| 25d422d32b | |||
| 697bc8d8e8 | |||
| 4bdc9824a0 | |||
| ded98ed3de | |||
| 13bcc4ef14 | |||
| ce92c9b21b | |||
| b332fbd7a7 | |||
| eaf4e69cf1 | |||
| 2f67c704fe | |||
| 8348392af2 | |||
| 8116ad9b28 | |||
| cb7435982c | |||
| 776583a665 | |||
| 91c3363c15 | |||
| b7542fd6f2 | |||
| 0c860a77c0 | |||
| 2d591f7f59 | |||
| 9cb96f3bfb | |||
| 286a9edb1e | |||
| c4da496834 | |||
| ade92395a0 | |||
| c6741d3765 | |||
| 25e3408ff6 | |||
| 35588cc521 | |||
| 32bb63f047 | |||
| 27912e1e8f | |||
| b678aa64d8 | |||
| c3e9fc4a8d | |||
| 66ab59d163 | |||
| deb79e830d | |||
| a6dd65f916 | |||
| 0448e386de | |||
| 749de0054f | |||
| 7849667a19 | |||
| e03efdee97 | |||
| d6a8d27265 | |||
| 5e18a7292b | |||
| e66063e630 | |||
| 9ec18a3b02 | |||
| 773a1f3075 | |||
| b3f4ba0082 | |||
| 34da226bd9 | |||
| 16280f4f7f | |||
| 42f954ff7d | |||
| 09f5591aba | |||
| f690cd802e | |||
| d43e1fb800 | |||
| 41b40f6504 | |||
| f7adc0b35b | |||
| 710c02f3bd | |||
| 7f69d2b95f | |||
| a18e3f3380 | |||
| 63a4201d15 | |||
| b751800ff4 | |||
| f32149117a | |||
| 1cb11bba5d | |||
| f29c88bcd5 | |||
| f5e78d7c88 | |||
| 25c4985518 | |||
| cd4f6da735 | |||
| 6e032ded6e | |||
| e2b47e001f | |||
| b32c961c2e | |||
| 088337ea07 | |||
| e8c00b9e8b | |||
| 023d4b44ec | |||
| 87d2f4b8d7 | |||
| 39ca53cfcf | |||
| 46f2f3bd8f | |||
| cb56d50837 | |||
| b19dddb0f6 | |||
| acceabe3a8 | |||
| c3993b3123 | |||
| f277be0f26 | |||
| 1a2486d2ec | |||
| a735095965 | |||
| ef75e171bc | |||
| 5bf7dee559 | |||
| f858164dee | |||
| 924f6849fe | |||
| b5ec57a3f9 | |||
| 6d978486cd | |||
| d2832b1045 | |||
| 1a4fc39d7b | |||
| 97388abb99 | |||
| 57ec310512 | |||
| ffd5c045e4 | |||
| cc3c2b6999 | |||
| c549aa4e76 | |||
| 714831b249 | |||
| d6879c4a25 | |||
| 2caf5868d0 | |||
| c585964e60 | |||
| 936a50df23 | |||
| 3e9888092a | |||
| 821826a566 | |||
| 7ec803f610 | |||
| b1a075b462 | |||
| 3be75cbcb3 | |||
| 2667f9046e | |||
| 2601871391 | |||
| a3d0ab3d09 | |||
| a1b36ec0a5 | |||
| 48e995ddf2 | |||
| df971befb2 | |||
| 1cd65878db | |||
| 6148ffa669 | |||
| 717b4c3406 | |||
| 74361bec05 | |||
| a087e7f664 | |||
| 3ad93a31c9 | |||
| 184b346166 | |||
| b2c807dc8c | |||
| 60548aa00b | |||
| a45d1555d3 | |||
| 121ae0b189 | |||
| 8bf8832b70 | |||
| 4dd7e261f5 | |||
| f4329df11c | |||
| 98729a6c78 | |||
| 742ba970b0 | |||
| 115f94bfc2 | |||
| 7e5727288d | |||
| 13915d8b57 | |||
| 9962fae1a1 | |||
| 9fcbe293e2 | |||
| fd4b52ec38 | |||
| b59602abf8 | |||
| fd21c36725 | |||
| b999c6ca53 | |||
| 583954d3a1 | |||
| 8fb1604f64 | |||
| 284af258bf | |||
| e7887c1f01 | |||
| 076ebafa1b | |||
| 6922bd239c | |||
| 13aa58ce5d | |||
| c8c23158a4 | |||
| 1782ce260c | |||
| b28d3746f5 | |||
| 469a04e7e0 | |||
| 605b5d5717 | |||
| f7aa46fb33 | |||
| b4450294af | |||
| 57327a5e33 | |||
| 4a3c64291f | |||
| 036b3c9053 | |||
| 7da33344d1 | |||
| cbdb9f59f3 | |||
| 5d3d6bcead | |||
| 0cdc628db0 | |||
| 4a733c93d4 | |||
| 03d2378a9f | |||
| 5e027c196d | |||
| 3aeaef5b9a | |||
| 4d26070a92 | |||
| f601b04594 | |||
| ca169489b2 | |||
| 713c2eb704 | |||
| 660e0c78ac | |||
| 0862de6577 | |||
| 2cd511d3a3 | |||
| efe5fedde9 | |||
| c8c6845452 | |||
| bd62c4891e | |||
| 9535541f5a | |||
| 711a570d24 | |||
| cb9ccc443d | |||
| c681bdd2e3 | |||
| 74844c0f28 | |||
| 905207093b | |||
| 73a944fb74 | |||
| d1328d876a | |||
| faa85564fc | |||
| 8dec0c1f17 | |||
| 8098ed899a | |||
| 77c98f0750 | |||
| 8dbdfa9a44 | |||
| 685e99be02 | |||
| b14b7bd55e | |||
| 365769d14c | |||
| 01b901eba1 | |||
| 26de1d9f93 | |||
| 451fb82e54 | |||
| c02d51f523 | |||
| b95027ba28 | |||
| 5b476a2597 | |||
| bceeda8087 | |||
| ee9636bba2 | |||
| ddfb16de1a | |||
| 2555d0d637 | |||
| ed73d76751 | |||
| 4fe49af840 | |||
| beabbb3a20 | |||
| b4888c21ed | |||
| b75fa1c6ec | |||
| 3fbf39b25d | |||
| 15a833283b | |||
| 5a0d04bb81 | |||
| fbae3344ff | |||
| 95469fde30 | |||
| 9f46972f19 | |||
| 46a3afadb9 | |||
| 1b2f3bf369 | |||
| bb3b421385 | |||
| 1ee3d3d810 | |||
| 97c2e0957d | |||
| 09a5791bc6 | |||
| 8db5ecd736 | |||
| e9aa04a8f4 | |||
| 8eb23e7d48 | |||
| 093b3d258e | |||
| 48e6221cf0 | |||
| ef0c095712 | |||
| a0355dfd9d | |||
| 6fe2d8af97 | |||
| 90e5d0feaa | |||
| d79e22bfaa | |||
| a9fb6bab15 | |||
| dd968c07be | |||
| feb81c51d2 | |||
| aecf675e6b | |||
| bcaf406747 | |||
| f234a2bfab | |||
| 28d17a40ce | |||
| 7cfca37e2a | |||
| c38b6392c5 | |||
| ee38756982 | |||
| eea7d2eb77 | |||
| b15410fd3a | |||
| c83b2b73d7 | |||
| dfbb5264fa | |||
| f49a3e03c1 | |||
| 109d1744a0 | |||
| 470f8af97c | |||
| a1296a3b7c | |||
| f38fe242cd | |||
| 536ea2189a | |||
| ab0422b4d4 | |||
| 18bd33f9a4 | |||
| d436e4ca4a | |||
| 1372dc1953 | |||
| 9ef7352e69 | |||
| 2529ff6dae | |||
| 7bdf592f7e | |||
| f463b772b0 | |||
| eec897762c | |||
| f87c665b63 | |||
| 36d3fd1710 | |||
| d26a19b41d | |||
| a55b3742cb | |||
| 83556667fd | |||
| faf5f3128f | |||
| a53a797271 | |||
| 08583dc107 | |||
| c362a1e077 | |||
| 140208e5ee | |||
| 679d3c373f | |||
| 557eceeefc | |||
| 9704ccc8a6 | |||
| e62664138b | |||
| 3eadc1509f | |||
| 9910aa3cc6 | |||
| 2a53e5f80e | |||
| 2e8acfb98c | |||
| 48fa096943 | |||
| bf559d788f | |||
| 3bfc8e9a39 | |||
| a162f1d18e | |||
| a86873c93e | |||
| 05933e9f21 | |||
| ab2e34d817 | |||
| e7a8bcc30b | |||
| 34c6c664c9 | |||
| 4a3ee91c55 | |||
| 6f0d1af596 | |||
| 01feb5b489 | |||
| 8975b52cc3 | |||
| 7acbbbbf5b | |||
| 4fecafa612 | |||
| a4ded88e85 | |||
| 1b6aab0cd7 | |||
| c669820481 | |||
| ecc2fc6029 | |||
| e490202a1b | |||
| fd2412a5f6 | |||
| 07528ea8f2 | |||
| ce8a069eb5 | |||
| 2ba97aee6c | |||
| a674d81caf | |||
| efb61ed4a8 | |||
| 2e7d08c10b | |||
| 47b87e903b | |||
| ddeff72544 | |||
| 43995b4c6d | |||
| 512d23d60f | |||
| 0eb9152749 | |||
| 4403849126 | |||
| 9efebe5461 | |||
| 7198fa73d1 | |||
| 03ba592c48 | |||
| 57a06f72e2 | |||
| 3019ba6f43 | |||
| 2784cd17fc | |||
| 03cc9eb5c5 | |||
| 72b8f4609b | |||
| d36e53f702 | |||
| a36f14c1bf | |||
| 292e187524 | |||
| 16cab979da | |||
| fd7f542bd9 | |||
| 5ead326454 | |||
| a1c635b050 | |||
| d896bf9a1c | |||
| 49dd1c3409 | |||
| fce491e18c | |||
| 87d0fc8bb5 | |||
| f638d1078a | |||
| 8af2465a61 | |||
| 1b3f2567bc | |||
| 036d4514f0 | |||
| 80721d1873 | |||
| aa9e33cf74 | |||
| 86900175c8 | |||
| d5c1d6ebec | |||
| 35e328bcb6 | |||
| befb4b3644 | |||
| 4235df2b28 | |||
| a6c8a6a9f2 | |||
| 1a3ba00c24 | |||
| e8a2072792 | |||
| 4886b56edb | |||
| 15d29edae9 | |||
| 3009540a00 | |||
| a0ad3c4fef | |||
| 265006b691 | |||
| 11b3b8a5ff | |||
| 2783c82685 | |||
| 184e7b3f64 | |||
| 18377ac9fd | |||
| 184e14ea83 | |||
| 21125cf2cb | |||
| 0d20c47703 | |||
| 7f9a5e01c6 | |||
| eb9b12ed11 | |||
| 4a4c0886cc | |||
| 02476332ea | |||
| 49d3c97b67 | |||
| 97467cb2c8 | |||
| 6a43886807 | |||
| 5d56a2486e | |||
| eb138a02d6 | |||
| 2a4d0e3e89 | |||
| 9f7a2e4da2 | |||
| 25e995b0f5 | |||
| ad5da2a988 | |||
| 6ab7cf9689 | |||
| 099ead02a5 | |||
| f1d04a2f8e | |||
| aed53dbb47 | |||
| a507816701 | |||
| c41c828574 | |||
| 5fe41fb8a0 | |||
| 0ba566491e | |||
| 2a4d57a1ca | |||
| 71c433cc50 | |||
| 2b10cc84ea | |||
| cb6ef574e3 | |||
| 37e02a3594 | |||
| 7d1cfe9514 | |||
| 9870ee04dd | |||
| 1a286397e3 | |||
| 697dc89382 | |||
| 4d342d955d | |||
| c5eb349d41 | |||
| 7790a7f98c | |||
| 246f44b988 | |||
| a85112172d | |||
| 5f18cb018d | |||
| 872bc3fa5e | |||
| 1625a5af0c | |||
| 2e9a632e14 | |||
| 3c9d4e9daf | |||
| c792c7f62d | |||
| e512760364 | |||
| ac41137ce2 | |||
| 28aba58e25 | |||
| 4ec661c0bb | |||
| 87bdf73cb7 | |||
| 21c8e89671 | |||
| 8fbe36635c | |||
| 5cd4fefb4c |
@@ -1,4 +1,3 @@
|
||||
config.cache
|
||||
include/version.h
|
||||
include/sysconf.h
|
||||
build/
|
||||
|
||||
+8
-7
@@ -220,11 +220,15 @@ find_package(Gettext)
|
||||
option(USE_RUN_CC_PL "Use run-cc.pl for building" OFF)
|
||||
|
||||
# Use the following directories as includes
|
||||
include_directories(${Anope_SOURCE_DIR}/include ${Anope_BINARY_DIR}/include ${Anope_BINARY_DIR}/lang)
|
||||
# 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 ${Anope_SOURCE_DIR}/modules/pseudoclients)
|
||||
|
||||
# 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
|
||||
@@ -327,19 +331,16 @@ 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)
|
||||
check_function_exists(strlcat HAVE_STRLCAT)
|
||||
check_function_exists(strlcpy HAVE_STRLCPY)
|
||||
check_function_exists(umask HAVE_UMASK)
|
||||
check_function_exists(backtrace HAVE_BACKTRACE)
|
||||
check_function_exists(eventfd HAVE_EVENTFD)
|
||||
check_function_exists(epoll_wait HAVE_EPOLL)
|
||||
check_function_exists(poll HAVE_POLL)
|
||||
|
||||
# Check for the existance of the following types
|
||||
check_type_size(uint8_t UINT8_T)
|
||||
@@ -449,7 +450,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(lang)
|
||||
add_subdirectory(language)
|
||||
add_subdirectory(src)
|
||||
add_subdirectory(modules)
|
||||
add_subdirectory(include)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# Configuration script for Services.
|
||||
#
|
||||
# Anope (c) 2003-2010 Anope team
|
||||
# Anope (c) 2003-2011 Anope team
|
||||
# Contact us at team@anope.org
|
||||
#
|
||||
# This program is free but copyrighted software; see the file COPYING for
|
||||
@@ -153,6 +153,17 @@ 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*)
|
||||
@@ -167,12 +178,18 @@ if [ ! "$NO_INTRO" ] ; then
|
||||
if [ -d .git ] ; then
|
||||
VERSION=`git describe --tags`
|
||||
VERSION_BUILD=`echo "$VERSION" | cut -d'-' -f2`
|
||||
VERSION_EXTRA=`echo "$VERSION" | cut -d'-' -f3`
|
||||
if [ "$VERSION_BUILD" == "$VERSION_EXTRA" ] ; then
|
||||
VERSION_EXTRA=""
|
||||
if [ "$SOURCE_DIR" = "." ] ; then
|
||||
test -d build || mkdir -p build/include
|
||||
BUILD_DIR="build"
|
||||
else
|
||||
BUILD_DIR="."
|
||||
fi
|
||||
VERSION_EXTRA=`echo "$VERSION" | cut -d'-' -f3`
|
||||
# Only do this if we are not on a tag, src/version.sh will be all we need then.
|
||||
if [ "$VERSION_BUILD" != "$VERSION_EXTRA" ] ; then
|
||||
echo "#define VERSION_BUILD $VERSION_BUILD" > $BUILD_DIR/include/version.h
|
||||
echo "#define VERSION_EXTRA \"-$VERSION_EXTRA\"" >> $BUILD_DIR/include/version.h
|
||||
fi
|
||||
echo "#define VERSION_BUILD $VERSION_BUILD" > include/version.h
|
||||
echo "#define VERSION_EXTRA \"$VERSION_EXTRA\"" >> include/version.h
|
||||
fi
|
||||
cat $SOURCE_DIR/.BANNER | sed "s/CURVER/$VERSION/" | sed "s@SOURCE_DIR@$SOURCE_DIR@" | $PAGER
|
||||
echo ""
|
||||
|
||||
@@ -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)
|
||||
set(LIBINTL_INCLUDE "${GETTEXT_INCLUDE}/libintl.h")
|
||||
include_directories("${GETTEXT_INCLUDE}")
|
||||
set(GETTEXT_MSGFMT_EXECUTABLE ${GETTEXT_MSGFMT})
|
||||
|
||||
if(WIN32)
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
# Only install example.chk and example.conf from this directory
|
||||
# NOTE: I would've had this just find all files in the directory, but that would include files not needed (like this file)
|
||||
set(DATA example.chk example.conf mysql/tables.sql)
|
||||
set(DATA example.chk tables.sql botserv.example.conf example.conf hostserv.example.conf modules.example.conf operserv.example.conf chanserv.example.conf global.example.conf memoserv.example.conf nickserv.example.conf)
|
||||
install(FILES ${DATA}
|
||||
DESTINATION data
|
||||
)
|
||||
|
||||
@@ -0,0 +1,240 @@
|
||||
/*
|
||||
* Example configuration file for BotServ.
|
||||
*/
|
||||
|
||||
/*
|
||||
* First, create the service.
|
||||
*/
|
||||
service
|
||||
{
|
||||
/*
|
||||
* The name of the BotServ client
|
||||
*/
|
||||
nick = "BotServ"
|
||||
|
||||
/*
|
||||
* The username of the BotServ client.
|
||||
*/
|
||||
user = "services"
|
||||
|
||||
/*
|
||||
* The hostname of the BotServ client.
|
||||
*/
|
||||
host = "services.host"
|
||||
|
||||
/*
|
||||
* The realname of the BotServ client.
|
||||
*/
|
||||
gecos = "Bot Service"
|
||||
|
||||
/*
|
||||
* The modes this client should use.
|
||||
* Do not modify this unless you know what you are doing.
|
||||
*
|
||||
* These modes are very IRCd specific. If left commented, sane defaults
|
||||
* are used based on what protocol module you have loaded.
|
||||
*
|
||||
* Note that setting this option incorrectly could potentially BREAK some if
|
||||
* not all usefulness of the client. We will not support you if this client is
|
||||
* unable to do certain things if this option is enabled.
|
||||
*/
|
||||
#modes = "+o"
|
||||
}
|
||||
|
||||
/*
|
||||
* Core BotServ module.
|
||||
*
|
||||
* Provides essential functionality for BotServ.
|
||||
*/
|
||||
module { name = "bs_main" }
|
||||
|
||||
/*
|
||||
* Configuration for BotServ provided by bs_main.
|
||||
*/
|
||||
botserv
|
||||
{
|
||||
/*
|
||||
* The name of the client that should be BotServ.
|
||||
*/
|
||||
name = "BotServ"
|
||||
|
||||
/*
|
||||
* The default bot options for newly registered channels. Note that changing these options
|
||||
* will have no effect on channels which are already registered. The list must be separated
|
||||
* by spaces.
|
||||
*
|
||||
* The options are:
|
||||
* - dontkickops: Channel operators will be protected against BotServ kicks
|
||||
* - dontkickvoices: Voiced users will be protected against BotServ kicks
|
||||
* - greet: The channel's BotServ bot will greet incoming users that have set a greet
|
||||
* in their NickServ settings
|
||||
* - fantasy: Enables the use of BotServ fantasy commands in the channel
|
||||
*
|
||||
* This directive is optional, if left blank, there will be no defaults.
|
||||
*/
|
||||
defaults="greet fantasy"
|
||||
|
||||
/*
|
||||
* The minimum number of users there must be in a channel before the bot joins it. The best
|
||||
* value for this setting is 1 or 2. This can be 0, the service bots will not part unless
|
||||
* specifically unassigned, and will keep the channel open.
|
||||
*/
|
||||
minusers = 1
|
||||
|
||||
/*
|
||||
* The maximum number of entries a single bad words list can have. Setting it too high can
|
||||
* reduce performance slightly.
|
||||
*/
|
||||
badwordsmax = 32
|
||||
|
||||
/*
|
||||
* The amount of time that data for a user is valid in BotServ. If the data exceeds this time,
|
||||
* it is reset or deleted depending on the case. Do not set it too high, otherwise your
|
||||
* resources will be slightly affected.
|
||||
*/
|
||||
keepdata = 10m
|
||||
|
||||
/*
|
||||
* The bots are currently not affected by any modes or bans when they try to join a channel.
|
||||
* But some people may want to make it act like a real bot, that is, for example, remove all
|
||||
* the bans affecting the bot before joining the channel, remove a ban that affects the bot
|
||||
* set by a user when it is in the channel, and so on. Since it consumes a bit more CPU
|
||||
* time, you should not enable this on larger networks.
|
||||
*
|
||||
* This directive is optional.
|
||||
*/
|
||||
#smartjoin = yes
|
||||
|
||||
/*
|
||||
* If set, the bots will use a kick reason that does not state the word when it is kicking.
|
||||
* This is especially useful if you have young people on your network.
|
||||
*
|
||||
* This directive is optional.
|
||||
*/
|
||||
gentlebadwordreason = yes
|
||||
|
||||
/*
|
||||
* If set, BotServ will use case sensitive checking for badwords.
|
||||
*
|
||||
* This directive is optional.
|
||||
*/
|
||||
#casesensitive = yes
|
||||
|
||||
/*
|
||||
* Defines the prefix for fantasy commands in channels. This character will have to be prepended
|
||||
* to all fantasy commands. If you choose "!", for example, fantasy commands will be "!kick",
|
||||
* "!op", etc. This directive is optional, if left out, the default fantasy character is "!".
|
||||
*/
|
||||
#fantasycharacter = "!"
|
||||
}
|
||||
|
||||
/*
|
||||
* Core BotServ commands.
|
||||
*
|
||||
* In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
|
||||
* are loaded you can then configure the commands to be added to any client you like with any name you like.
|
||||
*
|
||||
* Additionally, you may provide a permission name that must be in the opertype of users executing the command.
|
||||
*
|
||||
* Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
|
||||
*/
|
||||
|
||||
/* Give it a help command */
|
||||
command { service = "BotServ"; name = "HELP"; command = "generic/help"; }
|
||||
|
||||
/*
|
||||
* bs_assign
|
||||
*
|
||||
* Provides the commands botserv/assign and botserv/unassign.
|
||||
*
|
||||
* Used for assigning and unassigning bots to channels.
|
||||
*/
|
||||
module { name = "bs_assign" }
|
||||
command { service = "BotServ"; name = "ASSIGN"; command = "botserv/assign"; }
|
||||
command { service = "BotServ"; name = "UNASSIGN"; command = "botserv/unassign"; }
|
||||
|
||||
/*
|
||||
* bs_autoassign
|
||||
*
|
||||
* Allows service bots to be automatically assigned to channels upon registration.
|
||||
*/
|
||||
#module { name = "bs_autoassign" }
|
||||
bs_autoassign
|
||||
{
|
||||
/*
|
||||
* Automatically assign ChanServ to channels upon registration.
|
||||
*/
|
||||
bot = "ChanServ"
|
||||
}
|
||||
|
||||
/*
|
||||
* bs_badwords
|
||||
*
|
||||
* Provides the command botserv/badwords.
|
||||
*
|
||||
* Used for controlling the channel badword list.
|
||||
*/
|
||||
module { name = "bs_badwords" }
|
||||
command { service = "BotServ"; name = "BADWORDS"; command = "botserv/badwords"; }
|
||||
|
||||
/*
|
||||
* bs_bot
|
||||
*
|
||||
* Provides the command botserv/bot.
|
||||
*
|
||||
* Used for administrating BotServ bots.
|
||||
*/
|
||||
module { name = "bs_bot" }
|
||||
command { service = "BotServ"; name = "BOT"; command = "botserv/bot"; }
|
||||
|
||||
/*
|
||||
* bs_botlist
|
||||
*
|
||||
* Provides the command botserv/botlist.
|
||||
*
|
||||
* Used for listing all available bots.
|
||||
*/
|
||||
module { name = "bs_botlist" }
|
||||
command { service = "BotServ"; name = "BOTLIST"; command = "botserv/botlist"; }
|
||||
|
||||
/*
|
||||
* bs_control
|
||||
*
|
||||
* Provides the commands botserv/act and botserv/say.
|
||||
*
|
||||
* Used for making the bot message a channel.
|
||||
*/
|
||||
module { name = "bs_control" }
|
||||
command { service = "BotServ"; name = "ACT"; command = "botserv/act"; }
|
||||
command { service = "BotServ"; name = "SAY"; command = "botserv/say"; }
|
||||
|
||||
/*
|
||||
* bs_info
|
||||
*
|
||||
* Provides the command botserv/info.
|
||||
*
|
||||
* Used for getting information on bots or channels.
|
||||
*/
|
||||
module { name = "bs_info" }
|
||||
command { service = "BotServ"; name = "INFO"; command = "botserv/info"; }
|
||||
|
||||
/*
|
||||
* bs_kick
|
||||
*
|
||||
* Provides the command botserv/kick.
|
||||
*
|
||||
* Used for configuring what bots should kick for.
|
||||
*/
|
||||
module { name = "bs_kick" }
|
||||
command { service = "BotServ"; name = "KICK"; command = "botserv/kick"; }
|
||||
|
||||
/*
|
||||
* bs_set
|
||||
*
|
||||
* Provides the command botserv/set.
|
||||
*
|
||||
* Used for setting options such as kickers and fantasy replies.
|
||||
*/
|
||||
module { name = "bs_set" }
|
||||
command { service = "BotServ"; name = "SET"; command = "botserv/set"; }
|
||||
|
||||
@@ -0,0 +1,752 @@
|
||||
/*
|
||||
* Example configuration file for ChanServ.
|
||||
*/
|
||||
|
||||
/*
|
||||
* First, create the service.
|
||||
*/
|
||||
service
|
||||
{
|
||||
/*
|
||||
* The name of the ChanServ client
|
||||
*/
|
||||
nick = "ChanServ"
|
||||
|
||||
/*
|
||||
* The username of the ChanServ client.
|
||||
*/
|
||||
user = "services"
|
||||
|
||||
/*
|
||||
* The hostname of the ChanServ client.
|
||||
*/
|
||||
host = "services.host"
|
||||
|
||||
/*
|
||||
* The realname of the ChanServ client.
|
||||
*/
|
||||
gecos = "Channel Registration Service"
|
||||
|
||||
/*
|
||||
* The modes this client should use.
|
||||
* Do not modify this unless you know what you are doing.
|
||||
*
|
||||
* These modes are very IRCd specific. If left commented, sane defaults
|
||||
* are used based on what protocol module you have loaded.
|
||||
*
|
||||
* Note that setting this option incorrectly could potentially BREAK some if
|
||||
* not all usefulness of the client. We will not support you if this client is
|
||||
* unable to do certain things if this option is enabled.
|
||||
*/
|
||||
#modes = "+o"
|
||||
}
|
||||
|
||||
/*
|
||||
* Core ChanServ module.
|
||||
*
|
||||
* Provides essential functionality for ChanServ.
|
||||
*/
|
||||
module { name = "cs_main" }
|
||||
|
||||
/*
|
||||
* Configuration for ChanServ provided by cs_main.
|
||||
*/
|
||||
chanserv
|
||||
{
|
||||
/*
|
||||
* The name of the client that should be ChanServ.
|
||||
*/
|
||||
name = "ChanServ"
|
||||
|
||||
/*
|
||||
* The default options for newly registered channels. Note that changing these options
|
||||
* will have no effect on channels which are already registered. The list must be separated
|
||||
* by spaces.
|
||||
*
|
||||
* The options are:
|
||||
* - keeptopic: Retain topic when the channel is not in use
|
||||
* - opnotice: Send a notice when OP/DEOP commands are used
|
||||
* - peace: Disallow users from kicking or removing modes from others who are of the same
|
||||
* access level or superior
|
||||
* - private: Hide the channel from ChanServ's LIST command
|
||||
* - restricted: Kick/ban users who are restricted from the channel
|
||||
* - secure: Enable channel security, requiring the user to be identified with NickServ in
|
||||
* order to be considered for being on the access list of the channel
|
||||
* - secureops: Only allow operator status to be given if the user is on the access list
|
||||
* - securefounder: Only allow the real founder of the channel to drop the channel, change it's
|
||||
* password, or change the founder or successor
|
||||
* - signkick: Use of ChanServ's KICK command will cause the user's nick to be signed to the kick.
|
||||
* - signkicklevel: Same as above, but the kick will not be signed if the user is at the same access
|
||||
* level or superior to the target
|
||||
* - topiclock: Disallow the topic to be changed except with ChanServ's TOPIC command
|
||||
* - persist: Keep the channel open at all times
|
||||
* - none: No defaults
|
||||
*
|
||||
* This directive is optional, if left blank, the options will default to keeptopic, secure, securefounder,
|
||||
* and signkick. If you really want no defaults, use "none" by itself as the option.
|
||||
*/
|
||||
defaults="keeptopic peace secure securefounder signkick"
|
||||
|
||||
/*
|
||||
* The maximum number of channels which may be registered to a single nickname.
|
||||
*
|
||||
* This directive is optional, but recommended.
|
||||
* If not set, there will be no restriction on the numbers of channels a single nickname can have registered.
|
||||
*/
|
||||
maxregistered = 20
|
||||
|
||||
/*
|
||||
* The length of time before a channel registration expires.
|
||||
*
|
||||
* This directive is optional, but recommended.
|
||||
* If not set, the default is 14 days.
|
||||
*/
|
||||
expire = 14d
|
||||
|
||||
/*
|
||||
* The length of time before a suspended channel becomes unsuspended.
|
||||
*
|
||||
* This directive is optional.
|
||||
* If not set, the default is to never.
|
||||
*/
|
||||
#suspendexpire = 90d
|
||||
|
||||
/*
|
||||
* The lenth of time before a forbidden channel drops.
|
||||
*
|
||||
* This directive is optional.
|
||||
* If not set, the default is to never.
|
||||
*/
|
||||
#forbidexpire = 90d
|
||||
|
||||
/*
|
||||
* The default ban type for newly registered channels (and when importing old databases).
|
||||
*
|
||||
* defbantype can be:
|
||||
*
|
||||
* 0: ban in the form of *!user@host
|
||||
* 1: ban in the form of *!*user@host
|
||||
* 2: ban in the form of *!*@host
|
||||
* 3: ban in the form of *!*user@*.domain
|
||||
*/
|
||||
defbantype = 2
|
||||
|
||||
/*
|
||||
* The maximum number of entries on a channel's access list.
|
||||
*/
|
||||
accessmax = 1024
|
||||
|
||||
/*
|
||||
* The maximum number of entries on a channel's autokick list.
|
||||
*/
|
||||
autokickmax = 32
|
||||
|
||||
/*
|
||||
* The default reason for an autokick if none is given.
|
||||
*/
|
||||
autokickreason = "User has been banned from the channel"
|
||||
|
||||
/*
|
||||
* The length of time ChanServ stays in a channel after kicking a user from a channel they are not
|
||||
* permitted to be in. This only occurs when the user is the only one in the channel.
|
||||
*/
|
||||
inhabit = 15s
|
||||
|
||||
/*
|
||||
* The maximum number of channels to be returned for a ChanServ LIST command.
|
||||
*/
|
||||
listmax = 50
|
||||
|
||||
/*
|
||||
* Allow only IRC Operators to use ChanServ.
|
||||
*
|
||||
* This directive is optional.
|
||||
*/
|
||||
#opersonly = yes
|
||||
|
||||
/*
|
||||
* ChanServ levels configuration, for use with cs_access.
|
||||
*
|
||||
* These levels are used by the chanserv/access access system.
|
||||
* The levels configured below will be used as a default by newly registered channels.
|
||||
*
|
||||
* The level "founder" is a special level that means anyone with the level_founder permission
|
||||
* can use (which of course defaults to "founder"). Anyone with the founder level permission in
|
||||
* a channel can do anything in the channel.
|
||||
*
|
||||
* The level "disabled" is a special level that means the level is disabled, even from people
|
||||
* with founder level access.
|
||||
*/
|
||||
level_change = 10
|
||||
level_list = 1
|
||||
level_akick = 10
|
||||
level_assign = "founder"
|
||||
level_autohalfop = 4
|
||||
level_autoop = 5
|
||||
level_autoowner = 9999
|
||||
level_autoprotect = 10
|
||||
level_autovoice = 3
|
||||
level_badwords = 10
|
||||
level_ban = 4
|
||||
level_fantasia = 3
|
||||
level_founder = "founder"
|
||||
level_getkey = 5
|
||||
level_greet = 5
|
||||
level_halfop = 5
|
||||
level_halfopme = 4
|
||||
level_info = 9999
|
||||
level_invite = 5
|
||||
level_kick = 4
|
||||
level_memo = 10
|
||||
level_mode = 5
|
||||
level_nokick = 1
|
||||
level_opdeop = 5
|
||||
level_opdeopme = 5
|
||||
level_owner = "founder"
|
||||
level_ownerme = 9999
|
||||
level_protect = 9999
|
||||
level_protectme = 10
|
||||
level_say = 5
|
||||
level_signkick = 9999
|
||||
level_set = 9999
|
||||
level_topic = 5
|
||||
level_unban = 4
|
||||
level_voice = 4
|
||||
level_voiceme = 3
|
||||
|
||||
/*
|
||||
* ChanServ flags configuration, for use with cs_flags.
|
||||
*
|
||||
* These flags are used by the chanserv/flags access system.
|
||||
*/
|
||||
flag_change = "f"
|
||||
flag_list = "l"
|
||||
flag_akick = "K"
|
||||
flag_assign = "s"
|
||||
flag_autohalfop = "H"
|
||||
flag_autoop = "O"
|
||||
flag_autoowner = "Q"
|
||||
flag_autoprotect = "A"
|
||||
flag_autovoice = "V"
|
||||
flag_badwords = "k"
|
||||
flag_ban = "b"
|
||||
flag_fantasia = "c"
|
||||
flag_founder = "F"
|
||||
flag_getkey = "G"
|
||||
flag_greet = "g"
|
||||
flag_halfop = "h"
|
||||
flag_halfopme = "h"
|
||||
flag_info = "I"
|
||||
flag_invite = "i"
|
||||
flag_kick = "k"
|
||||
flag_memo = "m"
|
||||
flag_mode = "s"
|
||||
flag_nokick = "N"
|
||||
flag_opdeop = "o"
|
||||
flag_opdeopme = "o"
|
||||
flag_owner = "q"
|
||||
flag_ownerme = "q"
|
||||
flag_protect = "a"
|
||||
flag_protectme = "a"
|
||||
flag_say = "B"
|
||||
flag_set = "s"
|
||||
flag_signkick = "K"
|
||||
flag_topic = "t"
|
||||
flag_unban = "u"
|
||||
flag_voice = "v"
|
||||
flag_voiceme = "v"
|
||||
}
|
||||
|
||||
/*
|
||||
* Core ChanServ commands.
|
||||
*
|
||||
* In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
|
||||
* are loaded you can then configure the commands to be added to any client you like with any name you like.
|
||||
*
|
||||
* Additionally, you may provide a permission name that must be in the opertype of users executing the command.
|
||||
*
|
||||
* Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
|
||||
*/
|
||||
|
||||
/* Give it a help command */
|
||||
command { service = "ChanServ"; name = "HELP"; command = "generic/help"; }
|
||||
|
||||
/*
|
||||
* cs_access
|
||||
*
|
||||
* Provides commands chanserv/access and chanserv/levels.
|
||||
* Provides the access system "levels".
|
||||
*
|
||||
* Used for giving users access in channels.
|
||||
*/
|
||||
module { name = "cs_access" }
|
||||
command { service = "ChanServ"; name = "ACCESS"; command = "chanserv/access"; }
|
||||
command { service = "ChanServ"; name = "LEVELS"; command = "chanserv/levels"; }
|
||||
|
||||
/*
|
||||
* cs_akick
|
||||
*
|
||||
* Provides the command chanserv/akick.
|
||||
*
|
||||
* Used for preventing users from joining channels.
|
||||
*/
|
||||
module { name = "cs_akick" }
|
||||
command { service = "ChanServ"; name = "AKICK"; command = "chanserv/akick"; }
|
||||
|
||||
/*
|
||||
* cs_appendtopic
|
||||
*
|
||||
* Provides the chanserv/appendtopic command.
|
||||
*
|
||||
* Used to append text to existing channel topics.
|
||||
*/
|
||||
module { name = "cs_appendtopic" }
|
||||
command { service = "ChanServ"; name = "APPENDTOPIC"; command = "chanserv/appendtopic"; }
|
||||
|
||||
/*
|
||||
* cs_ban
|
||||
*
|
||||
* Provides the command chanserv/ban.
|
||||
*
|
||||
* Used for banning users from channels.
|
||||
*/
|
||||
module { name = "cs_ban" }
|
||||
command { service = "ChanServ"; name = "BAN"; command = "chanserv/ban"; }
|
||||
command { service = "ChanServ"; name = "KB"; command = "chanserv/ban"; }
|
||||
|
||||
/*
|
||||
* cs_clearusers
|
||||
*
|
||||
* Provides the command chanserv/clearusers.
|
||||
*
|
||||
* Used for kicking all users from channels.
|
||||
*/
|
||||
module { name = "cs_clearusers" }
|
||||
command { service = "ChanServ"; name = "CLEARUSERS"; command = "chanserv/clearusers"; }
|
||||
|
||||
/*
|
||||
* cs_clone
|
||||
*
|
||||
* Provides the command chanserv/clone.
|
||||
*
|
||||
* Used for copying channel settings from one channel to another.
|
||||
*/
|
||||
module { name = "cs_clone" }
|
||||
command { service = "ChanServ"; name = "CLONE"; command = "chanserv/clone"; }
|
||||
|
||||
/*
|
||||
* cs_drop
|
||||
*
|
||||
* Provides the command chanserv/drop.
|
||||
*
|
||||
* Used for unregistering channels.
|
||||
*/
|
||||
module { name = "cs_drop" }
|
||||
command { service = "ChanServ"; name = "DROP"; command = "chanserv/drop"; }
|
||||
|
||||
/*
|
||||
* cs_enforce
|
||||
*
|
||||
* Provides the command chanserv/enforce.
|
||||
*
|
||||
* Used to enforce various channel settings such as secureops and restricted.
|
||||
*/
|
||||
module { name = "cs_enforce" }
|
||||
command { service = "ChanServ"; name = "ENFORCE"; command = "chanserv/enforce"; }
|
||||
|
||||
/*
|
||||
* cs_entrymsg
|
||||
*
|
||||
* Provides the command chanserv/entrymsg.
|
||||
*
|
||||
* Used to configure entry messages sent to users when they join a channel.
|
||||
*/
|
||||
module { name = "cs_entrymsg" }
|
||||
command { service = "ChanServ"; name = "ENTRYMSG"; command = "chanserv/entrymsg"; }
|
||||
cs_entrymsg
|
||||
{
|
||||
/* The maximum number of entrymsgs allowed per channel. If not set, defaults to 5. */
|
||||
maxentries = 5
|
||||
}
|
||||
|
||||
/*
|
||||
* cs_flags
|
||||
*
|
||||
* Provides the command chanserv/flags.
|
||||
* Provides the access system "flags".
|
||||
*
|
||||
* Used for giving users access in channels.
|
||||
*/
|
||||
module { name = "cs_flags" }
|
||||
command { service = "ChanServ"; name = "FLAGS"; command = "chanserv/flags"; }
|
||||
|
||||
/*
|
||||
* cs_getkey
|
||||
*
|
||||
* Provides the command chanserv/getkey.
|
||||
*
|
||||
* Used for getting the key for channels.
|
||||
*/
|
||||
module { name = "cs_getkey" }
|
||||
command { service = "ChanServ"; name = "GETKEY"; command = "chanserv/getkey"; }
|
||||
|
||||
/*
|
||||
* cs_info
|
||||
*
|
||||
* Provides the command chanserv/info.
|
||||
*
|
||||
* Used for getting information about channels.
|
||||
*/
|
||||
module { name = "cs_info" }
|
||||
command { service = "ChanServ"; name = "INFO"; command = "chanserv/info"; }
|
||||
|
||||
/*
|
||||
* cs_invite
|
||||
*
|
||||
* Provides the command chanserv/invite.
|
||||
*
|
||||
* Used for inviting yourself in to channels.
|
||||
*/
|
||||
module { name = "cs_invite" }
|
||||
command { service = "ChanServ"; name = "INVITE"; command = "chanserv/invite"; }
|
||||
|
||||
/*
|
||||
* cs_kick
|
||||
*
|
||||
* Provides the command chanserv/kick.
|
||||
*
|
||||
* Used for kicking users from channels.
|
||||
*/
|
||||
module { name = "cs_kick" }
|
||||
command { service = "ChanServ"; name = "KICK"; command = "chanserv/kick"; }
|
||||
command { service = "ChanServ"; name = "K"; command = "chanserv/kick"; }
|
||||
|
||||
/*
|
||||
* cs_list
|
||||
*
|
||||
* Provides the command chanserv/list.
|
||||
*
|
||||
* Used for retrieving and searching the registered channel list.
|
||||
*/
|
||||
module { name = "cs_list" }
|
||||
command { service = "ChanServ"; name = "LIST"; command = "chanserv/list"; permission = "chanserv/list"; }
|
||||
|
||||
/*
|
||||
* cs_mode
|
||||
*
|
||||
* Provides the command chanserv/mode.
|
||||
*
|
||||
* Used for changing mode locks and changing modes.
|
||||
*/
|
||||
module { name = "cs_mode" }
|
||||
command { service = "ChanServ"; name = "MODE"; command = "chanserv/mode"; }
|
||||
|
||||
/*
|
||||
* cs_mode
|
||||
*
|
||||
* Provides the commands chanserv/op, chanserv/deop, chanserv/halfop, chanserv/dehalfop
|
||||
* chanserv/voice, chanserv/devoice, chanserv/protect, chanserv/deprotect,
|
||||
* chanserv/owner, and chanserv/deowner.
|
||||
*
|
||||
* Used for setting and removing modes on users.
|
||||
*/
|
||||
module { name = "cs_modes" }
|
||||
command { service = "ChanServ"; name = "OP"; command = "chanserv/op"; }
|
||||
command { service = "ChanServ"; name = "DEOP"; command = "chanserv/deop"; }
|
||||
command { service = "ChanServ"; name = "HALFOP"; command = "chanserv/halfop"; }
|
||||
command { service = "ChanServ"; name = "DEHALFOP"; command = "chanserv/dehalfop"; }
|
||||
command { service = "ChanServ"; name = "VOICE"; command = "chanserv/voice"; }
|
||||
command { service = "ChanServ"; name = "DEVOICE"; command = "chanserv/devoice"; }
|
||||
command { service = "ChanServ"; name = "PROTECT"; command = "chanserv/protect"; }
|
||||
command { service = "ChanServ"; name = "DEPROTECT"; command = "chanserv/deprotect"; }
|
||||
command { service = "ChanServ"; name = "OWNER"; command = "chanserv/owner"; }
|
||||
command { service = "ChanServ"; name = "DEOWNER"; command = "chanserv/deowner"; }
|
||||
|
||||
/*
|
||||
* cs_register
|
||||
*
|
||||
* Provides the commands chanserv/register.
|
||||
*
|
||||
* Used for registering channels.
|
||||
*/
|
||||
module { name = "cs_register" }
|
||||
command { service = "ChanServ"; name = "REGISTER"; command = "chanserv/register"; }
|
||||
|
||||
/*
|
||||
* cs_seen
|
||||
*
|
||||
* Provides the commands chanserv/seen and operserv/seen.
|
||||
*
|
||||
* Records the last time a user was seen and what they were doing and allows users to request this data.
|
||||
* Also allows administrators to view stats about seen data and purge the database.
|
||||
*/
|
||||
module { name = "cs_seen" }
|
||||
command { service = "ChanServ"; name = "SEEN"; command = "chanserv/seen"; }
|
||||
#command { service = "OperServ"; name = "SEEN"; command = "operserv/seen"; }
|
||||
|
||||
/*
|
||||
* cs_set
|
||||
*
|
||||
* Provides the command chanserv/set.
|
||||
*
|
||||
* Is a dummy command to provide a help wrapper for the various SET commands.
|
||||
*/
|
||||
module { name = "cs_set" }
|
||||
command { service = "ChanServ"; name = "SET"; command = "chanserv/set"; }
|
||||
|
||||
/*
|
||||
* cs_saset
|
||||
*
|
||||
* Provides the command chanserv/saset.
|
||||
*
|
||||
* Is a dummy command to provide a help wrapper for the various SASET commands.
|
||||
*/
|
||||
module { name = "cs_saset" }
|
||||
command { service = "ChanServ"; name = "SASET"; command = "chanserv/saset"; permission = "chanserv/saset"; }
|
||||
|
||||
/*
|
||||
* cs_set_bantype
|
||||
*
|
||||
* Provides the commands chanserv/set/bantype and chanserv/saset/bantype.
|
||||
*
|
||||
* Used for controlling what format bans are placed on channels.
|
||||
*/
|
||||
module { name = "cs_set_bantype" }
|
||||
command { service = "ChanServ"; name = "SET BANTYPE"; command = "chanserv/set/bantype"; }
|
||||
command { service = "ChanServ"; name = "SASET BANTYPE"; command = "chanserv/saset/bantype"; permission = "chanserv/saset/bantype"; }
|
||||
|
||||
/*
|
||||
* cs_set_description
|
||||
*
|
||||
* Provides the commands chanserv/set/description and chanserv/saset/description.
|
||||
*
|
||||
* Used for changing channels descriptions.
|
||||
*/
|
||||
module { name = "cs_set_description" }
|
||||
command { service = "ChanServ"; name = "SET DESCRIPTION"; command = "chanserv/set/description"; }
|
||||
command { service = "ChanServ"; name = "SET DESC"; command = "chanserv/set/description"; }
|
||||
command { service = "ChanServ"; name = "SASET DESCRIPTION"; command = "chanserv/saset/description"; permission = "chanserv/saset/description"; }
|
||||
command { service = "ChanServ"; name = "SASET DESC"; command = "chanserv/saset/description"; permission = "chanserv/saset/description"; }
|
||||
|
||||
/*
|
||||
* cs_set_founder
|
||||
*
|
||||
* Provides the commands chanserv/set/founder and chanserv/saset/founder.
|
||||
*
|
||||
* Used for changing channel founders.
|
||||
*/
|
||||
module { name = "cs_set_founder" }
|
||||
command { service = "ChanServ"; name = "SET FOUNDER"; command = "chanserv/set/founder"; }
|
||||
command { service = "ChanServ"; name = "SASET FOUNDER"; command = "chanserv/saset/founder"; permission = "chanserv/saset/founder"; }
|
||||
|
||||
/*
|
||||
* cs_set_keeptopic
|
||||
*
|
||||
* Provides the commands chanserv/set/keeptopic and chanserv/saset/keeptopic.
|
||||
*
|
||||
* Used for enabling keeptopic on channels, which causes ChanServ to restore the channel topic
|
||||
* when a channel is created.
|
||||
*/
|
||||
module { name = "cs_set_keeptopic" }
|
||||
command { service = "ChanServ"; name = "SET KEEPTOPIC"; command = "chanserv/set/keeptopic"; }
|
||||
command { service = "ChanServ"; name = "SASET KEEPTOPIC"; command = "chanserv/saset/keeptopic"; permission = "chanserv/saset/keeptopic"; }
|
||||
|
||||
/*
|
||||
* cs_set_misc
|
||||
*
|
||||
* Provides the command chanserv/set/misc.
|
||||
*
|
||||
* Allows you to create arbitrary commands to set data, and have that data show up in chanserv/info.
|
||||
*/
|
||||
module { name = "cs_set_misc" }
|
||||
command { service = "ChanServ"; name = "SET URL"; command = "chanserv/set/misc"; }
|
||||
command { service = "ChanServ"; name = "SET EMAIL"; command = "chanserv/set/misc"; }
|
||||
|
||||
/*
|
||||
* cs_set_opnotice
|
||||
*
|
||||
* Provides the commands chanserv/set/opnotice and chanserv/saset/opnotice.
|
||||
*
|
||||
* Used for setting whether channel ops should be notified of mode changes made through ChanServ.
|
||||
*/
|
||||
module { name = "cs_set_opnotice" }
|
||||
command { service = "ChanServ"; name = "SET OPNOTICE"; command = "chanserv/set/opnotice"; }
|
||||
command { service = "ChanServ"; name = "SASET OPNOTICE"; command = "chanserv/saset/opnotice"; permission = "chanserv/saset/opnotice"; }
|
||||
|
||||
/*
|
||||
* cs_set_peace
|
||||
*
|
||||
* Provides the commands chanserv/set/peace and chanserv/saset/peace.
|
||||
*
|
||||
* Used for setting the peace option, which prevents users from kicking other users with
|
||||
* higher level access than them.
|
||||
*/
|
||||
module { name = "cs_set_peace" }
|
||||
command { service = "ChanServ"; name = "SET PEACE"; command = "chanserv/set/peace"; }
|
||||
command { service = "ChanServ"; name = "SASET PEACE"; command = "chanserv/saset/peace"; permission = "chanserv/saset/peace"; }
|
||||
|
||||
/*
|
||||
* cs_set_persist
|
||||
*
|
||||
* Provides the commands chanserv/set/persist and chanserv/saset/persist.
|
||||
*
|
||||
* Used for setting whether ChanServ should stay in channels after the last user leaves.
|
||||
*/
|
||||
module { name = "cs_set_persist" }
|
||||
command { service = "ChanServ"; name = "SET PERSIST"; command = "chanserv/set/persist"; }
|
||||
command { service = "ChanServ"; name = "SASET PERSIST"; command = "chanserv/saset/persist"; permission = "chanserv/saset/persist"; }
|
||||
|
||||
/*
|
||||
* cs_set_private
|
||||
*
|
||||
* Provides the commands chanserv/set/private and chanserv/saset/private.
|
||||
*
|
||||
* Used for setting whether channels should show up in chanserv/list.
|
||||
*/
|
||||
module { name = "cs_set_private" }
|
||||
command { service = "ChanServ"; name = "SET PRIVATE"; command = "chanserv/set/private"; }
|
||||
command { service = "ChanServ"; name = "SASET PRIVATE"; command = "chanserv/saset/private"; permission = "chanserv/saset/private"; }
|
||||
|
||||
/*
|
||||
* cs_set_restricted
|
||||
*
|
||||
* Provides the commands chanserv/set/restricted and chanserv/saset/restricted.
|
||||
*
|
||||
* Used for setting whether users not on a channel's access list can join.
|
||||
*/
|
||||
module { name = "cs_set_restricted" }
|
||||
command { service = "ChanServ"; name = "SET RESTRICTED"; command = "chanserv/set/restricted"; }
|
||||
command { service = "ChanServ"; name = "SASET RESTRICTED"; command = "chanserv/saset/restricted"; permission = "chanserv/saset/restricted"; }
|
||||
|
||||
/*
|
||||
* cs_set_secure
|
||||
*
|
||||
* Provides the commands chanserv/set/secure and chanserv/saset/secure.
|
||||
*
|
||||
* Used for setting whether users who are recognized for accounts should have their access in channels.
|
||||
*/
|
||||
module { name = "cs_set_secure" }
|
||||
command { service = "ChanServ"; name = "SET SECURE"; command = "chanserv/set/secure"; }
|
||||
command { service = "ChanServ"; name = "SASET SECURE"; command = "chanserv/saset/secure"; permission = "chanserv/saset/secure"; }
|
||||
|
||||
/*
|
||||
* cs_set_securefounder
|
||||
*
|
||||
* Provides the commands chanserv/set/securefounder and chanserv/saset/securefounder.
|
||||
*
|
||||
* Used for setting whether users with founder level access in channels have true founder or not.
|
||||
*/
|
||||
module { name = "cs_set_securefounder" }
|
||||
command { service = "ChanServ"; name = "SET SECUREFOUNDER"; command = "chanserv/set/securefounder"; }
|
||||
command { service = "ChanServ"; name = "SASET SECUREFOUNDER"; command = "chanserv/saset/securefounder"; permission = "chanserv/saset/securefounder"; }
|
||||
|
||||
/*
|
||||
* cs_set_secureops
|
||||
*
|
||||
* Provides the commands chanserv/set/secureops and chanserv/saset/secureops.
|
||||
*
|
||||
* Used for restricting who can have channel op privilege in a channel to those whom have access in the channel.
|
||||
*/
|
||||
module { name = "cs_set_secureops" }
|
||||
command { service = "ChanServ"; name = "SET SECUREOPS"; command = "chanserv/set/secureops"; }
|
||||
command { service = "ChanServ"; name = "SASET SECUREOPS"; command = "chanserv/saset/secureops"; permission = "chanserv/saset/secureops"; }
|
||||
|
||||
/*
|
||||
* cs_set_signkick
|
||||
*
|
||||
* Provides the commands chanserv/set/signkick and chanserv/saset/signkick.
|
||||
*
|
||||
* Used for setting signkick, which appends the kicker's name to kicks sent through ChanServ.
|
||||
*/
|
||||
module { name = "cs_set_signkick" }
|
||||
command { service = "ChanServ"; name = "SET SIGNKICK"; command = "chanserv/set/signkick"; }
|
||||
command { service = "ChanServ"; name = "SASET SIGNKICK"; command = "chanserv/saset/signkick"; permission = "chanserv/saset/signkick"; }
|
||||
|
||||
/*
|
||||
* cs_set_successor
|
||||
*
|
||||
* Provides the commands chanserv/set/successor and chanserv/saset/successor.
|
||||
*
|
||||
* Used for setting channel successors, which become channel founders if the founders account expires.
|
||||
*/
|
||||
module { name = "cs_set_successor" }
|
||||
command { service = "ChanServ"; name = "SET SUCCESSOR"; command = "chanserv/set/successor"; }
|
||||
command { service = "ChanServ"; name = "SASET SUCCESSOR"; command = "chanserv/saset/successor"; permission = "chanserv/saset/successor"; }
|
||||
|
||||
/*
|
||||
* cs_set_topiclock
|
||||
*
|
||||
* Provides the commands chanserv/set/topiclock and chanserv/saset/topiclock.
|
||||
*
|
||||
* Used for setting topiclock, which prevents channel topics from being modified.
|
||||
*/
|
||||
module { name = "cs_set_topiclock" }
|
||||
command { service = "ChanServ"; name = "SET TOPICLOCK"; command = "chanserv/set/topiclock"; }
|
||||
command { service = "ChanServ"; name = "SASET TOPICLOCK"; command = "chanserv/saset/topiclock"; permission = "chanserv/saset/topiclock"; }
|
||||
|
||||
/*
|
||||
* cs_set_noexpire
|
||||
*
|
||||
* Provides the command chanserv/saset/noexpire.
|
||||
*
|
||||
* Used for setting noexpire, which prevents channels from expiring.
|
||||
*/
|
||||
module { name = "cs_saset_noexpire" }
|
||||
command { service = "ChanServ"; name = "SASET NOEXPIRE"; command = "chanserv/saset/noexpire"; permission = "chanserv/saset/noexpire"; }
|
||||
|
||||
/*
|
||||
* cs_suspend
|
||||
*
|
||||
* Provides the commands chanserv/suspend and chanserv/unsuspend.
|
||||
*
|
||||
* Used for suspending and unsuspending channels. Suspended channels can not be used but their settings are stored.
|
||||
*/
|
||||
module { name = "cs_suspend" }
|
||||
command { service = "ChanServ"; name = "SUSPEND"; command = "chanserv/suspend"; permission = "chanserv/suspend"; }
|
||||
command { service = "ChanServ"; name = "UNSUSPEND"; command = "chanserv/unsuspend"; permission = "chanserv/suspend"; }
|
||||
|
||||
/*
|
||||
* cs_sync
|
||||
*
|
||||
* Provides the command chanserv/sync.
|
||||
*
|
||||
* Used to sync users channel status modes with what access they have.
|
||||
*/
|
||||
module { name = "cs_sync" }
|
||||
command { service = "ChanServ"; name = "SYNC"; command = "chanserv/sync"; }
|
||||
|
||||
/*
|
||||
* cs_topic
|
||||
*
|
||||
* Provides the command chanserv/topic.
|
||||
*
|
||||
* Used for changing the channel topic. Usedful in conjunction with chanserv/set/topiclock.
|
||||
*/
|
||||
module { name = "cs_topic" }
|
||||
command { service = "ChanServ"; name = "TOPIC"; command = "chanserv/topic"; }
|
||||
|
||||
/*
|
||||
* cs_unban
|
||||
*
|
||||
* Provides the command chanserv/unban.
|
||||
*
|
||||
* Used for unbanning users from channels.
|
||||
*/
|
||||
module { name = "cs_unban" }
|
||||
command { service = "ChanServ"; name = "UNBAN"; command = "chanserv/unban"; }
|
||||
|
||||
/*
|
||||
* cs_xop
|
||||
*
|
||||
* Provides the commands chanserv/qop, chanserv/sop, chanserv/aop, chanserv/hop, and chanserv/vop.
|
||||
* Provides the access system "XOP".
|
||||
*
|
||||
* Used for giving users access in channels.
|
||||
*/
|
||||
module { name = "cs_xop" }
|
||||
command { service = "ChanServ"; name = "QOP"; command = "chanserv/qop"; }
|
||||
command { service = "ChanServ"; name = "SOP"; command = "chanserv/sop"; }
|
||||
command { service = "ChanServ"; name = "AOP"; command = "chanserv/aop"; }
|
||||
command { service = "ChanServ"; name = "HOP"; command = "chanserv/hop"; }
|
||||
command { service = "ChanServ"; name = "VOP"; command = "chanserv/vop"; }
|
||||
|
||||
+341
-1102
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,115 @@
|
||||
/*
|
||||
* Example configuration file for Global.
|
||||
*/
|
||||
|
||||
/*
|
||||
* First, create the service.
|
||||
*/
|
||||
service
|
||||
{
|
||||
/*
|
||||
* The name of the Global client
|
||||
*/
|
||||
nick = "Global"
|
||||
|
||||
/*
|
||||
* The username of the Global client.
|
||||
*/
|
||||
user = "services"
|
||||
|
||||
/*
|
||||
* The hostname of the Global client.
|
||||
*/
|
||||
host = "services.host"
|
||||
|
||||
/*
|
||||
* The realname of the Global client.
|
||||
*/
|
||||
gecos = "Global Noticer"
|
||||
|
||||
/*
|
||||
* The modes this client should use.
|
||||
* Do not modify this unless you know what you are doing.
|
||||
*
|
||||
* These modes are very IRCd specific. If left commented, sane defaults
|
||||
* are used based on what protocol module you have loaded.
|
||||
*
|
||||
* Note that setting this option incorrectly could potentially BREAK some if
|
||||
* not all usefulness of the client. We will not support you if this client is
|
||||
* unable to do certain things if this option is enabled.
|
||||
*/
|
||||
#modes = "+o"
|
||||
}
|
||||
|
||||
/*
|
||||
* Core Global module.
|
||||
*
|
||||
* Provides essential functionality for Global.
|
||||
*/
|
||||
module { name = "gl_main" }
|
||||
|
||||
/*
|
||||
* Configuration for Global provided by gl_main.
|
||||
*/
|
||||
global
|
||||
{
|
||||
/*
|
||||
* The name of the client that should be Global.
|
||||
*/
|
||||
name = "Global"
|
||||
|
||||
/*
|
||||
* If set, Services will send global messages on starting up and shutting
|
||||
* down/restarting.
|
||||
*
|
||||
* This directive is optional.
|
||||
*/
|
||||
#globaloncycle = yes
|
||||
|
||||
/*
|
||||
* This is the global message that will be sent when Services are being
|
||||
* shutdown/restarted. This directive is only required if you enable
|
||||
* globaloncycle above.
|
||||
*/
|
||||
globaloncycledown = "Services are restarting, they will be back shortly - please be good while we're gone"
|
||||
|
||||
/*
|
||||
* This is the global message that will be sent when Services (re)join the
|
||||
* network. This directive is only required if you enable globaloncycle above.
|
||||
*/
|
||||
globaloncycleup = "Services are now back online - have a nice day"
|
||||
|
||||
/*
|
||||
* If set, Services will hide the IRC operator's nick in a global
|
||||
* message/notice.
|
||||
*
|
||||
* This directive is optional.
|
||||
*/
|
||||
#anonymousglobal = yes
|
||||
}
|
||||
|
||||
/*
|
||||
* Core Global commands.
|
||||
*
|
||||
* In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
|
||||
* are loaded you can then configure the commands to be added to any client you like with any name you like.
|
||||
*
|
||||
* Additionally, you may provide a permission name that must be in the opertype of users executing the command.
|
||||
*
|
||||
* Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
|
||||
*/
|
||||
|
||||
/* Give it a help command */
|
||||
command { service = "Global"; name = "HELP"; command = "generic/help"; }
|
||||
|
||||
/*
|
||||
* gl_global
|
||||
*
|
||||
* Provides the command global/global.
|
||||
*
|
||||
* Used for sending a message to every online user.
|
||||
*/
|
||||
module { name = "gl_global" }
|
||||
command { service = "OperServ"; name = "GLOBAL"; command = "global/global"; permission = "operserv/global"; }
|
||||
command { service = "Global"; name = "GLOBAL"; command = "global/global"; permission = "global/global"; }
|
||||
|
||||
@@ -0,0 +1,163 @@
|
||||
/*
|
||||
* Example configuration file for HostServ.
|
||||
*/
|
||||
|
||||
/*
|
||||
* First, create the service.
|
||||
*/
|
||||
service
|
||||
{
|
||||
/*
|
||||
* The name of the HostServ client
|
||||
*/
|
||||
nick = "HostServ"
|
||||
|
||||
/*
|
||||
* The username of the HostServ client.
|
||||
*/
|
||||
user = "services"
|
||||
|
||||
/*
|
||||
* The hostname of the HostServ client.
|
||||
*/
|
||||
host = "services.host"
|
||||
|
||||
/*
|
||||
* The realname of the HostServ client.
|
||||
*/
|
||||
gecos = "vHost Service"
|
||||
|
||||
/*
|
||||
* The modes this client should use.
|
||||
* Do not modify this unless you know what you are doing.
|
||||
*
|
||||
* These modes are very IRCd specific. If left commented, sane defaults
|
||||
* are used based on what protocol module you have loaded.
|
||||
*
|
||||
* Note that setting this option incorrectly could potentially BREAK some if
|
||||
* not all usefulness of the client. We will not support you if this client is
|
||||
* unable to do certain things if this option is enabled.
|
||||
*/
|
||||
#modes = "+o"
|
||||
}
|
||||
|
||||
/*
|
||||
* Core HostServ module.
|
||||
*
|
||||
* Provides essential functionality for HostServ.
|
||||
*/
|
||||
module { name = "hs_main" }
|
||||
|
||||
/*
|
||||
* Configuration for HostServ provided by hs_main.
|
||||
*/
|
||||
hostserv
|
||||
{
|
||||
/*
|
||||
* The name of the client that should be HostServ.
|
||||
*/
|
||||
name = "HostServ"
|
||||
}
|
||||
|
||||
/*
|
||||
* Core HostServ commands.
|
||||
*
|
||||
* In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
|
||||
* are loaded you can then configure the commands to be added to any client you like with any name you like.
|
||||
*
|
||||
* Additionally, you may provide a permission name that must be in the opertype of users executing the command.
|
||||
*
|
||||
* Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
|
||||
*/
|
||||
|
||||
/* Give it a help command */
|
||||
command { service = "HostServ"; name = "HELP"; command = "generic/help"; }
|
||||
|
||||
/*
|
||||
* hs_del
|
||||
*
|
||||
* Provides the commands hostserv/del and hostserv/delall.
|
||||
*
|
||||
* Used for removing users vHosts.
|
||||
*/
|
||||
module { name = "hs_del" }
|
||||
command { service = "HostServ"; name = "DEL"; command = "hostserv/del"; permission = "hostserv/del"; }
|
||||
command { service = "HostServ"; name = "DELALL"; command = "hostserv/delall"; permission = "hostserv/del"; }
|
||||
|
||||
/*
|
||||
* hs_group
|
||||
*
|
||||
* Provides the command hostserv/group.
|
||||
*
|
||||
* Used for grouping one vHost to many nicks.
|
||||
*/
|
||||
module { name = "hs_group" }
|
||||
command { service = "HostServ"; name = "GROUP"; command = "hostserv/group"; }
|
||||
|
||||
/*
|
||||
* hs_list
|
||||
*
|
||||
* Provides the command hostserv/list.
|
||||
*
|
||||
* Used for listing actively set vHosts.
|
||||
*/
|
||||
module { name = "hs_list" }
|
||||
command { service = "HostServ"; name = "LIST"; command = "hostserv/list"; permission = "hostserv/list"; }
|
||||
|
||||
/*
|
||||
* hs_off
|
||||
*
|
||||
* Provides the command hostserv/off.
|
||||
*
|
||||
* Used for turning off your vHost.
|
||||
*/
|
||||
module { name = "hs_off" }
|
||||
command { service = "HostServ"; name = "OFF"; command = "hostserv/off"; }
|
||||
|
||||
/*
|
||||
* hs_on
|
||||
*
|
||||
* Provides the command hostserv/on.
|
||||
*
|
||||
* Used for turning on your vHost.
|
||||
*/
|
||||
module { name = "hs_on" }
|
||||
command { service = "HostServ"; name = "ON"; command = "hostserv/on"; }
|
||||
|
||||
/*
|
||||
* hs_request
|
||||
*
|
||||
* Provides the commands hostserv/request, hostserv/active, hostserv/reject, and hostserv/waiting.
|
||||
*
|
||||
* Used to manage vhosts requested by users.
|
||||
*/
|
||||
module { name = "hs_request" }
|
||||
command { service = "HostServ"; name = "REQUEST"; command = "hostserv/request"; }
|
||||
command { service = "HostServ"; name = "ACTIVATE"; command = "hostserv/activate"; permission = "hostserv/set"; }
|
||||
command { service = "HostServ"; name = "REJECT"; command = "hostserv/reject"; permission = "hostserv/set"; }
|
||||
command { service = "HostServ"; name = "WAITING"; command = "hostserv/waiting"; permission = "hostserv/set"; }
|
||||
hs_request
|
||||
{
|
||||
/*
|
||||
* If set, Services will send a memo to the user requesting a vHost when it's been
|
||||
* approved or rejected.
|
||||
*/
|
||||
#memouser = yes
|
||||
|
||||
/*
|
||||
* If set, Services will send a memo to all Services staff when a new vHost is requested.
|
||||
*/
|
||||
#memooper = yes
|
||||
}
|
||||
|
||||
/*
|
||||
* hs_set
|
||||
*
|
||||
* Provides the commands hostserv/set and hostserv/setall.
|
||||
*
|
||||
* Used for setting users vhosts.
|
||||
*/
|
||||
module { name = "hs_set" }
|
||||
command { service = "HostServ"; name = "SET"; command = "hostserv/set"; permission = "hostserv/set"; }
|
||||
command { service = "HostServ"; name = "SETALL"; command = "hostserv/setall"; permission = "hostserv/set"; }
|
||||
|
||||
@@ -0,0 +1,228 @@
|
||||
/*
|
||||
* Example configuration file for MemoServ.
|
||||
*/
|
||||
|
||||
/*
|
||||
* First, create the service.
|
||||
*/
|
||||
service
|
||||
{
|
||||
/*
|
||||
* The name of the MemoServ client
|
||||
*/
|
||||
nick = "MemoServ"
|
||||
|
||||
/*
|
||||
* The username of the MemoServ client.
|
||||
*/
|
||||
user = "services"
|
||||
|
||||
/*
|
||||
* The hostname of the MemoServ client.
|
||||
*/
|
||||
host = "services.host"
|
||||
|
||||
/*
|
||||
* The realname of the MemoServ client.
|
||||
*/
|
||||
gecos = "Memo Service"
|
||||
|
||||
/*
|
||||
* The modes this client should use.
|
||||
* Do not modify this unless you know what you are doing.
|
||||
*
|
||||
* These modes are very IRCd specific. If left commented, sane defaults
|
||||
* are used based on what protocol module you have loaded.
|
||||
*
|
||||
* Note that setting this option incorrectly could potentially BREAK some if
|
||||
* not all usefulness of the client. We will not support you if this client is
|
||||
* unable to do certain things if this option is enabled.
|
||||
*/
|
||||
#modes = "+o"
|
||||
}
|
||||
|
||||
/*
|
||||
* Core MemoServ module.
|
||||
*
|
||||
* Provides essential functionality for MemoServ.
|
||||
*/
|
||||
module { name = "ms_main" }
|
||||
|
||||
/*
|
||||
* Configuration for MemoServ provided by ms_main.
|
||||
*/
|
||||
memoserv
|
||||
{
|
||||
/*
|
||||
* The name of the client that should be MemoServ. Clients are configured
|
||||
* with the service blocks.
|
||||
*/
|
||||
name = "MemoServ"
|
||||
|
||||
/*
|
||||
* The maximum number of memos a user is allowed to keep by default. Normal users may set the
|
||||
* limit anywhere between 0 and this value. Services Admins can change it to any value or
|
||||
* disable it.
|
||||
*
|
||||
* This directive is optional, but recommended. If not set, the limit is disabled
|
||||
* by default, and normal users can set any limit they want.
|
||||
*/
|
||||
maxmemos = 20
|
||||
|
||||
/*
|
||||
* The delay between consecutive uses of the MemoServ SEND command. This can help prevent spam
|
||||
* as well as denial-of-service attacks from sending large numbers of memos and filling up disk
|
||||
* space (and memory). The default 3-second wait means a maximum average of 150 bytes of memo
|
||||
* per second per user under the current IRC protocol.
|
||||
*
|
||||
* This directive is optional, but recommended.
|
||||
*/
|
||||
senddelay = 3s
|
||||
|
||||
/*
|
||||
* Allow the use of memo receipts for the following groups:
|
||||
*
|
||||
* 1 - Opers Only
|
||||
* 2 - Everybody
|
||||
*
|
||||
* This directive is optional.
|
||||
*/
|
||||
#memoreceipt = 1
|
||||
}
|
||||
|
||||
/*
|
||||
* Core MemoServ commands.
|
||||
*
|
||||
* In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
|
||||
* are loaded you can then configure the commands to be added to any client you like with any name you like.
|
||||
*
|
||||
* Additionally, you may provide a permission name that must be in the opertype of users executing the command.
|
||||
*
|
||||
* Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
|
||||
*/
|
||||
|
||||
/* Give it a help command */
|
||||
command { service = "MemoServ"; name = "HELP"; command = "generic/help"; }
|
||||
|
||||
/*
|
||||
* ms_cancel
|
||||
*
|
||||
* Provides the command memoserv/cancel.
|
||||
*
|
||||
* Used to cancel memos already sent but not yet read.
|
||||
*/
|
||||
module { name = "ms_cancel" }
|
||||
command { service = "MemoServ"; name = "CANCEL"; command = "memoserv/cancel"; }
|
||||
|
||||
/*
|
||||
* ms_check
|
||||
*
|
||||
* Provides the command memoserv/check.
|
||||
*
|
||||
* Used to check if a sent memo has been read.
|
||||
*/
|
||||
module { name = "ms_check" }
|
||||
command { service = "MemoServ"; name = "CHECK"; command = "memoserv/check"; }
|
||||
|
||||
/*
|
||||
* ms_del
|
||||
*
|
||||
* Provides the command memoserv/del.
|
||||
*
|
||||
* Used to delete your memos.
|
||||
*/
|
||||
module { name = "ms_del" }
|
||||
command { service = "MemoServ"; name = "DEL"; command = "memoserv/del"; }
|
||||
|
||||
/*
|
||||
* ms_ignore
|
||||
*
|
||||
* Provides the command memoserv/ignore.
|
||||
*
|
||||
* Used to ignore memos from specific users.
|
||||
*/
|
||||
module { name = "ms_ignore" }
|
||||
command { service = "MemoServ"; name = "IGNORE"; command = "memoserv/ignore"; }
|
||||
|
||||
/*
|
||||
* ms_info
|
||||
*
|
||||
* Provides the command memoserv/info.
|
||||
*
|
||||
* Used to show memo related information about an account or a channel.
|
||||
*/
|
||||
module { name = "ms_info" }
|
||||
command { service = "MemoServ"; name = "INFO"; command = "memoserv/info"; }
|
||||
|
||||
/*
|
||||
* ms_list
|
||||
*
|
||||
* Provides the command memoserv/list.
|
||||
*
|
||||
* Used to list your current memos.
|
||||
*/
|
||||
module { name = "ms_list" }
|
||||
command { service = "MemoServ"; name = "LIST"; command = "memoserv/list"; }
|
||||
|
||||
/*
|
||||
* ms_read
|
||||
*
|
||||
* Provides the command memoserv/read.
|
||||
*
|
||||
* Used to read your memos.
|
||||
*/
|
||||
module { name = "ms_read" }
|
||||
command { service = "MemoServ"; name = "READ"; command = "memoserv/read"; }
|
||||
|
||||
/*
|
||||
* ms_rsend
|
||||
*
|
||||
* Provides the command memoserv/rsend.
|
||||
*
|
||||
* Used to send a memo requiring a receipt be sent back once it is read.
|
||||
*
|
||||
* Requires configuring memoserv:memoreceipt.
|
||||
*/
|
||||
#module { name = "ms_rsend" }
|
||||
#command { service = "MemoServ"; name = "RSEND"; command = "memoserv/rsend"; }
|
||||
|
||||
/*
|
||||
* ms_send
|
||||
*
|
||||
* Provides the command memoserv/send
|
||||
*
|
||||
* Used to send memos.
|
||||
*/
|
||||
module { name = "ms_send" }
|
||||
command { service = "MemoServ"; name = "SEND"; command = "memoserv/send"; }
|
||||
|
||||
/*
|
||||
* ms_sendlal
|
||||
*
|
||||
* Provides the command memoserv/sendall
|
||||
*
|
||||
* Used to send a mass memo to every registered user.
|
||||
*/
|
||||
module { name = "ms_sendall" }
|
||||
command { service = "MemoServ"; name = "SENDALL"; command = "memoserv/sendall"; permission = "memoserv/sendall"; }
|
||||
|
||||
/*
|
||||
* ms_set
|
||||
*
|
||||
* Provides the command memoserv/set.
|
||||
*
|
||||
* Used to set settings such as how you are notified of new memos, and your memo limit.
|
||||
*/
|
||||
module { name = "ms_set" }
|
||||
command { service = "MemoServ"; name = "SET"; command = "memoserv/set"; }
|
||||
|
||||
/*
|
||||
* ms_staff
|
||||
*
|
||||
* Provides the command memoserv/staff.
|
||||
*
|
||||
* Used to send a memo to all registered staff members.
|
||||
*/
|
||||
module { name = "ms_staff" }
|
||||
command { service = "MemoServ"; name = "STAFF"; command = "memoserv/staff"; permission = "memoserv/staff"; }
|
||||
|
||||
@@ -0,0 +1,276 @@
|
||||
|
||||
/*
|
||||
* [OPTIONAL] Non-Core Modules
|
||||
*
|
||||
* The following blocks are used to load all non-core modules, including 3rd-party modules.
|
||||
* Modules can be prevented from loading by commenting out the line, other modules can be added by
|
||||
* adding a module block. These modules will be loaded prior to Services connecting to your network.
|
||||
*/
|
||||
|
||||
/*
|
||||
* help
|
||||
*
|
||||
* Provides commands generic/help
|
||||
*
|
||||
* Is a generic help command that can be used with any client.
|
||||
*/
|
||||
module { name = "help" }
|
||||
|
||||
/*
|
||||
* m_dnsbl
|
||||
*
|
||||
* Allows configurable DNS blacklists to check connecting users against. If a user
|
||||
* is found on the blacklist they will be immediately banned. This is a crucial module
|
||||
* to prevent bot attacks.
|
||||
*/
|
||||
module { name = "m_dnsbl" }
|
||||
m_dnsbl
|
||||
{
|
||||
/*
|
||||
* If set, Services will check clients against the DNSBLs when services connect to its uplink.
|
||||
* This is not recommended, and on large networks will open a very large amount of DNS queries.
|
||||
* Whilst services are not drastically affected by this, your nameserver/DNSBL might care.
|
||||
*/
|
||||
check_on_connect = no
|
||||
|
||||
/*
|
||||
* If set, Services will check clients when coming back from a netsplit. This can cause a large number
|
||||
* of DNS queries open at once. Whilst services are not drastically affected by this, your nameserver/DNSBL
|
||||
* might care.
|
||||
*/
|
||||
check_on_netburst = no
|
||||
|
||||
/*
|
||||
* If set, OperServ will add clients found in the DNSBL to the akill list. Without it, OperServ simply sends
|
||||
* a timed G/K-line to the IRCd and forgets about it. Can be useful if your akill list is being fill up by bots.
|
||||
*/
|
||||
add_to_akill = yes
|
||||
}
|
||||
blacklist
|
||||
{
|
||||
/* Name of the blacklist */
|
||||
name = "rbl.efnetrbl.org"
|
||||
|
||||
/* How long to set the ban for */
|
||||
time = 4h
|
||||
|
||||
/* Reason for akill.
|
||||
* %n is the nick of the user
|
||||
* %u is the ident/username of the user
|
||||
* %g is the realname of the user
|
||||
* %h is the hostname of the user
|
||||
* %i is the IP of the user
|
||||
* %r is the reason (configured below). Will be nothing if not configured.
|
||||
* %N is the network name set in networkinfo:networkname
|
||||
*/
|
||||
reason = "You are listed in the efnet RBL, visit http://rbl.efnetrbl.org/?i=%i for info"
|
||||
|
||||
/* Replies to ban and their reason. If this is totally ommited all replies get banned */
|
||||
1 = "Open Proxy"
|
||||
/* Don't ban for result 2 or 3 */
|
||||
#2 = "spamtrap666"
|
||||
#3 = "spamtrap50"
|
||||
4 = "TOR"
|
||||
5 = "Drones / Flooding"
|
||||
}
|
||||
blacklist
|
||||
{
|
||||
name = "dnsbl.dronebl.org"
|
||||
time = 4h
|
||||
reason = "You have a host listed in the DroneBL. For more information, visit http://dronebl.org/lookup_branded.do?ip=%i&network=%N"
|
||||
}
|
||||
|
||||
/*
|
||||
* m_helpchan
|
||||
*
|
||||
* Gives users who are op in the specified help channel usermode +h (helpop).
|
||||
*/
|
||||
#module { name = "m_helpchan" }
|
||||
m_helpchan
|
||||
{
|
||||
helpchannel = "#help"
|
||||
}
|
||||
|
||||
/*
|
||||
* m_ldap
|
||||
*
|
||||
* This module allows other modules to use LDAP. By itself, this module does nothing useful.
|
||||
*/
|
||||
#module { name = "m_ldap" }
|
||||
ldap
|
||||
{
|
||||
server = "ldap://127.0.0.1"
|
||||
port = 389
|
||||
admin_binddn = "cn=Manager,dc=anope,dc=org"
|
||||
admin_password = "secret"
|
||||
}
|
||||
|
||||
/*
|
||||
* m_ldap_authentication
|
||||
*
|
||||
* This module allows many commands such as IDENTIFY, RELEASE, RECOVER, GHOST, etc. use
|
||||
* LDAP to authenticate users. Requires m_ldap.
|
||||
*/
|
||||
#module { name = "m_ldap_authentication" }
|
||||
m_ldap_authentication
|
||||
{
|
||||
/*
|
||||
* The distinguished name we should bind to when a user tries to identify.
|
||||
*/
|
||||
binddn = "ou=users,dc=anope,dc=org"
|
||||
|
||||
/*
|
||||
* The object class used by LDAP to store user account information.
|
||||
* Used for adding new users to LDAP if disable_ns_register is false
|
||||
*/
|
||||
object_class = "anopeUser"
|
||||
|
||||
/*
|
||||
* The attribute value used for account names.
|
||||
*/
|
||||
username_attribute = "uid"
|
||||
|
||||
/*
|
||||
* The attribute value used for email addresses.
|
||||
* This directive is optional.
|
||||
*/
|
||||
email_attribute = "email"
|
||||
|
||||
/*
|
||||
* The attribute value used for passwords.
|
||||
* Used when registering new accounts in LDAP.
|
||||
*/
|
||||
password_attribute = "userPassword"
|
||||
|
||||
/*
|
||||
* Enable to have this module disable /nickserv register.
|
||||
*/
|
||||
disable_ns_register = false
|
||||
|
||||
/*
|
||||
* The reason to give the users who try to /ns register if
|
||||
* disable_ns_register is enabled.
|
||||
*/
|
||||
#disable_reason = "To register on this network visit http://some.misconfigured.site/register"
|
||||
}
|
||||
|
||||
/*
|
||||
* m_ldap_oper
|
||||
*
|
||||
* This module dynamically ties users to Anope opertypes when they identify
|
||||
* via LDAP group membership. Requires m_ldap.
|
||||
*
|
||||
* Note that this doesn't give the user privileges on the IRCd, only in Services.
|
||||
*/
|
||||
#module { name = "m_ldap_oper" }
|
||||
m_ldap_oper
|
||||
{
|
||||
/*
|
||||
* An optional binddn to use when searching for groups.
|
||||
* %a is replaced with the account name of the user.
|
||||
*/
|
||||
#binddn = "cn=Manager,dc=anope,dc=org"
|
||||
|
||||
/*
|
||||
* An optional password to bind with.
|
||||
*/
|
||||
#password = "secret"
|
||||
|
||||
/*
|
||||
* The base DN where the groups are.
|
||||
*/
|
||||
basedn = "ou=groups,dc=anope,dc=org"
|
||||
|
||||
/*
|
||||
* The filter to use when searching for users.
|
||||
* %a is replaced with the account name of the user.
|
||||
*/
|
||||
filter = "(member=uid=%a,ou=users,dc=anope,dc=org)"
|
||||
|
||||
/*
|
||||
* The attribute of the group that is the name of the opertype.
|
||||
* The cn attribute should match a known opertype in the config.
|
||||
*/
|
||||
opertype_attribute = "cn"
|
||||
}
|
||||
|
||||
/*
|
||||
* m_mysql
|
||||
*
|
||||
* This module allows other modules (db_mysql/db_mysql_live) to use MySQL.
|
||||
* Be sure you have imported the table schema with mydbgen before
|
||||
* trying to use MySQL
|
||||
*/
|
||||
#module { name = "m_mysql" }
|
||||
mysql
|
||||
{
|
||||
database = "anope"
|
||||
server = "127.0.0.1"
|
||||
username = "anope"
|
||||
password = "mypassword"
|
||||
port = 3306
|
||||
}
|
||||
|
||||
/*
|
||||
* m_ssl
|
||||
*
|
||||
* This module uses SSL to connect to the uplink server(s)
|
||||
*/
|
||||
module { name = "m_ssl" }
|
||||
|
||||
/*
|
||||
* m_statusupdate
|
||||
*
|
||||
* This module automatically updates users status on channels when the
|
||||
* channel's access list is modified.
|
||||
*/
|
||||
module { name = "m_statusupdate" }
|
||||
|
||||
/*
|
||||
* m_xmlrpc
|
||||
*
|
||||
* Allows remote applications (websites) to execute queries in real time to retrieve data from Anope.
|
||||
* By itself this module does nothing, but allows other modules (m_xmlrpc_main) to receive and send XMLRPC queries.
|
||||
*/
|
||||
#module { name = "m_xmlrpc" }
|
||||
m_xmlrpc
|
||||
{
|
||||
/* IP to listen on */
|
||||
bindip = "127.0.0.1"
|
||||
/* Port to listen on */
|
||||
port = 26673
|
||||
/* Enable for IPv6 */
|
||||
ipv6 = no
|
||||
/* If enabled, requires m_ssl to be loaded */
|
||||
ssl = no
|
||||
/* IPs allowed to connect (separate with spaces), this should be secured. We also recommend you firewall this
|
||||
* with an outside program to increase security.
|
||||
*/
|
||||
allowed = "127.0.0.0/24"
|
||||
}
|
||||
|
||||
/*
|
||||
* m_xmlrpc_main
|
||||
*
|
||||
* Adds the main XMLRPC core functions.
|
||||
* Requires m_xmlrpc.
|
||||
*/
|
||||
#module { name = "m_xmlrpc_main" }
|
||||
|
||||
/*
|
||||
* ns_maxemail
|
||||
*
|
||||
* Limits how many times the same email address may be used in Anope
|
||||
* to register accounts.
|
||||
*/
|
||||
module { name = "ns_maxemail" }
|
||||
ns_maxemail
|
||||
{
|
||||
/*
|
||||
* The limit to how many registered nicks can use the same e-mail address. If set to 0 or left
|
||||
* commented, there will be no limit enforced when registering new accounts or using
|
||||
* /msg NickServ SET EMAIL.
|
||||
*/
|
||||
#maxemails = 1
|
||||
}
|
||||
|
||||
@@ -0,0 +1,619 @@
|
||||
/*
|
||||
* Example configuration file for NickServ.
|
||||
*/
|
||||
|
||||
/*
|
||||
* First, create the service.
|
||||
*/
|
||||
service
|
||||
{
|
||||
/*
|
||||
* The name of the NickServ client
|
||||
*/
|
||||
nick = "NickServ"
|
||||
|
||||
/*
|
||||
* The username of the NickServ client.
|
||||
*/
|
||||
user = "services"
|
||||
|
||||
/*
|
||||
* The hostname of the NickServ client.
|
||||
*/
|
||||
host = "services.host"
|
||||
|
||||
/*
|
||||
* The realname of the NickServ client.
|
||||
*/
|
||||
gecos = "Nickname Registration Service"
|
||||
|
||||
/*
|
||||
* The modes this client should use.
|
||||
* Do not modify this unless you know what you are doing.
|
||||
*
|
||||
* These modes are very IRCd specific. If left commented, sane defaults
|
||||
* are used based on what protocol module you have loaded.
|
||||
*
|
||||
* Note that setting this option incorrectly could potentially BREAK some if
|
||||
* not all usefulness of the client. We will not support you if this client is
|
||||
* unable to do certain things if this option is enabled.
|
||||
*/
|
||||
#modes = "+o"
|
||||
}
|
||||
|
||||
/*
|
||||
* Core NickServ module.
|
||||
*
|
||||
* Provides essential functionality for NickServ.
|
||||
*/
|
||||
module { name = "ns_main" }
|
||||
|
||||
/*
|
||||
* Configuration for NickServ provided by ns_main.
|
||||
*/
|
||||
nickserv
|
||||
{
|
||||
/*
|
||||
* The name of the client that should be NickServ.
|
||||
*/
|
||||
name = "NickServ"
|
||||
|
||||
/*
|
||||
* Force users to give an e-mail address when they register a nick.
|
||||
*
|
||||
* This directive is recommended to be enabled, and required if e-mail registration is enabled.
|
||||
*/
|
||||
forceemail = yes
|
||||
|
||||
/*
|
||||
* Require users who change their email address to confirm they
|
||||
* own it.
|
||||
*/
|
||||
confirmemailchanges = no
|
||||
|
||||
/*
|
||||
* Require an e-mail to be sent to the user before they can register their nick.
|
||||
*/
|
||||
#emailregistration = yes
|
||||
|
||||
/*
|
||||
* The default options for newly registered nicks. Note that changing these options
|
||||
* will have no effect on nicks which are already registered. The list must be separated
|
||||
* by spaces.
|
||||
*
|
||||
* The options are:
|
||||
* - kill: Kill nick if not identified within 60 seconds
|
||||
* - killquick: Kill nick if not identified within 20 seconds, this one overrides the above
|
||||
* option and the above must be specified with this one
|
||||
* - secure: Enable nickname security, requiring the nick's password before any operations
|
||||
* can be done on it
|
||||
* - private: Hide the nick from NickServ's LIST command
|
||||
* - hideemail: Hide's the nick's e-mail address from NickServ's INFO command
|
||||
* - hideusermask: Hide's the nick's last or current user@host from NickServ's INFO command
|
||||
* - hidequit: Hide's the nick's last quit message
|
||||
* - memosignon: Notify user if they have a new memo when they sign into the nick
|
||||
* - memoreceive: Notify user if they have a new memo as soon as it's received
|
||||
* - autoop: User will be automatically opped in channels they enter and have access to
|
||||
* - msg: Services messages will be sent as PRIVMSGs instead of NOTICEs, requires UsePrivmsg
|
||||
* to be enabled as well
|
||||
*
|
||||
* This directive is optional, if left blank, the options will default to secure, memosignon, and
|
||||
* memoreceive. If you really want no defaults, use "none" by itself as the option.
|
||||
*/
|
||||
defaults="secure private hideemail hideusermask memosignon memoreceive autoop"
|
||||
|
||||
/*
|
||||
* A list of languages to load on startup that will be available in /nickserv set language.
|
||||
* Useful if you translate Anope to your language. (Explained further in docs/LANGUAGE).
|
||||
* Note that english should not be listed here because it is the base language.
|
||||
*/
|
||||
languages = "ca_ES de_DE el_GR es_ES fr_FR hu_HU it_IT nl_NL pl_PL pt_PT ru_RU tr_TR"
|
||||
|
||||
/*
|
||||
* Default language that non- and newly-registered nicks will receive messages in.
|
||||
* Leave empty to default to English.
|
||||
*/
|
||||
#defaultlanguage = "es_ES"
|
||||
|
||||
/*
|
||||
* The minimum length of time between consecutive uses of NickServ's REGISTER command. This
|
||||
* directive is optional, but recommended. If not set, this restriction will be disabled.
|
||||
*/
|
||||
regdelay = 30s
|
||||
|
||||
/*
|
||||
* The minimum length of time between consecutive uses of NickServ's RESEND command.
|
||||
*
|
||||
* This directive is optional, but recommended. If not set, this restriction will be disabled.
|
||||
*/
|
||||
resenddelay = 90s
|
||||
|
||||
/*
|
||||
* The length of time before a nick registration expires.
|
||||
*
|
||||
* This directive is optional, but recommended. If not set, the default is 21 days.
|
||||
*/
|
||||
expire = 21d
|
||||
|
||||
/*
|
||||
* The length of time before a suspended nick becomes unsuspended.
|
||||
*
|
||||
* This directive is optional. If not set, the default is to never.
|
||||
*/
|
||||
#suspendexpire = 90d
|
||||
|
||||
/*
|
||||
* The length of time a user using an unconfirmed account has
|
||||
* before the account will be released for general use again.
|
||||
*
|
||||
* This directive is only required if the e-mail registration option is enabled.
|
||||
*/
|
||||
#unconfirmedexpire = 1d
|
||||
|
||||
/*
|
||||
* The maximum number of nicks allowed in a group.
|
||||
*
|
||||
* This directive is optional, but recommended. If not set or set to 0, no limits will be applied.
|
||||
*/
|
||||
maxaliases = 16
|
||||
|
||||
/*
|
||||
* The maximum number of entries allowed on a nickname's access list.
|
||||
*/
|
||||
accessmax = 32
|
||||
|
||||
/*
|
||||
* The username (and possibly hostname) used for the fake user created when NickServ collides
|
||||
* a user. Should be in the user@host format.
|
||||
*/
|
||||
enforceruser = "enforcer"
|
||||
enforcerhost = "localhost.net"
|
||||
|
||||
/*
|
||||
* The delay before a NickServ collided nick is released.
|
||||
*/
|
||||
releasetimeout = 1m
|
||||
|
||||
/*
|
||||
* Allow the use of the IMMED option in the NickServ SET KILL command.
|
||||
*
|
||||
* This directive is optional.
|
||||
*/
|
||||
#allowkillimmed = yes
|
||||
|
||||
/*
|
||||
* If set, the NickServ GROUP command won't allow any group change. This is recommended for
|
||||
* better performance and to protect against nick stealing, however users will have less
|
||||
* flexibility.
|
||||
*
|
||||
* This directive is optional, but recommended.
|
||||
*/
|
||||
#nogroupchange = yes
|
||||
|
||||
/*
|
||||
* The maximum number of nicks to be returned for a NickServ LIST command.
|
||||
*/
|
||||
listmax = 50
|
||||
|
||||
/*
|
||||
* When a user's nick is forcibly changed to enforce a "nick kill", their new nick will start
|
||||
* with this value. The rest will be made up of 6 or 7 digits.
|
||||
*/
|
||||
guestnickprefix = "Guest"
|
||||
|
||||
/*
|
||||
* Prevents the use of the DROP, FORBID, GETPASS, and SET PASSWORD commands by Services Admins
|
||||
* on other Services Admins or the Services Root(s).
|
||||
*
|
||||
* This directive is optional, but recommended.
|
||||
*/
|
||||
secureadmins = yes
|
||||
|
||||
/*
|
||||
* If set, any user wanting to use the privileges of Services Root, Services Admin, or Services
|
||||
* Operator must have been logged as an IRC Operator with the /oper command.
|
||||
*
|
||||
* This directive is optional, but recommended.
|
||||
*/
|
||||
strictprivileges = yes
|
||||
|
||||
/*
|
||||
* If set, Services will set the channel modes a user has access to upon identifying, assuming
|
||||
* they are not already set.
|
||||
*
|
||||
* This directive is optional.
|
||||
*/
|
||||
modeonid = yes
|
||||
|
||||
/*
|
||||
* If set, Services will add the usermask of registering users to the access list of their
|
||||
* newly created account. If not set, users will always have to identify to NickServ before
|
||||
* being recognized, unless they manually add an address to the access list of their account.
|
||||
* This directive is optional.
|
||||
*/
|
||||
addaccessonreg = yes
|
||||
|
||||
/*
|
||||
* The maximum number of channels a user can have on NickServ's AJOIN command.
|
||||
*/
|
||||
ajoinmax = 10
|
||||
}
|
||||
|
||||
/*
|
||||
* Core NickServ commands.
|
||||
*
|
||||
* In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
|
||||
* are loaded you can then configure the commands to be added to any client you like with any name you like.
|
||||
*
|
||||
* Additionally, you may provide a permission name that must be in the opertype of users executing the command.
|
||||
*
|
||||
* Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
|
||||
*/
|
||||
|
||||
/* Give it a help command */
|
||||
command { service = "NickServ"; name = "HELP"; command = "generic/help"; }
|
||||
|
||||
/*
|
||||
* ns_access
|
||||
*
|
||||
* Provides the command nickserv/access.
|
||||
*
|
||||
* Used for configuring what hosts have access to your account.
|
||||
*/
|
||||
module { name = "ns_access" }
|
||||
command { service = "NickServ"; name = "ACCESS"; command = "nickserv/access"; }
|
||||
|
||||
/*
|
||||
* ns_ajoin
|
||||
*
|
||||
* Provides the command nickserv/ajoin.
|
||||
*
|
||||
* Used for configuring channels to join once you identify.
|
||||
*/
|
||||
module { name = "ns_ajoin" }
|
||||
command { service = "NickServ"; name = "AJOIN"; command = "nickserv/ajoin"; }
|
||||
|
||||
/*
|
||||
* ns_alist
|
||||
*
|
||||
* Provides the command nickserv/alist.
|
||||
*
|
||||
* Used for viewing what channels you have access to.
|
||||
*/
|
||||
module { name = "ns_alist" }
|
||||
command { service = "NickServ"; name = "ALIST"; command = "nickserv/alist"; }
|
||||
|
||||
/*
|
||||
* ns_cert
|
||||
*
|
||||
* Provides the command nickserv/cert.
|
||||
*
|
||||
* Used for configuring your SSL certificate list, which can be used to automatically identify you.
|
||||
*/
|
||||
module { name = "ns_cert" }
|
||||
command { service = "NickServ"; name = "CERT"; command = "nickserv/cert"; }
|
||||
|
||||
/*
|
||||
* ns_drop
|
||||
*
|
||||
* Provides the command nickserv/drop.
|
||||
*
|
||||
* Used for unregistering names.
|
||||
*/
|
||||
module { name = "ns_drop" }
|
||||
command { service = "NickServ"; name = "DROP"; command = "nickserv/drop"; }
|
||||
|
||||
/*
|
||||
* ns_getemail
|
||||
*
|
||||
* Provides the command nickserv/getemail.
|
||||
*
|
||||
* Used for getting registered accounts by searching for emails.
|
||||
*/
|
||||
module { name = "ns_getemail" }
|
||||
command { service = "NickServ"; name = "GETEMAIL"; command = "nickserv/getemail"; permission = "nickserv/getemail"; }
|
||||
|
||||
/*
|
||||
* ns_getpass
|
||||
*
|
||||
* Provides the command nickserv/getpass.
|
||||
*
|
||||
* Used for getting users passwords.
|
||||
*
|
||||
* Requires no encryption is being used.
|
||||
*/
|
||||
#module { name = "ns_getpass" }
|
||||
#command { service = "NickServ"; name = "GETPASS"; command = "nickserv/getpass"; permission = "nickserv/getpass"; }
|
||||
|
||||
/*
|
||||
* ns_ghost
|
||||
*
|
||||
* Provides the command nickserv/ghost.
|
||||
*
|
||||
* Used for disconnecting "ghost" sessions.
|
||||
*/
|
||||
module { name = "ns_ghost" }
|
||||
command { service = "NickServ"; name = "GHOST"; command = "nickserv/ghost"; }
|
||||
|
||||
/*
|
||||
* ns_group
|
||||
*
|
||||
* Provides the commands nickserv/group, nickserv/glist, and nickserv/ungroup.
|
||||
*
|
||||
* Used for controlling nick groups.
|
||||
*/
|
||||
module { name = "ns_group" }
|
||||
command { service = "NickServ"; name = "GLIST"; command = "nickserv/glist"; }
|
||||
command { service = "NickServ"; name = "GROUP"; command = "nickserv/group"; }
|
||||
command { service = "NickServ"; name = "UNGROUP"; command = "nickserv/ungroup"; }
|
||||
|
||||
/*
|
||||
* ns_identify
|
||||
*
|
||||
* Provides the command nickserv/identify.
|
||||
*
|
||||
* Used for identifying to accounts.
|
||||
*/
|
||||
module { name = "ns_identify" }
|
||||
command { service = "NickServ"; name = "ID"; command = "nickserv/identify"; }
|
||||
command { service = "NickServ"; name = "IDENTIFY"; command = "nickserv/identify"; }
|
||||
|
||||
/*
|
||||
* ns_info
|
||||
*
|
||||
* Provides the command nickserv/info.
|
||||
*
|
||||
* Used for gathering information about an account.
|
||||
*/
|
||||
module { name = "ns_info" }
|
||||
command { service = "NickServ"; name = "INFO"; command = "nickserv/info"; }
|
||||
|
||||
/*
|
||||
* ns_list
|
||||
*
|
||||
* Provides the command nickserv/list.
|
||||
*
|
||||
* Used for retrieving and searching the registered account list.
|
||||
*/
|
||||
module { name = "ns_list" }
|
||||
command { service = "NickServ"; name = "LIST"; command = "nickserv/list"; }
|
||||
|
||||
/*
|
||||
* ns_logout
|
||||
*
|
||||
* Provides the command nickserv/logout.
|
||||
*
|
||||
* Used for logging out of your account.
|
||||
*/
|
||||
module { name = "ns_logout" }
|
||||
command { service = "NickServ"; name = "LOGOUT"; command = "nickserv/logout"; }
|
||||
|
||||
/*
|
||||
* ns_recover
|
||||
*
|
||||
* Provides the command nickserv/recover.
|
||||
*
|
||||
* Used for forcing someone on your nick to a guest nick.
|
||||
*/
|
||||
module { name = "ns_recover" }
|
||||
command { service = "NickServ"; name = "RECOVER"; command = "nickserv/recover"; }
|
||||
|
||||
/*
|
||||
* ns_register
|
||||
*
|
||||
* Provides the commands nickserv/confirm, nickserv/register, and nickserv/resend.
|
||||
*
|
||||
* Used for registering accounts.
|
||||
*/
|
||||
module { name = "ns_register" }
|
||||
command { service = "NickServ"; name = "CONFIRM"; command = "nickserv/confirm"; }
|
||||
command { service = "NickServ"; name = "REGISTER"; command = "nickserv/register"; }
|
||||
command { service = "NickServ"; name = "RESEND"; command = "nickserv/resend"; }
|
||||
|
||||
/*
|
||||
* ns_release
|
||||
*
|
||||
* Provides the command nickserv/release.
|
||||
*
|
||||
* Used for releasing names held by nickserv/recover.
|
||||
*/
|
||||
module { name = "ns_release" }
|
||||
command { service = "NickServ"; name = "RELEASE"; command = "nickserv/release"; }
|
||||
|
||||
/*
|
||||
* ns_resetpass
|
||||
*
|
||||
* Provides the command nickserv/resetpass.
|
||||
*
|
||||
* Used for resetting passwords by emailing users a temporary one.
|
||||
*/
|
||||
module { name = "ns_resetpass" }
|
||||
command { service = "NickServ"; name = "RESETPASS"; command = "nickserv/resetpass"; }
|
||||
|
||||
/*
|
||||
* ns_saset
|
||||
*
|
||||
* Provides commands nickserv/saset, nickserv/saset/display, and nickserv/saset/password.
|
||||
*
|
||||
* Used as a help wrapper for SASET commands, and used to force change users display name or password.
|
||||
*/
|
||||
module { name = "ns_saset" }
|
||||
command { service = "NickServ"; name = "SASET"; command = "nickserv/saset"; }
|
||||
command { service = "NickServ"; name = "SASET DISPLAY"; command = "nickserv/saset/display"; }
|
||||
command { service = "NickServ"; name = "SASET PASSWORD"; command = "nickserv/saset/password"; }
|
||||
|
||||
/*
|
||||
* ns_set
|
||||
*
|
||||
* Provides the commands nickserv/set, nickserv/set/display, and nickserv/set/password.
|
||||
*
|
||||
* Used as a help wrapper for SET commands, and used for users to change their display name or password.
|
||||
*/
|
||||
module { name = "ns_set" }
|
||||
command { service = "NickServ"; name = "SET"; command = "nickserv/set"; }
|
||||
command { service = "NickServ"; name = "SET DISPLAY"; command = "nickserv/set/display"; }
|
||||
command { service = "NickServ"; name = "SET PASSWORD"; command = "nickserv/set/password"; }
|
||||
|
||||
/*
|
||||
* ns_set_autoop
|
||||
*
|
||||
* Provides the commands nickserv/set/autoop and nickserv/saset/autoop.
|
||||
*
|
||||
* Used for setting autoop, which determines whether or not modes are automatically set on you when joining a channel.
|
||||
*/
|
||||
module { name = "ns_set_autoop" }
|
||||
command { service = "NickServ"; name = "SET AUTOOP"; command = "nickserv/set/autoop"; }
|
||||
command { service = "NickServ"; name = "SASET AUTOOP"; command = "nickserv/saset/autoop"; permission = "nickserv/saset/autoop"; }
|
||||
|
||||
/*
|
||||
* ns_set_email
|
||||
*
|
||||
* Provides the commands nickserv/set/email and nickserv/saset/email.
|
||||
*
|
||||
* Used for setting users email addresses.
|
||||
*/
|
||||
module { name = "ns_set_email" }
|
||||
command { service = "NickServ"; name = "SET EMAIL"; command = "nickserv/set/email"; }
|
||||
command { service = "NickServ"; name = "SASET EMAIL"; command = "nickserv/saset/email"; permission = "nickserv/saset/email"; }
|
||||
|
||||
/*
|
||||
* ns_set_greet
|
||||
*
|
||||
* Provides the commands nickserv/set/greet and nickserv/saset/greet.
|
||||
*
|
||||
* Used for changing users greet message, which is displayed when they enter channels.
|
||||
*/
|
||||
module { name = "ns_set_greet" }
|
||||
command { service = "NickServ"; name = "SET GREET"; command = "nickserv/set/greet"; }
|
||||
command { service = "NickServ"; name = "SASET GREET"; command = "nickserv/saset/greet"; permission = "nickserv/saset/greet"; }
|
||||
|
||||
/*
|
||||
* ns_set_hide
|
||||
*
|
||||
* Provides the commands nickserv/set/hide and nickserv/saset/hide.
|
||||
*
|
||||
* Used for configuring which options are publically shown in nickserv/info for your account.
|
||||
*/
|
||||
module { name = "ns_set_hide" }
|
||||
command { service = "NickServ"; name = "SET HIDE"; command = "nickserv/set/hide"; }
|
||||
command { service = "NickServ"; name = "SASET HIDE"; command = "nickserv/saset/hide"; permission = "nickserv/saset/hide"; }
|
||||
|
||||
/*
|
||||
* ns_set_kill
|
||||
*
|
||||
* Provides the commands nickserv/set/kill and nickserv/saset/kill.
|
||||
*
|
||||
* Used for configuring if and for how long other users are allowed to use your nick.
|
||||
*/
|
||||
module { name = "ns_set_kill" }
|
||||
command { service = "NickServ"; name = "SET KILL"; command = "nickserv/set/kill"; }
|
||||
command { service = "NickServ"; name = "SASET KILL"; command = "nickserv/saset/kill"; permission = "nickserv/saset/kill"; }
|
||||
|
||||
/*
|
||||
* ns_set_language
|
||||
*
|
||||
* Provides the commands nickserv/set/language and nickserv/saset/language.
|
||||
*
|
||||
* Used for configuring what language services use when messaging you.
|
||||
*/
|
||||
module { name = "ns_set_language" }
|
||||
command { service = "NickServ"; name = "SET LANGUAGE"; command = "nickserv/set/language"; }
|
||||
command { service = "NickServ"; name = "SASET LANGUAGE"; command = "nickserv/saset/language"; permission = "nickserv/saset/language"; }
|
||||
|
||||
/*
|
||||
* ns_set_message
|
||||
*
|
||||
* Provides the commands nickserv/set/message and nickserv/saset/message.
|
||||
*
|
||||
* Used to configure how services send messages to you.
|
||||
*/
|
||||
module { name = "ns_set_message" }
|
||||
command { service = "NickServ"; name = "SET MESSAGE"; command = "nickserv/set/message"; }
|
||||
command { service = "NickServ"; name = "SASET MESSAGE"; command = "nickserv/saset/message"; permission = "nickserv/saset/message"; }
|
||||
|
||||
/*
|
||||
* ns_set_private
|
||||
*
|
||||
* Provides the commands nickserv/set/private and nickserv/saset/private.
|
||||
*
|
||||
* Used for configuring whether or not your account shows up in nickserv/list.
|
||||
*/
|
||||
module { name = "ns_set_private" }
|
||||
command { service = "NickServ"; name = "SET PRIVATE"; command = "nickserv/set/private"; }
|
||||
command { service = "NickServ"; name = "SASET PRIVATE"; command = "nickserv/saset/private"; permission = "nickserv/saset/private"; }
|
||||
|
||||
/*
|
||||
* ns_set_secure
|
||||
*
|
||||
* Provides the commands nickserv/set/secure and nickserv/saset/secure.
|
||||
*
|
||||
* Used for configuring whether you can gain access to your nick by simply being recognized by nickserv/access.
|
||||
*/
|
||||
module { name = "ns_set_secure" }
|
||||
command { service = "NickServ"; name = "SET SECURE"; command = "nickserv/set/secure"; }
|
||||
command { service = "NickServ"; name = "SASET SECURE"; command = "nickserv/saset/secure"; permission = "nickserv/saset/secure"; }
|
||||
|
||||
/*
|
||||
* ns_saset_noexpire
|
||||
*
|
||||
* Provides the command nickserv/saset/noexpire.
|
||||
*
|
||||
* Used for configuring noexpire, which prevents nicks from expiring.
|
||||
*/
|
||||
module { name = "ns_saset_noexpire" }
|
||||
command { service = "NickServ"; name = "SASET NOEXPIRE"; command = "nickserv/saset/noexpire"; permission = "nickserv/saset/noexpire" }
|
||||
|
||||
/*
|
||||
* ns_sendpass
|
||||
*
|
||||
* Provides the command nickserv/sendpass.
|
||||
*
|
||||
* Used to send users their password via email.
|
||||
*
|
||||
* Requires that no encryption is being used.
|
||||
*/
|
||||
module { name = "ns_sendpass" }
|
||||
command { service = "NickServ"; name = "SENDPASS"; command = "nickserv/sendpass"; permission = "nickserv/sendpass"; }
|
||||
|
||||
/*
|
||||
* ns_set_misc
|
||||
*
|
||||
* Provides the command nickserv/set/misc.
|
||||
*
|
||||
* Allows you to create arbitrary commands to set data, and have that data show up in nickserv/info.
|
||||
*/
|
||||
module { name = "ns_set_misc" }
|
||||
command { service = "NickServ"; name = "SET URL"; command = "nickserv/set/misc"; }
|
||||
command { service = "NickServ"; name = "SET ICQ"; command = "nickserv/set/misc"; }
|
||||
|
||||
/*
|
||||
* ns_status
|
||||
*
|
||||
* Provides the nickserv/status command.
|
||||
*
|
||||
* Used to determine if a user is recognized or identified by services.
|
||||
*/
|
||||
module { name = "ns_status" }
|
||||
command { service = "NickServ"; name = "STATUS"; command = "nickserv/status"; }
|
||||
|
||||
/*
|
||||
* ns_suspend
|
||||
*
|
||||
* Provides the commands nickserv/suspend and nickserv/unsuspend.
|
||||
*
|
||||
* Used to suspend and unsuspend nicknames. Suspended nicknames can not be used but their settings are stored.
|
||||
*/
|
||||
module { name = "ns_suspend" }
|
||||
command { service = "NickServ"; name = "SUSPEND"; command = "nickserv/suspend"; permission = "nickserv/suspend"; }
|
||||
command { service = "NickServ"; name = "UNSUSPEND"; command = "nickserv/unsuspend"; permission = "nickserv/suspend"; }
|
||||
|
||||
/*
|
||||
* ns_update
|
||||
*
|
||||
* Provides the command nickserv/update.
|
||||
*
|
||||
* Used to update your status on all channels, turn on your vHost, etc.
|
||||
*/
|
||||
module { name = "ns_update" }
|
||||
command { service = "NickServ"; name = "UPDATE"; command = "nickserv/update"; }
|
||||
|
||||
@@ -0,0 +1,593 @@
|
||||
/*
|
||||
* Example configuration file for OperServ.
|
||||
*/
|
||||
|
||||
/*
|
||||
* First, create the service.
|
||||
*/
|
||||
service
|
||||
{
|
||||
/*
|
||||
* The name of the OperServ client
|
||||
*/
|
||||
nick = "OperServ"
|
||||
|
||||
/*
|
||||
* The username of the OperServ client.
|
||||
*/
|
||||
user = "services"
|
||||
|
||||
/*
|
||||
* The hostname of the OperServ client.
|
||||
*/
|
||||
host = "services.host"
|
||||
|
||||
/*
|
||||
* The realname of the OperServ client.
|
||||
*/
|
||||
gecos = "Operator Service"
|
||||
|
||||
/*
|
||||
* The modes this client should use.
|
||||
* Do not modify this unless you know what you are doing.
|
||||
*
|
||||
* These modes are very IRCd specific. If left commented, sane defaults
|
||||
* are used based on what protocol module you have loaded.
|
||||
*
|
||||
* Note that setting this option incorrectly could potentially BREAK some if
|
||||
* not all usefulness of the client. We will not support you if this client is
|
||||
* unable to do certain things if this option is enabled.
|
||||
*/
|
||||
#modes = "+o"
|
||||
}
|
||||
|
||||
/*
|
||||
* Core OperServ module.
|
||||
*
|
||||
* Provides essential functionality for OperServ.
|
||||
*/
|
||||
module { name = "os_main" }
|
||||
|
||||
/*
|
||||
* Configuration for OperServ provided by os_main.
|
||||
*/
|
||||
operserv
|
||||
{
|
||||
/*
|
||||
* The name of the client that should be OperServ.
|
||||
*/
|
||||
name = "OperServ"
|
||||
|
||||
/*
|
||||
* If set, Services Admins will be able to use SUPERADMIN [ON|OFF] which will temporarily grant
|
||||
* them extra privileges such as being a founder on ALL channels.
|
||||
*
|
||||
* This directive is optional.
|
||||
*/
|
||||
#superadmin = yes
|
||||
|
||||
/*
|
||||
* These define the default expiration times for, respectively, AKILLs, CHANKILLs, SNLINEs,
|
||||
* SQLINEs, and SZLINEs.
|
||||
*/
|
||||
autokillexpiry = 30d
|
||||
chankillexpiry = 30d
|
||||
snlineexpiry = 30d
|
||||
sqlineexpiry = 30d
|
||||
szlineexpiry = 30d
|
||||
|
||||
/*
|
||||
* If set, this option will make Services send an AKILL command immediately after it has been
|
||||
* added with AKILL ADD. This eliminates the need for killing the user after the AKILL has
|
||||
* been added.
|
||||
*
|
||||
* This directive is optional, but recommended.
|
||||
*/
|
||||
akillonadd = yes
|
||||
|
||||
/*
|
||||
* If set, this option will make Services send an (SVS)KILL command immediately after SNLINE ADD.
|
||||
* This eliminates the need for killing the user after the SNLINE has been added.
|
||||
*
|
||||
*This directive is optional.
|
||||
*/
|
||||
#killonsnline = yes
|
||||
|
||||
/*
|
||||
* If set, this option will make Services send an (SVS)KILL command immediately after SQLINE ADD.
|
||||
* This eliminates the need for killing the user after the SQLINE has been added.
|
||||
*
|
||||
* This directive is optional.
|
||||
*/
|
||||
#killonsqline = yes
|
||||
|
||||
/*
|
||||
* Defines what actions should trigger notifications. The list must be separated by spaces.
|
||||
*
|
||||
* The notifications are:
|
||||
* - oper: A user has become an IRC operator
|
||||
* - bados: A non-IRCop attempts to use OperServ
|
||||
* - akillexpire: An AKILL has expired
|
||||
* - snlineexpire: An SNLINE has expired
|
||||
* - sqlineexpire: An SQLINE has expired
|
||||
* - szlineexpire: An SZLINE has expired
|
||||
* - exceptionexpire: A session exception has expired
|
||||
*
|
||||
* This directive is optional, if left blank, there will be no notifications.
|
||||
*/
|
||||
notifications = "oper"
|
||||
|
||||
/*
|
||||
* Enables session limiting. Session limiting prevents users from connecting more than a certain
|
||||
* number of times from the same host at the same time - thus preventing most types of cloning.
|
||||
* Once a host reaches it's session limit, all clients attempting to connect from that host will
|
||||
* be killed. Exceptions to the default session limit can be defined via the exception list. It
|
||||
* should be noted that session limiting, along with a large exception list, can degrade Services'
|
||||
* performance.
|
||||
*
|
||||
* See the source and comments in sessions.c and the online help for more information about
|
||||
* session limiting.
|
||||
*
|
||||
* This directive is optional.
|
||||
*/
|
||||
limitsessions = yes
|
||||
|
||||
/*
|
||||
* Default session limit per host. Once a host reaches it's session limit, all clients attempting
|
||||
* to connect from that host will be killed. A value of zero means an unlimited session limit.
|
||||
*
|
||||
* This directive is optional.
|
||||
* If not given and session limiting is enabled, it will default to no limit.
|
||||
*/
|
||||
defaultsessionlimit = 3
|
||||
|
||||
/*
|
||||
* The maximum session limit that may be set for a host in an exception.
|
||||
*
|
||||
* This directive is only required if session limiting is enabled.
|
||||
*/
|
||||
maxsessionlimit = 100
|
||||
|
||||
/*
|
||||
* Sets the default expiry time for session exceptions.
|
||||
*
|
||||
* This directive is only required if session limiting is enabled.
|
||||
*/
|
||||
exceptionexpiry = 1d
|
||||
|
||||
/*
|
||||
* The message that will be NOTICE'd to a user just before they are removed from the network because
|
||||
* their host's session limit has been exceeded. It may be used to give a slightly more descriptive
|
||||
* reason for the impending kill as opposed to simply "Session limit exceeded".
|
||||
*
|
||||
* This directive is optional, if not set, nothing will be sent.
|
||||
*/
|
||||
sessionlimitexceeded = "The session limit for your host %s has been exceeded."
|
||||
|
||||
/*
|
||||
* Same as above, but should be used to provide a website address where users can find out more
|
||||
* about session limits and how to go about applying for an exception.
|
||||
*
|
||||
* Note: This directive has been intentionally commented out in an effort to remind you to change
|
||||
* the URL it contains. It is recommended that you supply an address/URL where people can get help
|
||||
* regarding session limits.
|
||||
*
|
||||
* This directive is optional, if not set, nothing will be sent.
|
||||
*/
|
||||
#sessionlimitdetailsloc = "Please visit http://your.website.url/ for more information about session limits."
|
||||
|
||||
/*
|
||||
* If set and is not 0, this directive tells Services to add an AKILL the number of subsequent kills
|
||||
* for the same host exceeds this value, preventing the network from experiencing KILL floods.
|
||||
*
|
||||
* This directive is optional.
|
||||
*/
|
||||
maxsessionkill = 15
|
||||
|
||||
/*
|
||||
* Sets the expiry time for AKILLs set for hosts exceeding the maxsessionkill directive limit.
|
||||
*
|
||||
* This directive is optional, if not set, defaults to 30 minutes.
|
||||
*/
|
||||
sessionautokillexpiry = 30m
|
||||
|
||||
/*
|
||||
* Adds the nickname of the IRC Operator issuing an AKILL to the kill reason.
|
||||
*
|
||||
* This directive is optional.
|
||||
*/
|
||||
addakiller = yes
|
||||
|
||||
/*
|
||||
* If set, only IRC Operators will be permitted to use OperServ, regardless of module-based command
|
||||
* access restrictions.
|
||||
*
|
||||
* This directive is optional, but recommended.
|
||||
*/
|
||||
opersonly = yes
|
||||
}
|
||||
|
||||
/*
|
||||
* Core OperServ commands.
|
||||
*
|
||||
* In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
|
||||
* are loaded you can then configure the commands to be added to any client you like with any name you like.
|
||||
*
|
||||
* Additionally, you may provide a permission name that must be in the opertype of users executing the command.
|
||||
*
|
||||
* Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
|
||||
*/
|
||||
|
||||
/* Give it a help command */
|
||||
command { service = "OperServ"; name = "HELP"; command = "generic/help"; }
|
||||
|
||||
/*
|
||||
* os_akill
|
||||
*
|
||||
* Provides the command operserv/akill.
|
||||
*
|
||||
* Used to ban users from the network.
|
||||
*/
|
||||
module { name = "os_akill" }
|
||||
command { service = "OperServ"; name = "AKILL"; command = "operserv/akill"; permission = "operserv/akill"; }
|
||||
|
||||
/*
|
||||
* os_chankill
|
||||
*
|
||||
* Provides the command operserv/chankill.
|
||||
*
|
||||
* Used to akill uses from an entire channel.
|
||||
*/
|
||||
module { name = "os_chankill" }
|
||||
command { service = "OperServ"; name = "CHANKILL"; command = "operserv/chankill"; permission = "operserv/chankill"; }
|
||||
|
||||
/*
|
||||
* os_defcon
|
||||
*
|
||||
* Provides the command operserv/defcon.
|
||||
*
|
||||
* Allows you to set services in defcon mode, which can be used to restrict services access
|
||||
* during bot attacks.
|
||||
*/
|
||||
#module { name = "os_defcon" }
|
||||
#command { service = "OperServ"; name = "DEFCON"; command = "operserv/defcon"; }
|
||||
defcon
|
||||
{
|
||||
/*
|
||||
* Default DefCon level (1-5) to use when starting Services up. Level 5 constitutes normal operation
|
||||
* while level 1 constitutes the most restrictive operation. If this setting is left out or set to
|
||||
* 0, DefCon will be disabled and the rest of this block will be ignored.
|
||||
*/
|
||||
#defaultlevel = 5
|
||||
|
||||
/*
|
||||
* The following 4 directives define what operations will take place when DefCon is set to levels
|
||||
* 1 through 4. Each level is a list that must be separated by spaces.
|
||||
*
|
||||
* The following operations can be defined at each level:
|
||||
* - nonewchannels: Disables registering new channels
|
||||
* - nonewnicks: Disables registering new nicks
|
||||
* - nomlockchanges: Disables changing MLOCK on registered channels
|
||||
* - forcechanmodes: Forces all channels to have the modes given in the later chanmodes directive
|
||||
* - reducedsessions: Reduces the session limit to the value given in the later sessionlimit directive
|
||||
* - nonewclients: KILL any new clients trying to connect
|
||||
* - operonly: Services will ignore all non-IRCops
|
||||
* - silentoperonly: Services will silently ignore all non-IRCops
|
||||
* - akillnewclients: AKILL any new clients trying to connect
|
||||
* - nonewmemos: No new memos will be sent to block MemoServ attacks
|
||||
*/
|
||||
level4 = "nonewchannels nonewnicks nomlockchanges reducedsessions"
|
||||
level3 = "nonewchannels nonewnicks nomlockchanges forcechanmodes reducedsessions"
|
||||
level2 = "nonewchannels nonewnicks nomlockchanges forcechanmodes reducedsessions silentoperonly"
|
||||
level1 = "nonewchannels nonewnicks nomlockchanges forcechanmodes reducedsessions silentoperonly akillnewclients"
|
||||
|
||||
/*
|
||||
* New session limit to use when a DefCon level is using "reduced" session limiting.
|
||||
*/
|
||||
#sessionlimit = 2
|
||||
|
||||
/*
|
||||
* Length of time to add an AKILL for when DefCon is preventing new clients from connecting to the
|
||||
* network.
|
||||
*/
|
||||
#akillexpire = 5m
|
||||
|
||||
/*
|
||||
* The channel modes to set on all channels when the DefCon channel mode system is in use.
|
||||
*
|
||||
* Note 1: Choose these modes carefully, because when DefCon switches to a level which does NOT have
|
||||
* the mode setting selected, Services will set the reverse on all channels, e.g. if this setting
|
||||
* is +RN when DefCon is used, all channels will be set to +RN, when DefCon is removed, all
|
||||
* channels will be set to -RN. You don't want to set this to +k for example, because when DefCon
|
||||
* is removed all channels with -k.
|
||||
*
|
||||
* Note 2: MLOCKed modes will not be lost.
|
||||
*/
|
||||
#chanmodes = "+R"
|
||||
|
||||
/*
|
||||
* This value can be used to automatically return the network to DefCon level 5 after the specified
|
||||
* time period, just in case any IRC Operator forgets to remove a DefCon setting.
|
||||
*
|
||||
* This directive is optional.
|
||||
*/
|
||||
#timeout = 15m
|
||||
|
||||
/*
|
||||
* If set, Services will send a global message on DefCon level changes.
|
||||
*
|
||||
* This directive is optional.
|
||||
*/
|
||||
#globalondefcon = yes
|
||||
|
||||
/*
|
||||
* If set, Services will send the global message defined in the message directive on DefCon level
|
||||
* changes.
|
||||
*
|
||||
* This directive is optional.
|
||||
*/
|
||||
#globalondefconmore = yes
|
||||
|
||||
/*
|
||||
* Defines the message that will be sent on DefCon level changes when globalondefconmore is set.
|
||||
*
|
||||
* This directive is required only when globalondefconmore is set.
|
||||
*/
|
||||
#message = "Put your message to send your users here. Dont forget to uncomment globalondefconmore"
|
||||
|
||||
/*
|
||||
* Defines the message that will be sent when DefCon is returned to level 5. This directive is optional,
|
||||
* and will also override globalondefcon and globalondefconmore when set.
|
||||
*/
|
||||
#offmessage = "Services are now back to normal, sorry for any inconvenience"
|
||||
|
||||
/*
|
||||
* Defines the reason to use when clients are KILLed or AKILLed from the network while the proper
|
||||
* DefCon operation is in effect.
|
||||
*/
|
||||
#akillreason = "This network is currently not accepting connections, please try again later"
|
||||
}
|
||||
|
||||
/*
|
||||
* os_list
|
||||
*
|
||||
* Provides the commands operserv/chanlist and operserv/userlist.
|
||||
*
|
||||
* Used to list and search the channels and users currently on the network.
|
||||
*/
|
||||
module { name = "os_list" }
|
||||
command { service = "OperServ"; name = "CHANLIST"; command = "operserv/chanlist"; }
|
||||
command { service = "OperServ"; name = "USERLIST"; command = "operserv/userlist"; }
|
||||
|
||||
/*
|
||||
* os_config
|
||||
*
|
||||
* Provides the command operserv/config.
|
||||
*
|
||||
* Used to view and set configuration options while services are running.
|
||||
*/
|
||||
module { name = "os_config" }
|
||||
command { service = "OperServ"; name = "CONFIG"; command = "operserv/config"; permission = "operserv/config"; }
|
||||
|
||||
/*
|
||||
* os_forbid
|
||||
*
|
||||
* Provides the command operserv/forbid.
|
||||
*
|
||||
* Used to forbid specific nicks, channels, emails, etc. from being used.
|
||||
*/
|
||||
module { name = "os_forbid" }
|
||||
command { service = "OperServ"; name = "FORBID"; command = "operserv/forbid"; permission = "operserv/forbid"; }
|
||||
|
||||
/*
|
||||
* os_ignore
|
||||
*
|
||||
* Provides the command operserv/ignore.
|
||||
*
|
||||
* Used to make Services ignore users.
|
||||
*/
|
||||
module { name = "os_ignore" }
|
||||
command { service = "OperServ"; name = "IGNORE"; command = "operserv/ignore"; permission = "operserv/ignore"; }
|
||||
|
||||
/*
|
||||
* os_jupe
|
||||
*
|
||||
* Provides the command operserv/jupe.
|
||||
*
|
||||
* Used to disconnect servers from the network and prevent them from relinking.
|
||||
*/
|
||||
module { name = "os_jupe" }
|
||||
command { service = "OperServ"; name = "JUPE"; command = "operserv/jupe"; permission = "operserv/jupe"; }
|
||||
|
||||
/*
|
||||
* os_kick
|
||||
*
|
||||
* Provides the command operserv/kick.
|
||||
*
|
||||
* Used to kick users from channels.
|
||||
*/
|
||||
module { name = "os_kick" }
|
||||
command { service = "OperServ"; name = "KICK"; command = "operserv/kick"; permission = "operserv/kick"; }
|
||||
|
||||
/*
|
||||
* os_kill
|
||||
*
|
||||
* Provides the command operserv/kill.
|
||||
*
|
||||
* Used to forcibly disconnect users from the network.
|
||||
*/
|
||||
module { name = "os_kill" }
|
||||
command { service = "OperServ"; name = "KILL"; command = "operserv/kill"; permission = "operserv/kill"; }
|
||||
|
||||
/*
|
||||
* os_login
|
||||
*
|
||||
* Provides the command operserv/login.
|
||||
*
|
||||
* Used to login to OperServ, only required if your oper block requires this.
|
||||
*/
|
||||
module { name = "os_login" }
|
||||
command { service = "OperServ"; name = "LOGIN"; command = "operserv/login"; }
|
||||
|
||||
/*
|
||||
* os_mode
|
||||
*
|
||||
* Provides the commands operserv/mode and operserv/umode.
|
||||
*
|
||||
* Used to change user and channel modes.
|
||||
*/
|
||||
module { name = "os_mode" }
|
||||
command { service = "OperServ"; name = "MODE"; command = "operserv/mode"; permission = "operserv/mode"; }
|
||||
command { service = "OperServ"; name = "UMODE"; command = "operserv/umode"; permission = "operserv/umode"; }
|
||||
|
||||
/*
|
||||
* os_modinfo
|
||||
*
|
||||
* Provides the commands operserv/modinfo and operserv/modlist.
|
||||
*
|
||||
* Used to show information about loaded modules.
|
||||
*/
|
||||
module { name = "os_modinfo" }
|
||||
command { service = "OperServ"; name = "MODINFO"; command = "operserv/modinfo"; }
|
||||
command { service = "OperServ"; name = "MODLIST"; command = "operserv/modlist"; permission = "operserv/modlist"; }
|
||||
|
||||
/*
|
||||
* os_module
|
||||
*
|
||||
* Provides the commands operserv/modload, operserv/modreload, and operserv/modunload.
|
||||
*
|
||||
* Used to load, reload, and unload modules.
|
||||
*/
|
||||
module { name = "os_module" }
|
||||
command { service = "OperServ"; name = "MODLOAD"; command = "operserv/modload"; permission = "operserv/modload"; }
|
||||
command { service = "OperServ"; name = "MODRELOAD"; command = "operserv/modreload"; permission = "operserv/modload"; }
|
||||
command { service = "OperServ"; name = "MODUNLOAD"; command = "operserv/modunload"; permission = "operserv/modload"; }
|
||||
|
||||
/*
|
||||
* os_news
|
||||
*
|
||||
* Provides the commands operserv/logonnews, operserv/opernews, and operserv/randomnews.
|
||||
*
|
||||
* Used to configure news notices shown to users when they connect, and opers when they oper.
|
||||
*/
|
||||
module { name = "os_news" }
|
||||
command { service = "OperServ"; name = "LOGONNEWS"; command = "operserv/logonnews"; permission = "operserv/news"; }
|
||||
command { service = "OperServ"; name = "OPERNEWS"; command = "operserv/opernews"; permission = "operserv/news"; }
|
||||
command { service = "OperServ"; name = "RANDOMNEWS"; command = "operserv/randomnews"; permission = "operserv/news"; }
|
||||
|
||||
/*
|
||||
* os_noop
|
||||
*
|
||||
* Provides the command operserv/noop.
|
||||
*
|
||||
* Used to NOOP a server, which prevents users from opering on that server.
|
||||
*/
|
||||
module { name = "os_noop" }
|
||||
command { service = "OperServ"; name = "NOOP"; command = "operserv/noop"; permission = "operserv/noop"; }
|
||||
|
||||
/*
|
||||
* os_oline
|
||||
*
|
||||
* Provides the command operserv/oline.
|
||||
*
|
||||
* Used to set oper flags on users, and is specific to UnrealIRCd.
|
||||
* See /helpop ?svso on your IRCd for more information.
|
||||
*/
|
||||
module { name = "os_oline" }
|
||||
command { service = "OperServ"; name = "OLINE"; command = "operserv/oline"; permission = "operserv/oline"; }
|
||||
|
||||
/*
|
||||
* os_oper
|
||||
*
|
||||
* Provides the command opersev/oper.
|
||||
*
|
||||
* Used to configure opers and show information about opertypes.
|
||||
*/
|
||||
module { name = "os_oper" }
|
||||
command { service = "OperServ"; name = "OPER"; command = "operserv/oper"; permission = "operserv/oper"; }
|
||||
|
||||
/*
|
||||
* os_reload
|
||||
*
|
||||
* Provides the command operserv/relad.
|
||||
*
|
||||
* Used to reload the services.conf configuration file.
|
||||
*/
|
||||
module { name = "os_reload" }
|
||||
command { service = "OperServ"; name = "RELOAD"; command = "operserv/reload"; permission = "operserv/reload"; }
|
||||
|
||||
/*
|
||||
* os_session
|
||||
*
|
||||
* Provides the commands operserv/exception and operserv/session.
|
||||
*
|
||||
* Used to manage the session limit exception list, and view currently active sessions.
|
||||
*/
|
||||
module { name = "os_session" }
|
||||
command { service = "OperServ"; name = "EXCEPTION"; command = "operserv/exception"; permission = "operserv/exception"; }
|
||||
command { service = "OperServ"; name = "SESSION"; command = "operserv/session"; permission = "operserv/session"; }
|
||||
|
||||
/*
|
||||
* os_set
|
||||
*
|
||||
* Provides the command operserv/set.
|
||||
*
|
||||
* Used to set various settinsg such as superadmin, debug mode, etc.
|
||||
*/
|
||||
module { name = "os_set" }
|
||||
command { service = "OperServ"; name = "SET"; command = "operserv/set"; permission = "operserv/set"; }
|
||||
|
||||
/*
|
||||
* os_shutdown
|
||||
*
|
||||
* Provides the commands operserv/quit, operserv/restart, and operserv/shutdown.
|
||||
*
|
||||
* Used to quit, restart, or shutdown services.
|
||||
*/
|
||||
module { name = "os_shutdown" }
|
||||
command { service = "OperServ"; name = "QUIT"; command = "operserv/quit"; permission = "operserv/quit"; }
|
||||
command { service = "OperServ"; name = "RESTART"; command = "operserv/restart"; permission = "operserv/restart"; }
|
||||
command { service = "OperServ"; name = "SHUTDOWN"; command = "operserv/shutdown"; permission = "operserv/shutdown"; }
|
||||
|
||||
/*
|
||||
* os_stats
|
||||
*
|
||||
* Provides the operserv/stats command.
|
||||
*
|
||||
* Used to show statistics about services.
|
||||
*/
|
||||
module { name = "os_stats" }
|
||||
command { service = "OperServ"; name = "STATS"; command = "operserv/stats"; permission = "operserv/stats"; }
|
||||
|
||||
/*
|
||||
* os_svsnick
|
||||
*
|
||||
* Provides the operserv/svsnick command.
|
||||
*
|
||||
* Used to force change user's nicks.
|
||||
*/
|
||||
module { name = "os_svsnick" }
|
||||
command { service = "OperServ"; name = "SVSNICK"; command = "operserv/svsnick"; permission = "operserv/svsnick"; }
|
||||
|
||||
/*
|
||||
* os_sxline
|
||||
*
|
||||
* Provides the operserv/snline, operserv/sqline, and operserv/szline commands.
|
||||
*
|
||||
* Used to ban different things such as realnames, nicknames, and IPs.
|
||||
*/
|
||||
module { name = "os_sxline" }
|
||||
command { service = "OperServ"; name = "SNLINE"; command = "operserv/snline"; permission = "operserv/snline"; }
|
||||
command { service = "OperServ"; name = "SQLINE"; command = "operserv/sqline"; permission = "operserv/sqline"; }
|
||||
command { service = "OperServ"; name = "SZLINE"; command = "operserv/szline"; permission = "operserv/szline"; }
|
||||
|
||||
/*
|
||||
* os_update
|
||||
*
|
||||
* Provides the opersev/update command.
|
||||
*
|
||||
* Use to immediately update the databases.
|
||||
*/
|
||||
module { name = "os_update" }
|
||||
command { service = "OperServ"; name = "UPDATE"; command = "operserv/update"; permission = "operserv/update"; }
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
-- http://www.phpmyadmin.net
|
||||
--
|
||||
-- Host: localhost
|
||||
-- Generation Time: Oct 31, 2010 at 03:02 AM
|
||||
-- Generation Time: Aug 07, 2011 at 03:53 PM
|
||||
-- Server version: 5.1.50
|
||||
-- PHP Version: 5.3.3-pl1-gentoo
|
||||
-- PHP Version: 5.3.6-pl0-gentoo
|
||||
|
||||
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
|
||||
|
||||
@@ -63,12 +63,14 @@ CREATE TABLE IF NOT EXISTS `anope_bs_info_metadata` (
|
||||
--
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `anope_cs_access` (
|
||||
`level` int(11) NOT NULL DEFAULT '0',
|
||||
`display` varchar(255) NOT NULL DEFAULT '',
|
||||
`provider` varchar(255) NOT NULL DEFAULT '',
|
||||
`data` varchar(255) NOT NULL DEFAULT '',
|
||||
`mask` varchar(255) NOT NULL DEFAULT '',
|
||||
`channel` varchar(255) NOT NULL DEFAULT '',
|
||||
`last_seen` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`creator` varchar(255) NOT NULL DEFAULT '',
|
||||
UNIQUE KEY `channel` (`channel`,`display`)
|
||||
`created` int(11) unsigned NOT NULL DEFAULT '0',
|
||||
UNIQUE KEY `channel` (`channel`,`mask`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
@@ -105,13 +107,7 @@ CREATE TABLE IF NOT EXISTS `anope_cs_info` (
|
||||
`last_topic_setter` text NOT NULL,
|
||||
`last_topic_time` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`flags` text NOT NULL,
|
||||
`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,
|
||||
@@ -151,6 +147,23 @@ 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`
|
||||
--
|
||||
@@ -237,6 +250,7 @@ CREATE TABLE IF NOT EXISTS `anope_ns_alias` (
|
||||
`last_quit` text NOT NULL,
|
||||
`last_realname` text NOT NULL,
|
||||
`last_usermask` text NOT NULL,
|
||||
`last_realhost` text NOT NULL,
|
||||
`time_registered` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`last_seen` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`flags` text NOT NULL,
|
||||
@@ -270,8 +284,7 @@ CREATE TABLE IF NOT EXISTS `anope_ns_core` (
|
||||
`email` text NOT NULL,
|
||||
`greet` text NOT NULL,
|
||||
`flags` text NOT NULL,
|
||||
`language` smallint(5) unsigned NOT NULL DEFAULT '0',
|
||||
`channelcount` smallint(5) unsigned NOT NULL DEFAULT '0',
|
||||
`language` varchar(5) NOT NULL DEFAULT '',
|
||||
`memomax` smallint(5) unsigned NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`display`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
@@ -290,47 +303,13 @@ 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`
|
||||
--
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `anope_os_akills` (
|
||||
`user` varchar(255) NOT NULL,
|
||||
`host` varchar(255) NOT NULL,
|
||||
`xby` text NOT NULL,
|
||||
`reason` text NOT NULL,
|
||||
`seton` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`expire` int(10) unsigned NOT NULL DEFAULT '0'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `anope_os_core`
|
||||
--
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `anope_os_core` (
|
||||
`maxusercnt` int(11) NOT NULL DEFAULT '0',
|
||||
`maxusertime` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`akills_count` int(11) NOT NULL DEFAULT '0',
|
||||
`snlines_count` int(11) NOT NULL DEFAULT '0',
|
||||
`sqlines_count` int(11) NOT NULL DEFAULT '0',
|
||||
`szlines_count` int(11) NOT NULL DEFAULT '0'
|
||||
`maxusertime` int(10) unsigned NOT NULL DEFAULT '0'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
@@ -355,7 +334,7 @@ CREATE TABLE IF NOT EXISTS `anope_os_exceptions` (
|
||||
--
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `anope_os_xlines` (
|
||||
`type` varchar(20) NOT NULL,
|
||||
`type` varchar(1) NOT NULL,
|
||||
`mask` varchar(255) NOT NULL,
|
||||
`xby` text NOT NULL,
|
||||
`reason` text NOT NULL,
|
||||
@@ -371,83 +350,77 @@ 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;
|
||||
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;
|
||||
|
||||
--
|
||||
-- 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;
|
||||
|
||||
+479
-1
@@ -1,3 +1,481 @@
|
||||
Revision 3cbad7f - Fri, 9 Sep 2011 23:27:15 -0400 - Regenerate language files
|
||||
Revision b80a0a8 - Fri, 9 Sep 2011 22:27:51 -0400 - Updated Greek language file
|
||||
Revision f844b0a - Fri, 9 Sep 2011 19:18:43 -0400 - Changed User::IsRecognized check to default to secure
|
||||
Revision 6bd31b0 - Thu, 8 Sep 2011 19:00:30 -0400 - Bug #1330 & many other small fixes
|
||||
Revision 7de1a7a - Mon, 5 Sep 2011 18:40:34 -0400 - Don't try and part service bots twice when channels drop
|
||||
Revision 3815e7d - Sat, 3 Sep 2011 14:39:12 -0400 - Translate whole messages before splitting them up to send to users
|
||||
Revision 30e6fc0 - Sat, 3 Sep 2011 14:13:14 -0400 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
|
||||
Revision fe1c5d4 - Sat, 3 Sep 2011 14:10:48 -0400 - Bug #1328 - Fixed fantasy to re-split message parameters correctly
|
||||
Revision fa5ba63 - Sat, 3 Sep 2011 13:44:20 +0100 - Fixed a typo in the OperServ Global command
|
||||
Revision 073db54 - Sat, 3 Sep 2011 01:29:57 -0400 - Added permission check in cs_sync
|
||||
Revision ef10b5a - Sat, 3 Sep 2011 06:58:49 +0200 - Fixed operserv global
|
||||
Revision 1c5ff92 - Mon, 29 Aug 2011 17:08:26 -0400 - Changed a few fatal exceptions to shutdown a bit more gracefully
|
||||
Revision b24ea29 - Mon, 29 Aug 2011 16:13:37 -0400 - Fixed the /ms del message sent to users when they use /ms read
|
||||
Revision 5cf3ddb - Mon, 29 Aug 2011 16:03:33 -0400 - Made config rehashing not wipe opers configured with opersev/oper
|
||||
Revision 1e1a41f - Sat, 27 Aug 2011 20:58:09 -0400 - Added missing ` in docs/LANGUAGE
|
||||
Revision 28e8190 - Sat, 27 Aug 2011 20:47:30 -0400 - Fixed some cmake warnings
|
||||
Revision 670c928 - Sat, 27 Aug 2011 17:13:28 -0400 - Tweaked the access operators to allow superadmins to be > channel founders
|
||||
Revision d07a692 - Sat, 27 Aug 2011 16:52:07 -0400 - Fixed /cs clone to set botmodes on the botserv bot when cloning channels
|
||||
Revision bb52530 - Sat, 27 Aug 2011 16:45:14 -0400 - Fixed mlock with param modes if you change (but not unset) the mode
|
||||
Revision 309dfa3 - Sat, 27 Aug 2011 16:14:04 -0400 - Fixed a few mysql problems, including bug #1326
|
||||
Revision 5c57f5a - Sat, 27 Aug 2011 15:34:09 -0400 - Fixed /ns logout on other users
|
||||
Revision a36e575 - Thu, 25 Aug 2011 19:01:40 -0400 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
|
||||
Revision 8702031 - Thu, 25 Aug 2011 19:01:01 -0400 - Set the creator of default mlocks to the channel founder when a channel is registered
|
||||
Revision 1571508 - Thu, 25 Aug 2011 10:16:56 +0200 - Only match users against the more "serious" extbans (ones which prevent users from joining)
|
||||
Revision 6dacec2 - Wed, 24 Aug 2011 21:11:23 +0200 - guested nicks are now logged out from the recovered account on /nickserv recover
|
||||
Revision fdbbea2 - Wed, 24 Aug 2011 14:27:01 -0400 - Fixed cs_set_misc
|
||||
Revision dffed5a - Wed, 24 Aug 2011 13:57:56 -0400 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
|
||||
Revision 5d681a7 - Wed, 24 Aug 2011 13:56:48 -0400 - Clear NS_HELD from nicks when recover expiry is up
|
||||
Revision d80e00f - Wed, 24 Aug 2011 13:57:40 +0200 - Fixed automatic fingerprint identify on nickchange between registered nicks
|
||||
Revision 21a8bff - Tue, 23 Aug 2011 19:04:27 -0400 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
|
||||
Revision fb14f77 - Tue, 23 Aug 2011 19:03:04 -0400 - Set os_session as having first priority for events
|
||||
Revision 2284c31 - Tue, 23 Aug 2011 11:42:40 +0200 - Replaced some chanserv/forbid with operserv/forbid in example.conf and added a check for ForceForbidReason in os_forbid
|
||||
Revision b5b2c42 - Mon, 22 Aug 2011 17:14:18 -0400 - Removed this ondeleteobject event, was for m_async_commands which died
|
||||
Revision a2f92b6 - Mon, 22 Aug 2011 13:14:08 -0400 - Fixed the db_mysql metadata load events to use the right keys
|
||||
Revision c996356 - Sun, 21 Aug 2011 16:35:22 -0400 - Bugs #1321 & 1322
|
||||
Revision d71ae41 - Sun, 21 Aug 2011 14:54:06 -0400 - Fixed /cs access add log message to not show override for channel founders
|
||||
Revision 68a125b - Sun, 21 Aug 2011 14:33:11 -0400 - Fixed ns_set_misc and cs_set_misc to allow unsetting values
|
||||
Revision 37c7ca8 - Sun, 21 Aug 2011 14:09:55 -0400 - Fixed AddAkiller
|
||||
Revision 4663970 - Sat, 20 Aug 2011 00:57:35 -0400 - Removed m_async_commands, it can still cause crashes from invalid pointers on the stack & is a giant mess anyway
|
||||
Revision a68d17c - Sat, 20 Aug 2011 00:51:39 -0400 - Moved the ERROR log message out of debug
|
||||
Revision fa3b74a - Sat, 20 Aug 2011 00:50:26 -0400 - Fixed zlines to only add the xline host, fixed db_mysql's write function, and prevent adding multiple of the same nick to access lists
|
||||
Revision fd999b9 - Fri, 19 Aug 2011 16:14:26 -0400 - Fixed some problems with deleting access
|
||||
Revision b4f5724 - Fri, 19 Aug 2011 04:20:11 -0400 - Fixed AccessGroup::operator> fail
|
||||
Revision abdc69a - Fri, 19 Aug 2011 09:07:19 +0200 - added some log message for automatic fingerprint identify and removed a unused function from ns_cert
|
||||
Revision 1b02216 - Thu, 18 Aug 2011 23:08:27 -0400 - Fixed crash in /cs mode
|
||||
Revision db340f9 - Thu, 18 Aug 2011 22:04:59 -0400 - Fixed some permission checking fail in modules that got messed up from the big commands sed
|
||||
Revision 0cdca53 - Thu, 18 Aug 2011 17:30:49 -0400 - Moved CA_TOPIC to qop aswell. Newer channels (default) to TOPIC at 5 but older channels will remain at founder only, causing access list to think newer aop are level 10000 due to having this permission on older channels.
|
||||
Revision 71b9bbd - Thu, 18 Aug 2011 16:48:51 -0400 - Bug #1315 - moved CA_ASSIGN permission from sop to qop
|
||||
Revision 2f3969b - Thu, 18 Aug 2011 07:59:58 +0200 - Bug #1317 - fixed sha1 fingerprint hashes in the inspircd protocol modules
|
||||
Revision ff7479f - Thu, 18 Aug 2011 00:47:34 -0400 - Fixed attaching to events in db_mysql & possibly having ChannelInfo::WhoSends return NULL if there really are *no* bots
|
||||
Revision 487d828 - Wed, 17 Aug 2011 22:05:47 -0400 - Actually made the nickserv block optional
|
||||
Revision f41081b - Wed, 17 Aug 2011 21:41:30 -0400 - Include when an access entry was created in access view
|
||||
Revision ede910d - Wed, 17 Aug 2011 15:56:40 -0400 - Made /os oper info also show all inherited commands/privs
|
||||
Revision 0f4c9a4 - Tue, 16 Aug 2011 16:38:42 -0400 - List supported languages in /ns help saset language
|
||||
Revision 9aa414b - Tue, 16 Aug 2011 15:28:21 -0400 - Fixed matching acount access entries against nicknames
|
||||
Revision 2d9ddb0 - Tue, 16 Aug 2011 13:43:01 -0400 - Bug #1316 - added permissions for hs_request commands
|
||||
Revision 1f542e1 - Tue, 16 Aug 2011 00:16:00 -0400 - Moved cs_seens data purger log message to debug
|
||||
Revision 68e0d99 - Tue, 16 Aug 2011 00:09:09 -0400 - Fixed select()ing 0 sockets on Windows
|
||||
Revision f43287f - Sun, 14 Aug 2011 22:10:17 -0400 - Fixed grammar problem in cs_clone
|
||||
Revision 2e7bd64 - Sun, 14 Aug 2011 21:46:14 -0400 - Fixed /cs clone access
|
||||
Revision 786397f - Sun, 14 Aug 2011 21:33:07 -0400 - Massive cleanup of cs_seen, added help, syntax messages, command descriptions, removed lots of dead code, fixed memory leaks, etc
|
||||
Revision 960c339 - Sun, 14 Aug 2011 18:50:22 -0400 - Brought back the old 1.7 behavior of a level -1 matching all users and 0 matching all identified users
|
||||
Revision fddb230 - Sun, 14 Aug 2011 17:01:28 -0400 - Bug #1312, fixed loading autoowner from db_plain
|
||||
Revision 1b8dc4d - Sun, 14 Aug 2011 16:34:20 -0400 - Fixed updating exceptions
|
||||
Revision fcc03f4 - Sun, 14 Aug 2011 15:59:14 -0400 - Do not put users hosts in session akills
|
||||
Revision 78b8b30 - Sun, 14 Aug 2011 15:27:20 -0400 - Fixed resolving hosts when connecting to our uplink
|
||||
Revision 91d8cc4 - Sun, 14 Aug 2011 15:25:02 -0400 - Revert "Fixed resolving hosts on connect"
|
||||
Revision 11619be - Sun, 14 Aug 2011 21:21:50 +0200 - Fixed resolving hosts on connect
|
||||
Revision e767ded - Sun, 14 Aug 2011 01:01:38 -0400 - Fixed default settings for log blocks
|
||||
Revision 83a579f - Sat, 13 Aug 2011 23:05:30 -0400 - Fixed number list position when requesting custom lists from akill
|
||||
Revision 244f879 - Sat, 13 Aug 2011 20:00:45 +0200 - Fixed permission check in botserv set
|
||||
Revision 6f0da68 - Sat, 13 Aug 2011 09:43:38 -0400 - Fixed anope_os_core insert statement
|
||||
Revision af43852 - Sat, 13 Aug 2011 09:27:42 -0400 - Fixed /cs saset noexpire syntax
|
||||
Revision ad4c4e4 - Fri, 12 Aug 2011 13:08:53 -0400 - Send replies back to uses after m_ldap_authentication processes
|
||||
Revision ed33a4f - Fri, 12 Aug 2011 12:48:29 -0400 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
|
||||
Revision f3d7d4e - Fri, 12 Aug 2011 12:46:11 -0400 - Track when our clients are introduced or not
|
||||
Revision bd4916e - Fri, 12 Aug 2011 14:54:31 +0200 - Fixed loading/saving XLines in db_plain
|
||||
Revision feee50e - Fri, 12 Aug 2011 03:13:56 -0400 - Allow bot usermodes to be configurable
|
||||
Revision 54710a7 - Fri, 12 Aug 2011 01:51:14 -0400 - Removed the unused ChannelModeBan code
|
||||
Revision d44a1d0 - Thu, 11 Aug 2011 23:10:08 -0400 - Fixed Windows runtime problems
|
||||
Revision c2780e1 - Thu, 11 Aug 2011 22:21:40 +0200 - Added a separate field for last seen realhost to ns_info, shown to services admins only
|
||||
Revision 4e1f54f - Thu, 11 Aug 2011 07:03:20 +0200 - added cs_seen
|
||||
Revision 3755bf5 - Wed, 10 Aug 2011 15:50:45 -0400 - Ignore SIGPIPE
|
||||
Revision 25d422d - Wed, 10 Aug 2011 15:47:02 -0400 - Fixed flags +* and -*
|
||||
Revision 697bc8d - Wed, 10 Aug 2011 05:05:09 -0400 - Added a services.host define to easily change every clients hostname
|
||||
Revision 4bdc982 - Wed, 10 Aug 2011 01:34:14 -0400 - Added two missing files
|
||||
Revision ded98ed - Wed, 10 Aug 2011 01:32:07 -0400 - Fixed windows build
|
||||
Revision 13bcc4e - Wed, 10 Aug 2011 00:28:31 -0400 - Replace the old sigaction for a signal when our Signal destructs
|
||||
Revision ce92c9b - Tue, 9 Aug 2011 22:18:31 -0400 - Remove +P from unregistered channels if persist is set
|
||||
Revision b332fbd - Tue, 9 Aug 2011 18:34:17 -0400 - Fixed parsing TMODE on ratbox
|
||||
Revision eaf4e69 - Tue, 9 Aug 2011 17:07:20 -0400 - Updated Changes
|
||||
Revision 2f67c70 - Tue, 9 Aug 2011 16:38:10 +0200 - fixed the operserv forbid del command
|
||||
Revision 8348392 - Tue, 9 Aug 2011 13:36:33 +0200 - fixed wrong syntax-message for botserv set msg
|
||||
Revision 8116ad9 - Tue, 9 Aug 2011 04:38:35 -0400 - Added forgotten founder checks to cs_access, fixed fantasy replies to come from the right service, and fixed the accessgroup operators to acount for founder/superadmin
|
||||
Revision cb74359 - Tue, 9 Aug 2011 01:56:08 -0400 - Fixed a typo in init.cpp
|
||||
Revision 776583a - Tue, 9 Aug 2011 01:55:34 -0400 - Simiplied a bit of the access system
|
||||
Revision 91c3363 - Tue, 9 Aug 2011 00:06:44 -0400 - Hopefully sort this AccessGroup::HasPriv once and for all
|
||||
Revision b7542fd - Mon, 8 Aug 2011 23:41:03 -0400 - Added a few sanity checks which never really should happen to db-convert
|
||||
Revision 0c860a7 - Mon, 8 Aug 2011 23:32:52 -0400 - Fixed CMakeLists.txt detecting epoll
|
||||
Revision 2d591f7 - Mon, 8 Aug 2011 20:34:27 -0400 - When we split from the uplink send a quit for *all* of our clients not just bots
|
||||
Revision 9cb96f3 - Mon, 8 Aug 2011 06:24:29 +0100 - Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9
|
||||
Revision 286a9ed - Mon, 8 Aug 2011 06:19:35 +0100 - Standardized some of the SyntaxError/Help replies and corrected some syntax in BotServ set
|
||||
Revision c4da496 - Mon, 8 Aug 2011 00:32:09 -0400 - Copy modules to the runtime directory in one big read/write if we can instead of this 1 byte at a time thing, significantly improves startup loading time.
|
||||
Revision ade9239 - Sun, 7 Aug 2011 22:34:16 -0400 - Fixed the pipengines
|
||||
Revision c6741d3 - Sun, 7 Aug 2011 19:04:27 -0400 - Always reset the levels of newly created channels, fixed DetermineLevel matching ACCESS_INVALID levels, and added in a disabled config option for levels
|
||||
Revision 25e3408 - Sun, 7 Aug 2011 17:43:23 -0400 - Fixed generating sid on startup
|
||||
Revision 35588cc - Sun, 7 Aug 2011 16:04:40 -0400 - Made botserv bots with no commands just ignore messages to them, and made bots only tell users to use HELP if they have a HELP command
|
||||
Revision 32bb63f - Sun, 7 Aug 2011 15:56:35 -0400 - Updated tables.sql
|
||||
Revision 27912e1 - Sat, 6 Aug 2011 19:43:06 -0400 - Fixed two of the xop log messages
|
||||
Revision b678aa6 - Sat, 6 Aug 2011 19:41:37 -0400 - Give channel founders +qo by default
|
||||
Revision c3e9fc4 - Sat, 6 Aug 2011 18:33:44 -0400 - Show channel founders their channels in /ns alist
|
||||
Revision 66ab59d - Sat, 6 Aug 2011 18:21:59 -0400 - Fixed loading older access entries
|
||||
Revision deb79e8 - Sat, 6 Aug 2011 18:05:16 -0400 - sed'd a few typos
|
||||
Revision a6dd65f - Sat, 6 Aug 2011 17:33:59 -0400 - Fixed suepradmin
|
||||
Revision 0448e38 - Sat, 6 Aug 2011 16:49:55 -0400 - Document what /os oline does
|
||||
Revision 749de00 - Sat, 6 Aug 2011 04:32:50 -0400 - Update last used times on channels when someone with access uses them
|
||||
Revision 7849667 - Sat, 6 Aug 2011 04:16:10 -0400 - Added a define{} block which can be used to easially rename things
|
||||
Revision e03efde - Sat, 6 Aug 2011 00:31:24 +0100 - Fixed ns_ajoin to check if adding a duplicate channel
|
||||
Revision d6a8d27 - Fri, 5 Aug 2011 16:07:41 +0100 - Fixed an error and typo in CS SET OPNOTICE
|
||||
Revision 5e18a72 - Fri, 5 Aug 2011 06:18:38 -0400 - Mark the new commands/ modules as CORE and fixed a typo in the example.conf
|
||||
Revision e66063e - Fri, 5 Aug 2011 05:35:31 -0400 - Rewrote the example configurations and split them up into seperate files for each pseudo client.
|
||||
Revision 9ec18a3 - Thu, 4 Aug 2011 21:59:01 -0400 - Added a command:permission setting
|
||||
Revision 773a1f3 - Thu, 4 Aug 2011 16:41:36 -0400 - Updated a bit of the TODO
|
||||
Revision b3f4ba0 - Wed, 3 Aug 2011 06:09:27 -0400 - Start the ts6 sid generator off at 00A if none is given
|
||||
Revision 34da226 - Wed, 3 Aug 2011 05:54:03 -0400 - Generate random SIDs for us if one is not specified
|
||||
Revision 16280f4 - Wed, 3 Aug 2011 05:42:41 -0400 - Added operserv/kill and removed version.h from .gitignore
|
||||
Revision 42f954f - Tue, 2 Aug 2011 22:39:14 -0400 - Fixed reintroducing our clients if we disconnect and reconnect to the uplink
|
||||
Revision 09f5591 - Tue, 2 Aug 2011 05:07:59 -0400 - Fixed /cs clone copying channel access, fixed restricted, and fixed some compiler warnings
|
||||
Revision f690cd8 - Tue, 2 Aug 2011 02:02:13 -0400 - Made /ns info default to your account or your nick if no arguments are given
|
||||
Revision d43e1fb - Tue, 2 Aug 2011 01:50:09 -0400 - Added opertype:modes
|
||||
Revision 41b40f6 - Mon, 1 Aug 2011 23:42:20 -0400 - Split /os mode into /os mode and /os umode to make giving permission to just one possible
|
||||
Revision f7adc0b - Mon, 1 Aug 2011 22:37:27 -0400 - Rewrote the access systems and added a flags access system
|
||||
Revision 710c02f - Sun, 31 Jul 2011 19:11:26 +0100 - Fixed bug #1301 - Changed operserv/staff to reflect its renaming to operserv/oper
|
||||
Revision 7f69d2b - Sun, 31 Jul 2011 14:41:59 +0100 - Fixed bug #1300
|
||||
Revision a18e3f3 - Sun, 31 Jul 2011 07:00:27 -0400 - Bugs 1297-1299 and made /os stats work like the help describes it does
|
||||
Revision 63a4201 - Sun, 31 Jul 2011 06:24:24 -0400 - Fixed these ModuleManager::Attach calls once and for all..
|
||||
Revision b751800 - Sun, 31 Jul 2011 06:24:11 -0400 - Fixed os_defcon
|
||||
Revision f321491 - Sun, 31 Jul 2011 04:00:35 -0400 - Fixed error message from being unable to connect
|
||||
Revision 1cb11bb - Sun, 31 Jul 2011 03:22:23 -0400 - Fixed a few small problems, including m_ssl's connect feature sometimes failing for no good reason
|
||||
Revision f29c88b - Fri, 29 Jul 2011 22:50:45 +0100 - Fixed bug #1294, Crash on NS SET HIDE
|
||||
Revision f5e78d7 - Thu, 28 Jul 2011 07:06:08 +0100 - Fixed a typo in the nickserv/auspex oper privilege
|
||||
Revision 25c4985 - Thu, 28 Jul 2011 06:36:29 +0100 - Fixed OS LOGONNEWS
|
||||
Revision cd4f6da - Wed, 27 Jul 2011 19:24:58 -0400 - Bug #1289 - Fixed hooking to delcore event in cs_main
|
||||
Revision 6e032de - Wed, 27 Jul 2011 19:17:21 -0400 - Bug #1288 - Fixed crash on /cs help access
|
||||
Revision e2b47e0 - Wed, 27 Jul 2011 19:06:42 -0400 - Bug #1291 - fixed parsing JOIN on ratbox
|
||||
Revision b32c961 - Wed, 27 Jul 2011 16:54:50 +0100 - Show the description in cs help set instead of the syntax
|
||||
Revision 088337e - Tue, 26 Jul 2011 23:18:54 -0400 - Fixed /os ignore, /os exception del, and a crash in /cs entrymsg
|
||||
Revision e8c00b9 - Tue, 26 Jul 2011 05:44:14 -0400 - A few small fixes
|
||||
Revision 023d4b4 - Sat, 23 Jul 2011 13:22:56 +0100 - Fixed a typo that broke CS SET RESTRICTD and re-added abbreviation for CS SET DESC
|
||||
Revision 87d2f4b - Sat, 23 Jul 2011 13:07:19 +0100 - Fix couple of typos in modules
|
||||
Revision 39ca53c - Sun, 17 Jul 2011 21:58:27 +0100 - Fixed hs_request and corrected a typo(?) in hs activate
|
||||
Revision 46f2f3b - Sun, 17 Jul 2011 13:08:15 +0100 - Fixed some of the extra modules
|
||||
Revision cb56d50 - Sun, 17 Jul 2011 06:08:35 -0400 - Fixed up cs_set_misc and ns_set_misc
|
||||
Revision b19dddb - Sat, 16 Jul 2011 07:03:04 -0400 - Fixed a few of the /cs set syntax messages to reflect the new syntax
|
||||
Revision acceabe - Sat, 16 Jul 2011 06:52:13 -0400 - Bug #1287 - Only check if users should be deopped on syncing channels when the user is on a server that is also syncing.
|
||||
Revision c3993b3 - Thu, 14 Jul 2011 22:37:46 -0400 - Fixed appending !*@* to some access list entries that are valid hosts
|
||||
Revision f277be0 - Thu, 14 Jul 2011 21:40:21 -0400 - Fixed OSOpersOnly & CSOpersOnly
|
||||
Revision 1a2486d - Thu, 14 Jul 2011 20:52:24 -0400 - These .pot files don't need to be under version control
|
||||
Revision a735095 - Thu, 14 Jul 2011 20:00:39 -0400 - Added cs_sync
|
||||
Revision ef75e17 - Thu, 14 Jul 2011 19:11:13 -0400 - Added bs_autoassign
|
||||
Revision 5bf7dee - Thu, 14 Jul 2011 18:29:03 -0400 - Made channel descriptions optional
|
||||
Revision f858164 - Thu, 14 Jul 2011 02:31:12 -0400 - Rewrote how commands are handled within Anope. This allows naming commands and having spaces within command names.
|
||||
Revision 924f684 - Sun, 10 Jul 2011 19:32:10 -0400 - Bug #1283 - Upped the buffer used for messge replies, as some can be really big
|
||||
Revision b5ec57a - Sun, 10 Jul 2011 19:07:45 -0400 - Bug #1285 - Fixed setting -P on channels with only a service bot in it
|
||||
Revision 6d97848 - Sun, 10 Jul 2011 18:27:48 -0400 - Bug #1286 - Dont allow actions to mess up the caps kicker
|
||||
Revision d2832b1 - Thu, 7 Jul 2011 02:23:11 -0400 - Use getrlimit instead of ulimit, fixes freebsd build
|
||||
Revision 1a4fc39 - Wed, 6 Jul 2011 22:06:07 -0400 - Do not send news when a server is syncing
|
||||
Revision 97388ab - Wed, 6 Jul 2011 22:05:01 -0400 - Fixed /hs set and /hs setall not allowing only a host
|
||||
Revision 57ec310 - Wed, 6 Jul 2011 05:20:25 -0400 - Only call send once per write event in dns manager
|
||||
Revision ffd5c04 - Wed, 6 Jul 2011 00:33:25 -0400 - Fixed chanserv/access/modify permission on non-xop channels
|
||||
Revision cc3c2b6 - Tue, 5 Jul 2011 01:39:11 -0400 - Send account data once an account is confirmed
|
||||
Revision c549aa4 - Mon, 4 Jul 2011 22:39:13 -0400 - Bug #1279 - Fixed strftime
|
||||
Revision 714831b - Mon, 4 Jul 2011 22:34:21 -0400 - Bug #1282
|
||||
Revision d6879c4 - Mon, 4 Jul 2011 14:25:13 -0400 - Bug #1280 - Fixed reading some na and bi flags in db_plain
|
||||
Revision 2caf586 - Sun, 3 Jul 2011 00:19:54 -0400 - Clean up some of the dns code, udp is connectionless anyway so this isnt required
|
||||
Revision c585964 - Mon, 27 Jun 2011 19:14:30 -0400 - Fixed the mode manager from complaining about prefixless modes on insp20
|
||||
Revision 936a50d - Mon, 27 Jun 2011 15:35:09 -0400 - Fixed build on older cmake versions
|
||||
Revision 3e98880 - Fri, 24 Jun 2011 03:40:18 -0400 - Fixed mail delay time
|
||||
Revision 821826a - Fri, 24 Jun 2011 02:58:40 -0400 - The other part of #1277
|
||||
Revision 7ec803f - Thu, 23 Jun 2011 15:31:57 -0400 - Bug #1277 - Dont send account data for unconfirmed nicks
|
||||
Revision b1a075b - Thu, 23 Jun 2011 15:10:50 -0400 - Fixed bug #1276 and some other valgrind warnings
|
||||
Revision 3be75cb - Mon, 20 Jun 2011 23:28:25 -0400 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
|
||||
Revision 2667f90 - Mon, 20 Jun 2011 23:25:46 -0400 - Cleaned up some of the logger code which fixes not logging debug logs to files etc when debug is enabled, and some other small things
|
||||
Revision 2601871 - Mon, 20 Jun 2011 23:09:03 -0400 - Fix long-standing issue with the get token functions if the delimiter wasn't found in the string but you wanted the first "token".
|
||||
Revision a3d0ab3 - Mon, 20 Jun 2011 23:00:49 -0400 - Use case insensitive matching when looking up servers by name
|
||||
Revision a1b36ec - Fri, 17 Jun 2011 19:57:43 -0400 - Search all domains for language strings, fixes the mess that we used to use to translate strings in 3rd party modules
|
||||
Revision 48e995d - Fri, 17 Jun 2011 13:34:47 -0400 - Bug #1275 - Don't log absolutely everything sent to operserv, most of its commands already have their own logs
|
||||
Revision df971be - Tue, 14 Jun 2011 18:23:53 -0400 - Fixed a few small things
|
||||
Revision 1cd6587 - Mon, 13 Jun 2011 18:20:22 +0200 - changed some _() to gtl() and updated do_strftime() and duration()
|
||||
Revision 6148ffa - Sun, 12 Jun 2011 06:28:22 +0200 - added a Anope::string::capacity() function
|
||||
Revision 717b4c3 - Thu, 9 Jun 2011 06:16:31 +0200 - small improvement for Timer::SetSecs()
|
||||
Revision 74361be - Tue, 7 Jun 2011 06:16:57 +0200 - added a Timer::SetSecs() function
|
||||
Revision a087e7f - Sun, 5 Jun 2011 18:18:50 -0400 - Fixed clearing bandata
|
||||
Revision 3ad93a3 - Thu, 2 Jun 2011 14:59:34 -0400 - Burst our channels with the uplink when we connect & fixed bug #1274
|
||||
Revision 184b346 - Thu, 2 Jun 2011 12:45:08 -0400 - Place version.h in build/ not include/
|
||||
Revision b2c807d - Mon, 30 May 2011 13:14:33 -0400 - Fixed /ns alist
|
||||
Revision 60548aa - Sun, 29 May 2011 19:05:28 -0400 - Fixed ns_update and db_mysql_live sql queries
|
||||
Revision a45d155 - Mon, 23 May 2011 14:47:14 -0400 - Added an IsServicesOper event
|
||||
Revision 121ae0b - Mon, 23 May 2011 13:32:01 -0400 - Added m_statusupdate
|
||||
Revision 8bf8832 - Mon, 23 May 2011 04:41:51 -0400 - Rewrote the signal handling to use sigaction
|
||||
Revision 4dd7e26 - Sun, 22 May 2011 09:05:21 +0200 - fixed a possible crash on database saving
|
||||
Revision f4329df - Sat, 21 May 2011 15:33:10 -0400 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
|
||||
Revision 98729a6 - Sat, 21 May 2011 15:32:47 -0400 - Bug #1271
|
||||
Revision 742ba97 - Sat, 21 May 2011 15:15:46 +0200 - fixed bug #1272
|
||||
Revision 115f94b - Sat, 21 May 2011 04:57:27 -0400 - Made Anope able to process normally when disconnected from the uplink and not sleep(), enable usage of non-blocking connect() and default all sockets to non blocking mode. Some cleanup to m_ssl and some cleanup to main.cpp.
|
||||
Revision 7e57272 - Thu, 19 May 2011 20:36:39 -0400 - Fixed compile from the earlier merge
|
||||
Revision 13915d8 - Mon, 16 May 2011 04:10:18 -0400 - Modularized os_news
|
||||
Revision 9962fae - Mon, 16 May 2011 04:10:18 -0400 - Calculate nc::channelcount at runtime
|
||||
Revision 9fcbe29 - Mon, 16 May 2011 04:10:18 -0400 - Added os_oper
|
||||
Revision fd4b52e - Mon, 16 May 2011 04:10:18 -0400 - Added os_forbid
|
||||
Revision b59602a - Mon, 16 May 2011 04:10:18 -0400 - Check for a valid server in /operserv noop
|
||||
Revision fd21c36 - Mon, 16 May 2011 04:10:18 -0400 - Fixed some logic fail in ts6_uid_retrieve
|
||||
Revision b999c6c - Mon, 16 May 2011 04:10:15 -0400 - Expand more on m_alias and changed some std::string usage in sockets.cpp to use Anope::string
|
||||
Revision 583954d - Mon, 16 May 2011 04:09:32 -0400 - Use module type to determine what type each module is instead of its location in the configuration file.
|
||||
Revision 8fb1604 - Mon, 16 May 2011 04:09:07 -0400 - Fixed reading empty config values in the multiconfig code, caused by removal of DT_CHARPTR
|
||||
Revision 284af25 - Mon, 16 May 2011 04:09:07 -0400 - Added more useful functions to our LDAP API, allow adding newly registered accounts to LDAP, removed some unnecessary OnPre events and fixed unloading all modules
|
||||
Revision e7887c1 - Mon, 16 May 2011 04:08:47 -0400 - Unmodularized the socket engine because its causing problems and really is unnecessary
|
||||
Revision 076ebaf - Mon, 16 May 2011 04:07:56 -0400 - Moved some global functions to be member functions and misc cleanup
|
||||
Revision 6922bd2 - Mon, 16 May 2011 04:07:30 -0400 - Fixed up the MySQL Query code and finished some command code I forgot earlier
|
||||
Revision 13aa58c - Mon, 16 May 2011 04:06:22 -0400 - Removed DT_CHARPTR from the config reader, its unneeded
|
||||
Revision c8c2315 - Mon, 16 May 2011 04:06:17 -0400 - Moved the core pseudo clients out into their own modules
|
||||
Revision 1782ce2 - Mon, 16 May 2011 04:01:50 -0400 - Use std::map instead of unordered_map
|
||||
Revision b28d374 - Mon, 16 May 2011 04:01:46 -0400 - Branch for 1.9.5
|
||||
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
|
||||
@@ -2687,7 +3165,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 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 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 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
|
||||
|
||||
@@ -1,4 +1 @@
|
||||
Reported Bugs from Bugzilla: http://bugs.anope.org/
|
||||
---------------------------------------------------
|
||||
|
||||
|
||||
For all bug reports / updates please see http://bugs.anope.org
|
||||
|
||||
+209
-140
@@ -1,170 +1,239 @@
|
||||
Orginally pulled from: http://www.inspircd.org/wiki/Coding_Guidelines
|
||||
Yes, I'm aware the formatting of this document is ugly. It'll be fixed when someone cares. Read the wiki page if you want pretty for now.
|
||||
|
||||
---
|
||||
|
||||
|
||||
InspIRCd Coding Guidelines
|
||||
|
||||
The following are a set of guidelines for writing patches to InspIRCd, or for creating modules for distribution with the official package. These
|
||||
guidelines were written a time after InspIRCd development started, and so not all code yet follows these. This will be rectified with time.
|
||||
The following are a set of guidelines for writing patches to InspIRCd, or for
|
||||
creating modules for distribution with the official package. These guidelines
|
||||
were written a time after InspIRCd development started, and so not all code
|
||||
yet follows these. This will be rectified with time.
|
||||
|
||||
|
||||
1. Comments
|
||||
Multi Line
|
||||
Multiple line comments should follow the C-style comment, for example:
|
||||
/*
|
||||
* This is a multiple line comment, huzzah..
|
||||
*/
|
||||
|
||||
Single Line
|
||||
Single line comments should also be in the C style, for example:
|
||||
/* This is a boring one-line comment */
|
||||
* Multi Line
|
||||
Multiple line comments should follow the C-style comment, for example:
|
||||
/*
|
||||
* This is a multiple line comment, huzzah..
|
||||
*/
|
||||
|
||||
Doxygen commenting
|
||||
If you wish your comment to show in doxygen, the comment should be directly above the item you are documenting (a class, function, enum, etc)
|
||||
and the first line should be "/**". For example:
|
||||
/** This is a doxygen multiline comment.
|
||||
* Description of thingymebob here.
|
||||
*/
|
||||
The first line after the "**" is used as the short description of the item (up to the full stop) and everything afterwards as the detailed
|
||||
description.
|
||||
* Single Line
|
||||
Single line comments should also be in the C style, for example:
|
||||
/* This is a boring one-line comment */
|
||||
|
||||
Indentation
|
||||
Tabs. Tabs. ONLY TABS. Use a single tab for each level of indentation, for example:
|
||||
int main()
|
||||
{
|
||||
<tab>if (condition)
|
||||
<tab>{
|
||||
<tab><tab>code
|
||||
<tab>}
|
||||
}
|
||||
* Doxygen commenting
|
||||
If you wish your comment to show in doxygen, the comment should be directly
|
||||
above the item you are documenting (a class, function, enum, etc) and the
|
||||
first line should be "/**". For example:
|
||||
/** This is a doxygen multiline comment.
|
||||
* Description of thingymebob here.
|
||||
*/
|
||||
|
||||
The first line after the "**" is used as the short description of the item
|
||||
(up to the full stop) and everything afterwards as the detailed description.
|
||||
|
||||
|
||||
Separation
|
||||
Always put a space in between a keyword like if/while and the condition, for example:
|
||||
if (foo == bar)
|
||||
NOT
|
||||
if(foo == bar)
|
||||
2. Indentation
|
||||
|
||||
Braces
|
||||
Always put braces opening and closing blocks on separate lines, see the identation example. For example, place braces like this:
|
||||
if (apples == "green")
|
||||
{
|
||||
cout << "Apples are green" << endl;
|
||||
}
|
||||
Tabs. Tabs. ONLY TABS. Use a single tab for each level of indentation,
|
||||
for example:
|
||||
int main()
|
||||
{
|
||||
<tab>if (condition)
|
||||
<tab>{
|
||||
<tab><tab>code
|
||||
<tab>}
|
||||
}
|
||||
|
||||
and not:
|
||||
if (apples == "green") {
|
||||
cout << "Apples are green" << endl;
|
||||
}
|
||||
The one exception to this is if you are declaring a class method which is only one line long, in that case the following is acceptable in most cases:
|
||||
class foo : public bar
|
||||
{
|
||||
foo() { }
|
||||
getrandomfoo() { return rand(); }
|
||||
};
|
||||
|
||||
Templates
|
||||
Where possible, use templates rather than #defines. Avoid use of RTTI.
|
||||
Structs
|
||||
Structs should be declared in the following fashion:
|
||||
struct BodyPartBasket
|
||||
{
|
||||
int arms;
|
||||
int legs;
|
||||
int scrotalsacs;
|
||||
};
|
||||
and not like this:
|
||||
typedef struct
|
||||
{
|
||||
int arms;
|
||||
int legs;
|
||||
int scrotalsacs;
|
||||
} BodyPartBasket;
|
||||
The second way is not required in C++ to be able to do this:
|
||||
BodyPartBasket mybasket;
|
||||
Plus, placing the name at the bottom of the declaration makes readability more difficult (as you have to scroll down to the bottom of the
|
||||
struct to find its name).
|
||||
(where possible, call them classes rather than structs.)
|
||||
3. Separation
|
||||
|
||||
Variable naming
|
||||
Class and struct names should be in camel case with a leading capital letter, for example "MyBagOfBones" and not "my_bag_of_bones" or
|
||||
"mybagofbones". Variable names can be in either camel case with a leading capital letter or alternatively all lower case, so long as the same
|
||||
naming convention is adhered to throughout the class. No classes or variables should be named in capitals unless this makes sense for the
|
||||
name (for example "class DNS"). Constants and enum values should always be completely in CAPITALS and underscores may be used, for example:
|
||||
enum DecayState
|
||||
{
|
||||
DECAYED_MOULDY = 0,
|
||||
DECAYED_SMELLY = 1,
|
||||
DECAYED_MAGGOTS = 2
|
||||
};
|
||||
All value names in an enum should be started with the same text which should be related in some way to the enum's use. For example "DNS_CNAME,
|
||||
DNS_A, DNS_AAAA".
|
||||
Always put a space in between a keyword like if/while and the condition,
|
||||
for example:
|
||||
if (foo == bar)
|
||||
NOT
|
||||
if(foo == bar)
|
||||
|
||||
Use of references
|
||||
Wherever possible, when dealing with any complex class, pass a const reference rather than a copy of the class. For example:
|
||||
MyThingy::MyThingy(const std::string &thingyvalue)
|
||||
{
|
||||
}
|
||||
Of course, if you intended to change the string you can just omit the 'const'.
|
||||
|
||||
Use of char pointers
|
||||
Whenever you use char pointers (char*, char**) try to use const equivalents. This is much safer and avoids ugly and dangerous casts. For example:
|
||||
MyThingy::Thingify(const char* const* wotsits)
|
||||
{
|
||||
}
|
||||
If it is possible without performance loss, consider avoiding char pointers altogether and using std::string instead.
|
||||
4. Braces
|
||||
|
||||
Use of STL
|
||||
For more information on use of STL in InspIRCd, please see the separate STL FAQ.
|
||||
Always put braces opening and closing blocks on separate lines, see the
|
||||
identation example. For example, place braces like this:
|
||||
if (apples == "green")
|
||||
{
|
||||
cout << "Apples are green" << endl;
|
||||
}
|
||||
|
||||
Making copies of data
|
||||
Never ever make a copy of a piece of data unless it is absolutely necessary. For example, don't use strlcpy() to make a copy of the const char* string
|
||||
returned by std::string::c_str(), if the change can be done to the std::string itself. The same goes for unnecessary variable assignments, especially
|
||||
those which assign large classes.
|
||||
and not:
|
||||
if (apples == "green") {
|
||||
cout << "Apples are green" << endl;
|
||||
}
|
||||
|
||||
namespace std
|
||||
Avoid the following:
|
||||
using namespace std;
|
||||
It might take a bit more typing, but things work better if you don't set (then later assume) the namespace -- specify it explicitly when you want to
|
||||
use it.
|
||||
The one exception to this is if you are declaring a class method which is
|
||||
only one line long, in that case the following is acceptable in most cases:
|
||||
class foo : public bar
|
||||
{
|
||||
foo() { }
|
||||
getrandomfoo() { return rand(); }
|
||||
};
|
||||
|
||||
Linefeeds
|
||||
Unix linefeeds only please. We do not like to see our screens covered in ^M. :-)
|
||||
|
||||
Portability
|
||||
Always make sure your code is portable to all supported operating systems, remember of course that as of 1.1.8 this includes windows. Don't write code
|
||||
that only works on windows, or only works on Linux. Test your code on all platforms or ask for help from other developers who have the platforms you
|
||||
want to test on.
|
||||
5. Templates
|
||||
|
||||
new() and delete(), malloc() and free()
|
||||
Apart from the fact that using malloc() and free() is bad practice in C++ code, you must never use malloc() or free() in InspIRCd, within its modules
|
||||
or within the core. This is because if you use malloc() or free() in windows, the memory is claimed from the program's local heap. In windows, each
|
||||
shared object (module, dll) has its own heap, which is protected from other dlls and executables. To get around this issue and allow more posix-like
|
||||
memory access from other dlls in the program (other modules), InspIRCd overrides the operators new and delete to ensure that memory allocated by them
|
||||
comes from the windows global heap. If you use malloc() and free() for this, the ircd will segfault when another module tries to access the memory you
|
||||
have allocated!
|
||||
Where possible, use templates rather than #defines. Avoid use of RTTI.
|
||||
|
||||
strdup()
|
||||
As with malloc(), above, strdup() should be avoided. Where strdup() is absolutely necessary, use strnewdup() which is our strdup() implementation that
|
||||
calls operator new instead of using malloc(). char arrays allocated by strnewdup() should be deleted with operator delete[].
|
||||
|
||||
CoreExport and DllImport
|
||||
Prefix all types you want to import or export to other modules with CoreExport and DllImport macros. These do nothing in POSIX operating systems,
|
||||
however in windows these are expanded to the instructions __declspec(dllimport) and __declspec(dllexport) respectively depending on where they are
|
||||
used and how.
|
||||
6. Structs
|
||||
|
||||
External Dependencies
|
||||
If a module is compiled as standard, or the code is part of the core, you must not use any dependencies that are not available as standard on all
|
||||
supported operating systems beyond libstdc++, libc, and whatever else is currently required to build the core. Modules which use nonstandard
|
||||
dependencies belong in the modules/extra directory.
|
||||
Structs should be declared in the following fashion:
|
||||
struct BodyPartBasket
|
||||
{
|
||||
int arms;
|
||||
int legs;
|
||||
int scrotalsacs;
|
||||
};
|
||||
and not like this:
|
||||
typedef struct
|
||||
{
|
||||
int arms;
|
||||
int legs;
|
||||
int scrotalsacs;
|
||||
} BodyPartBasket;
|
||||
|
||||
Profiling and Performance
|
||||
It is one thing to assume that code performs bad, it is another thing to prove that it actually is. A lot of experienced programmers talk about
|
||||
'premature optimisation', and here is what it means: if you have a piece of code called once on startup that takes 10 seconds instead of one second to
|
||||
run, and a piece of code that takes 0.05 seconds to run when it should take 0.01, and it is called once per second, the second piece of code is the
|
||||
priority.
|
||||
In other words, make sure that what you think is slow, and a performance problem in Insp actually is.
|
||||
To do this, use the callgrind tool from Valgrind (valgrind --tool=cachegrind bin/inspircd -nofork -debug), and kcachegrind (or similar) to view the
|
||||
output files.
|
||||
The second way is not required in C++ to be able to do this:
|
||||
BodyPartBasket mybasket;
|
||||
|
||||
Plus, placing the name at the bottom of the declaration makes readability
|
||||
more difficult (as you have to scroll down to the bottom of the struct to
|
||||
find its name). (where possible, call them classes rather than structs.)
|
||||
|
||||
|
||||
7. Variable naming
|
||||
|
||||
Class and struct names should be in camel case with a leading capital letter,
|
||||
for example "MyBagOfBones" and not "my_bag_of_bones" or "mybagofbones".
|
||||
Variable names can be in either camel case with a leading capital letter or
|
||||
alternatively all lower case, so long as the same naming convention is
|
||||
adhered to throughout the class. No classes or variables should be named in
|
||||
capitals unless this makes sense for the name (for example "class DNS").
|
||||
Constants and enum values should always be completely in CAPITALS and
|
||||
underscores may be used, for example:
|
||||
enum DecayState
|
||||
{
|
||||
DECAYED_MOULDY = 0,
|
||||
DECAYED_SMELLY = 1,
|
||||
DECAYED_MAGGOTS = 2
|
||||
};
|
||||
All value names in an enum should be started with the same text which should
|
||||
be related in some way to the enum's use. For example "DNS_CNAME, DNS_A,
|
||||
DNS_AAAA".
|
||||
|
||||
|
||||
8. Use of references
|
||||
|
||||
Wherever possible, when dealing with any complex class, pass a const reference
|
||||
rather than a copy of the class. For example:
|
||||
MyThingy::MyThingy(const std::string &thingyvalue)
|
||||
{
|
||||
}
|
||||
Of course, if you intended to change the string you can just omit the 'const'.
|
||||
|
||||
|
||||
9. Use of char pointers
|
||||
|
||||
Whenever you use char pointers (char*, char**) try to use const equivalents.
|
||||
This is much safer and avoids ugly and dangerous casts. For example:
|
||||
MyThingy::Thingify(const char* const* wotsits)
|
||||
{
|
||||
}
|
||||
If it is possible without performance loss, consider avoiding char pointers
|
||||
altogether and using std::string instead.
|
||||
|
||||
|
||||
10. Use of STL
|
||||
|
||||
For more information on use of STL in InspIRCd, please see the separate
|
||||
STL FAQ.
|
||||
|
||||
|
||||
11. Making copies of data
|
||||
|
||||
Never ever make a copy of a piece of data unless it is absolutely necessary.
|
||||
For example, don't use strlcpy() to make a copy of the const char* string
|
||||
returned by std::string::c_str(), if the change can be done to the std::string
|
||||
itself. The same goes for unnecessary variable assignments, especially those
|
||||
which assign large classes.
|
||||
|
||||
|
||||
12. namespace std
|
||||
|
||||
Avoid the following:
|
||||
using namespace std;
|
||||
It might take a bit more typing, but things work better if you don't set
|
||||
(then later assume) the namespace -- specify it explicitly when you want to
|
||||
use it.
|
||||
|
||||
|
||||
13. Linefeeds
|
||||
|
||||
Unix linefeeds only please. We do not like to see our screens covered in ^M.
|
||||
|
||||
|
||||
14. Portability
|
||||
|
||||
Always make sure your code is portable to all supported operating systems,
|
||||
remember of course that as of 1.1.8 this includes windows. Don't write code
|
||||
that only works on windows, or only works on Linux. Test your code on all
|
||||
platforms or ask for help from other developers who have the platforms you
|
||||
want to test on.
|
||||
|
||||
* new() and delete(), malloc() and free()
|
||||
Apart from the fact that using malloc() and free() is bad practice in C++
|
||||
code, you must never use malloc() or free() in InspIRCd, within its modules
|
||||
or within the core. This is because if you use malloc() or free() in windows,
|
||||
the memory is claimed from the program's local heap.
|
||||
In windows, each shared object (module, dll) has its own heap, which is
|
||||
protected from other dlls and executables. To get around this issue and
|
||||
allow more posix-like memory access from other dlls in the program (other
|
||||
modules), InspIRCd overrides the operators new and delete to ensure that
|
||||
memory allocated by them comes from the windows global heap. If you use
|
||||
malloc() and free() for this, the ircd will segfault when another module
|
||||
tries to access the memory you have allocated!
|
||||
|
||||
* strdup()
|
||||
As with malloc(), above, strdup() should be avoided. Where strdup() is
|
||||
absolutely necessary, use strnewdup() which is our strdup() implementation
|
||||
that calls operator new instead of using malloc().
|
||||
char arrays allocated by strnewdup() should be deleted with operator delete[].
|
||||
|
||||
* CoreExport and DllImport
|
||||
Prefix all types you want to import or export to other modules with CoreExport
|
||||
and DllImport macros. These do nothing in POSIX operating systems, however
|
||||
in windows these are expanded to the instructions __declspec(dllimport) and
|
||||
__declspec(dllexport) respectively depending on where they are used and how.
|
||||
|
||||
|
||||
15. External Dependencies
|
||||
|
||||
If a module is compiled as standard, or the code is part of the core, you must
|
||||
not use any dependencies that are not available as standard on all supported
|
||||
operating systems beyond libstdc++, libc, and whatever else is currently
|
||||
required to build the core. Modules which use nonstandard dependencies belong
|
||||
in the modules/extra directory.
|
||||
|
||||
|
||||
16. Profiling and Performance
|
||||
|
||||
It is one thing to assume that code performs bad, it is another thing to prove
|
||||
that it actually is. A lot of experienced programmers talk about 'premature
|
||||
optimisation', and here is what it means: if you have a piece of code called
|
||||
once on startup that takes 10 seconds instead of one second to run, and a
|
||||
piece of code that takes 0.05 seconds to run when it should take 0.01, and
|
||||
it is called once per second, the second piece of code is the priority.
|
||||
|
||||
In other words, make sure that what you think is slow, and a performance
|
||||
problem in Insp actually is.
|
||||
To do this, use the callgrind tool from Valgrind (valgrind --tool=cachegrind
|
||||
bin/inspircd -nofork -debug), and kcachegrind (or similar) to view the output
|
||||
files.
|
||||
|
||||
@@ -1,3 +1,42 @@
|
||||
Anope Version 1.9.5
|
||||
--------------------
|
||||
A Extended LDAP support
|
||||
A Added os_oper, os_kill, os_forbid, m_statusupdate, cs_sync, and bs_autoassign
|
||||
A Added a new configuration file format
|
||||
A Added a new commands system
|
||||
A Added a new access system, and cs_flags
|
||||
F Fixed not logging debug logs to file
|
||||
F Fixed the mail delay time
|
||||
F Fixed sending account data for unconfirmed nicks
|
||||
F Fixed poll() engine build on FreeBSD
|
||||
F Fixed really large HELP replies being truncated
|
||||
F Fixed sometimes appending !*@* to valid hosts on access lists
|
||||
F Fixed m_ssl sometimes failing connecting for no reason
|
||||
F Fixed crash in cs_entrymsg
|
||||
F Fixed setting -P on channels with only a botserv bot in it
|
||||
F Fixed modemanager complaining about prefixless modes on InspIRCd
|
||||
|
||||
Anope Version 1.9.4
|
||||
--------------------
|
||||
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
|
||||
|
||||
Anope Version 1.9.3
|
||||
--------------------
|
||||
A Added italics BotServ kicks support
|
||||
|
||||
@@ -1,3 +1,29 @@
|
||||
Anope Version 1.9.5
|
||||
-------------------
|
||||
Don't even try it, get a new config and start over.
|
||||
|
||||
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 **
|
||||
|
||||
+6
-8
@@ -162,7 +162,7 @@ Note: You should also read the README and FAQ files!
|
||||
4) Starting Anope
|
||||
|
||||
Go into the directory where binaries were installed (by default, this is
|
||||
~/services). Type ./services to launch Anope.
|
||||
~/services/bin). Type ./services to launch Anope.
|
||||
|
||||
If there are syntax errors in the configuration file they will be
|
||||
displayed on the screen. Correct them until there are no errors anymore.
|
||||
@@ -180,21 +180,19 @@ Note: You should also read the README and FAQ files!
|
||||
5) Setting up a crontab
|
||||
|
||||
A crontab entry will allow you to check periodically whether Anope is
|
||||
still running, and restart it if not. You'll need to have Anope binaries
|
||||
and data installed in the same directory for this to work without
|
||||
modification.
|
||||
still running, and restart it if not.
|
||||
|
||||
First rename the example.chk script that is in Anope path (by default,
|
||||
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
|
||||
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
|
||||
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/services.chk >/dev/null 2>&1
|
||||
*/5 * * * * /home/ircd/services/data/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,18 +106,10 @@ How To Add IRCd Support
|
||||
|
||||
23) TS6: Does the IRCd support TS6? Use 1 for yes, 0 for no.
|
||||
|
||||
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
|
||||
24) Global TLD Prefix: Prefix used to send global messages, should probably
|
||||
be "$"
|
||||
|
||||
26) Max Modes: The max number of mode changes we can send in one line
|
||||
25) Max Modes: The max number of mode changes we can send in one line
|
||||
|
||||
3) Modes
|
||||
|
||||
@@ -155,12 +147,6 @@ 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
|
||||
@@ -183,74 +169,19 @@ How To Add IRCd Support
|
||||
|
||||
5) CAPAB/PROTOCTL
|
||||
|
||||
Most IRCD send a CAPAB or PROTOCTL line so that they can work out what
|
||||
the other end of the connection is capable of doing. Anope has a function
|
||||
to read these lines and set itself up to to handle these events better.
|
||||
When adding support for your ircd, take the following steps.
|
||||
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:
|
||||
|
||||
1) In the module constructor you must tell Anope what the uplink is capable of that
|
||||
isn't already passed in the CAPAB/PROTOCTL, you do this by something similar to:
|
||||
|
||||
CapabType c[] = { CAPAB_NOQUIT, CAPAB_NICKIP, CAPAB_ZIP, CAPAB_TOKEN, CAPAB_SSJ3, CAPAB_NICK2, CAPAB_VL, CAPAB_TLKEXT, CAPAB_CHANMODE, CAPAB_SJB64, CAPAB_NICKCHARS };
|
||||
for (unsigned i = 0; i < 11; ++i)
|
||||
Capab.SetFlag(c[i]);
|
||||
|
||||
Anything else given to Anope in the CAPAB/PROTOCTL message will be handled later by CapabParse.
|
||||
|
||||
The available CAPAB options are:
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
Define | Description
|
||||
----------------|------------|-----------|--------------------------------
|
||||
----------------|---------------------------------------------------------
|
||||
CAPAB_NOQUIT | NOQUIT protocol support
|
||||
CAPAB_TSMODE | Chanmodes are timestamped
|
||||
CAPAB_UNCONNECT | UNCONNECT protocol support
|
||||
CAPAB_NICKIP | IP sent in the NICK line
|
||||
CAPAB_NSJOIN | Smart SJOIN support
|
||||
CAPAB_ZIP | Support for gzipped links
|
||||
CAPAB_BURST | Supports BURST command
|
||||
CAPAB_TS3 | Support for TS3 protocol
|
||||
CAPAB_TS5 | Support for TS5 protocol
|
||||
CAPAB_DKEY | DH-Key exchange using DKEY
|
||||
CAPAB_DOZIP | Link traffic will be gzipped
|
||||
CAPAB_DODKEY | Do DKEY with this link
|
||||
CAPAB_QS | Supports quit storm removal
|
||||
CAPAB_SCS | String Cache System support
|
||||
CAPAB_PT4 | Support for PT4 protocol
|
||||
CAPAB_UID | Support for UIDs
|
||||
CAPAB_KNOCK | Supports KNOCK
|
||||
CAPAB_CLIENT | Supports CLIENT
|
||||
CAPAB_IPV6 | Support for IPv6 addresses
|
||||
CAPAB_SSJ5 | Smart Join protocol 5 support
|
||||
CAPAB_SN2 | Support for SN2 protocol
|
||||
CAPAB_VHOST | Supports VHOST protocol
|
||||
CAPAB_TOKEN | Supports s2s tokens
|
||||
CAPAB_SSJ3 | Smart Join protocol 3 support
|
||||
CAPAB_NICK2 | Support for extended NICK (v2)
|
||||
CAPAB_UMODE2 | Supports UMODE2 command
|
||||
CAPAB_VL | VLine information in info field
|
||||
CAPAB_TLKEXT | Not 8, but 10 params in TKL's
|
||||
CAPAB_CHANMODE | Channel modes are passed here
|
||||
CAPAB_SJB64 | SJOIN timestamps are base64 encoded
|
||||
CAPAB_NICKCHARS | Character set used by the IRCD for nicks
|
||||
CAPAB_QS | Quitstorm - same as NOQUIT
|
||||
|
||||
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.
|
||||
You can override the default OnCapab method in IRCdMessage if required.
|
||||
|
||||
6) IRCDProto Class
|
||||
|
||||
|
||||
+15
-6
@@ -7,7 +7,7 @@ Anope Mutli Language Support
|
||||
|
||||
1) Building Anope with gettext support
|
||||
|
||||
To build Anope with gettext support gettext and its devlopmental libraries must be installed on the system.
|
||||
To build Anope with gettext support, gettext and its development libraries must be installed on the system.
|
||||
Anope does not require locales to be installed or enabled on the system, but does require the locales-all
|
||||
package on Debian and Debian based systems.
|
||||
|
||||
@@ -27,11 +27,20 @@ Anope Mutli Language Support
|
||||
If you have finished a language file translation and you want others to use it, please send it to team@anope.org
|
||||
(don't forget to mention clearly your (nick)name, your e-mail and the language name). You'll of course get full credit for it.
|
||||
|
||||
NOTE: There is no guarantee we will use your work so please do not be offended if we say no thanks.
|
||||
|
||||
3) Using langages with modules
|
||||
|
||||
Module authors can easially add the ability to have their modules translated by adding _() around the strings they
|
||||
need translated (messages to the user, etc). See a few of the modules in /modules/extras (cs_appendtopic, hs_request)
|
||||
for examples of this. If you want to translate a module someone has made, first generate a .pot file if there is none.
|
||||
Run `xgettext -s -d modulename -o modulename.pot --from-code=utf-8 modulename.cpp`. Then, run msginit on the .pot file
|
||||
with `msginit -l language -o modulename.language.po -i modulename.pot`. Translate the new .po file, then place it in
|
||||
the lang folder and rerun ./Config; make && make install.
|
||||
want translated (messages to the user, etc).
|
||||
|
||||
If you want to translate a module someone has made, first generate a .pot file if there isn't one already using
|
||||
`xgettext -s -d modulename -o modulename.pot --from-code=utf-8 modulename.cpp`.
|
||||
The .pot file is a template of all of the language strings extracted from the source file.
|
||||
|
||||
Next, run msginit on the .pot file with
|
||||
`msginit -l language -o modulename.language.po -i modulename.pot`.
|
||||
Translate the new .po file and rerun ./Config; make && make install.
|
||||
|
||||
All .po and .pot files should be placed in modules/language/third. Additionally an update script is provided there
|
||||
that will create .pot files and merge any changes to it with existing .po files.
|
||||
|
||||
+253
-321
@@ -1,321 +1,253 @@
|
||||
Anope -- a set of IRC services for IRC networks
|
||||
-----------------------------------------------
|
||||
|
||||
Anope is 2003-2010 Anope Team <team@anope.org>.
|
||||
Based on Epona 2000-2002 PegSoft <epona@pegsoft.net>.
|
||||
Based on Services 1996-1999 Andrew Church <achurch@achurch.org>.
|
||||
|
||||
This program is free but copyrighted software; see the file COPYING for
|
||||
details.
|
||||
|
||||
Information about Anope may be found at http://www.anope.org/
|
||||
Information about Epona may be found at http://www.epona.org/
|
||||
Information about Services may be found at http://www.ircservices.esper.net/
|
||||
|
||||
Table of Contents
|
||||
-----------------
|
||||
1) Credits
|
||||
2) Presentation
|
||||
3) Installation
|
||||
4) Command Line Options
|
||||
5) Messages Translation
|
||||
6) Contact and Mailing List
|
||||
|
||||
1) Credits
|
||||
|
||||
Anope is based on Lara's Epona version 1.4.14.
|
||||
Epona is based on Andy Church's IRC Services version 4.3.3.
|
||||
|
||||
The original credits:
|
||||
|
||||
* Mauritz Antunes
|
||||
Portuguese translation
|
||||
* Jose R. Holzmann, Raul S. Villarreal
|
||||
Spanish translation
|
||||
* Andrew Kempe <theshadow@shadowfire.org>
|
||||
News system
|
||||
* <d.duca@eurcom.net>
|
||||
Italian translation
|
||||
* <mikado@holyfire.com>
|
||||
Turkish translation
|
||||
* Andrew Kempe <theshadow@shadowfire.org>
|
||||
Session limiting
|
||||
|
||||
Epona credits:
|
||||
|
||||
* lara <lara@pegsoft.net>
|
||||
Main coding
|
||||
* CafeiN <oytuny@yahoo.com>
|
||||
Turkish translation
|
||||
* Sylvain Cresto aka tost <scresto@netsante.fr>
|
||||
FreeBSD 5 patch
|
||||
* Marcelo Conde Foscarini aka Bras <ircadmin@brmarket.net>
|
||||
Portuguese translation
|
||||
* Alvaro Toledo aka POLLITO <atoledo@keldon.org>
|
||||
Spanish translation
|
||||
* chemical <chemical@musicplay.de>
|
||||
German translation
|
||||
* shine <dh@shinewelt.de>
|
||||
German translation
|
||||
* Guven Guzelbey aka MeShGuL <guzelbey@cs.utk.edu>
|
||||
Turkish translation
|
||||
* Jordi Pujol <jordi.pujol@aujac.org>
|
||||
Catalan translation
|
||||
* Eva Dachs <evadachs@terra.es>
|
||||
Catalan translation
|
||||
* Toni Perez <toni.perez@aujac.org>
|
||||
Catalan translation
|
||||
* Sergios Karalis <sergios_k@hotmail.com>
|
||||
Greek translation
|
||||
* Thomas J. Stensas aka ShadowMaster <shadowmaster@shadow-realm.org>
|
||||
Ultimate 3.x support
|
||||
|
||||
Anope credits:
|
||||
|
||||
* Adam Kramer <ribosome@anope.org>
|
||||
* Adam <adam@anope.org>
|
||||
* Alvaro Toledo <atoledo@keldon.org>
|
||||
* Amanda Folson <amanda@anope.org>
|
||||
* Andrew Berquist <vash@anope.org>
|
||||
* Björn Stiddien <keeper@anope.org>
|
||||
* Charles Kingsley <chaz@anope.org>
|
||||
* Chris Hogben <heinz@anope.org>
|
||||
* Daniel Engel <dane@zero.org>
|
||||
* David <dv@diboo.net>
|
||||
* David Narayan <jester@phrixus.net>
|
||||
* David Robson <rob@anope.org>
|
||||
* Daniele Nicolucci <jollino@sogno.net>
|
||||
* Florian Schulze <certus@anope.org>
|
||||
* Gabriel Acevedo H. <drstein@anope.org>
|
||||
* Jan Milants <viper@anope.org>
|
||||
* Jens Voss <dukepyrolator@anope.org>
|
||||
* JH <jh@irc-chat.net>
|
||||
* Joris Vink <joris@anope.org>
|
||||
* Lucas Nussbaum <lucas@lucas-nussbaum.net>
|
||||
* Mark Summers <mark@goopler.net>
|
||||
* Matthew Beeching <jobe@invictachat.net>
|
||||
* Naram Qashat <cyberbotx@anope.org>
|
||||
* Pieter Bootsma <geniusdex@anope.org>
|
||||
* Robin Burchell <w00t@inspircd.org>
|
||||
* Thomas Juberg Stensås <ShadowMaster@Shadow-Realm.org>
|
||||
* Trystan .S Lee <trystan@nomadirc.net>
|
||||
* openglx <openglx@brasnerd.com.br>
|
||||
|
||||
Anope Translations:
|
||||
|
||||
* GeniusDex <geniusdex@anope.org> (nl.l)
|
||||
* Kein <kein-of@yandex.ru> (ru.l)
|
||||
* Stuff <the.stuff@gmx.de> (de.l)
|
||||
* Gabriel Acevedo H. <drstein@anope.org> (es.l)
|
||||
* Janos Kapitany <sarkanyka@cjbchat.hu> (hun.l)
|
||||
* Szymon S'wierkosz <szymek@adres.pl> (pl.l)
|
||||
|
||||
Anope uses the strlcat() and strlcpy() functions from OpenSSH 2.5.1p2.
|
||||
These functions are copyrighted by Todd C. Miller:
|
||||
|
||||
Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
3. The name of the author may not be used to endorse or promote
|
||||
products derived from this software without specific prior written
|
||||
permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED `AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGE.
|
||||
|
||||
|
||||
2) Presentation
|
||||
|
||||
Anope is a set of Services for IRC networks that allows users to manage
|
||||
their nicks and channels in a secure and efficient way, and administrators
|
||||
to manage their network with powerful tools.
|
||||
|
||||
Currently available services are:
|
||||
|
||||
* NickServ, a powerful nickname manager that users can use to protect
|
||||
themselves against nick stealing. Each user has its own nickname
|
||||
group, that allows the user to register as many nicks as needed
|
||||
while still being able to take profit of his privileges and to
|
||||
modify the nick configuration. NickServ also has an optional
|
||||
password retrieval feature.
|
||||
|
||||
* ChanServ, a powerful channel manager that helps users to administer
|
||||
their channels in a totally customizable way. ChanServ has an
|
||||
internal list of privileged users and banned users that controls
|
||||
accesses on a per-channel basis. It eliminates all takeover
|
||||
problems, because of its powerful op/unban/invite and even mass
|
||||
deop and mass kick functions.
|
||||
|
||||
* MemoServ, an helpful companion that allows sending short messages
|
||||
to offline users, that they can then read when they come online
|
||||
later.
|
||||
|
||||
* BotServ, an original service that allows users to get a permanent,
|
||||
friendly bot on their channels in an easy way. Each bot can be
|
||||
configured to monitor the channels against floods, repetitions,
|
||||
caps writing, and swearing, and to take appropriate actions. It
|
||||
also can handle user-friendly commands (like !op, !deop, !voice,
|
||||
!devoice, !kick, and many others), say a short greet message when
|
||||
an user joins a channel, and even "take over" ChanServ actions such
|
||||
as auto-opping users, saying the entry notice, and so on. This
|
||||
service can be disabled if you want to save some bandwidth.
|
||||
|
||||
* OperServ, the IRCops' and IRC admins' black box, that allows them
|
||||
to manage the list of network bans (also known as AKILL (DALnet) or
|
||||
GLINE (Undernet)), to configure messages displayed to users when
|
||||
they log on, to set modes and to kick users from any channel, to
|
||||
send notices quickly to the entire network, and much more!
|
||||
|
||||
* HostServ, a neat service that allows users to show custom vHosts
|
||||
(virtual hosts) instead of their real IP address; this only works
|
||||
on daemons supporting ip cloaking, such as UnrealIRCd, UltimateIRCd
|
||||
and ViagraIRCd.
|
||||
|
||||
Anope currently works with:
|
||||
|
||||
* Bahamut 1.4.27 or later (including 1.8)
|
||||
* InspIRCd 1.1, 1.2, or 2.0
|
||||
* Ratbox 2.0.6 or later
|
||||
* UnrealIRCd 3.2 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) Installation
|
||||
|
||||
See the INSTALL file for instruction on installing Anope.
|
||||
|
||||
|
||||
4) Command Line Options
|
||||
|
||||
Normally, Anope can be run simply by invoking the "services" executable.
|
||||
Any of the following command-line options can be specified to change
|
||||
the behavior of Anope:
|
||||
|
||||
--debug Enable debugging mode; more info sent to log (give
|
||||
option more times for more info)
|
||||
--readonly Enable read-only mode; no changes to databases
|
||||
allowed
|
||||
--nofork Do not fork after startup; log messages will be
|
||||
written to terminal
|
||||
--noexpire Expiration routines won't be run at all
|
||||
--version Display the version of Anope
|
||||
--nothird Do not load the non-core modules specified
|
||||
--protocoldebug Debug each incoming message after protocol parsing
|
||||
--support Used for support, same as -debug -nofork -nothird
|
||||
|
||||
Upon starting, Anope will parse its command-line parameters then
|
||||
(assuming the -nofork option is not given) detach itself and run in the
|
||||
background. If Anope encounters a problem reading the database files or
|
||||
cannot connect to its uplink server, it will terminate immediately;
|
||||
otherwise, it will run until the connection is terminated (or a QUIT,
|
||||
SHUTDOWN, or RESTART command is sent; see OperServ's help).
|
||||
|
||||
In the case of an error, an appropriate error message will be written to
|
||||
the log file.
|
||||
|
||||
If Anope is run with the "--readonly" command-line option, it can serve as
|
||||
a "backup" to the full version of services. A "full" version of services
|
||||
(run without --readonly) will automatically reintroduce its pseudo-clients
|
||||
(NickServ, ChanServ, etc.), while a "backup" services will not, thus
|
||||
allowing full services to be brought up at any time without disrupting
|
||||
the network (and without having to take backup services down beforehand).
|
||||
|
||||
The "--debug" option is useful if you find or suspect a problem in Anope.
|
||||
Giving it once on the command line will cause all traffic to and from
|
||||
services as well as some other debugging information to be recorded in
|
||||
the log file; if you send a bug report, PLEASE include an excerpt from
|
||||
the log file WITH DEBUGGING ACTIVE; we cannot emphasize enough how
|
||||
important this is to tracking down problems. (You can also enable
|
||||
debugging while Services is running using OperServ's SET DEBUG command.)
|
||||
If you repeat use --debug=<level>, the debugging level will be increased,
|
||||
which provides more detailed information but may also slow Anope down
|
||||
considerably and make the log file grow dramatically faster. In general,
|
||||
a debug level of 1 is sufficient for the coding team to be able to trace
|
||||
a problem, because all network traffic is included and we can usually
|
||||
reproduce the problem.
|
||||
|
||||
5) Messages Translations
|
||||
|
||||
Anope has a powerful option in NickServ allowing users to choose what
|
||||
language it must use when sending messages to users. Messages are stored
|
||||
in language files (located in the lang directory).
|
||||
|
||||
Anope is currently provided with thirteen languages: Catalan, Dutch,
|
||||
English, French, German, Greek, Hungarian, Italian, Polish, Portuguese,
|
||||
Russian, Spanish and Turkish. If you want to translate Anope messages
|
||||
into another language, follow this instructions:
|
||||
|
||||
* Copy the lang/en_us.l file to a meaningful name (for example, if
|
||||
you would like to translate messages in Spanish, you would rename
|
||||
it to es.l).
|
||||
|
||||
* Edit the file with your favorite text editor. Carefully read the
|
||||
instructions given at the top of the file, and start translating
|
||||
the whole file. The file is big, so make sure you have some coffee
|
||||
available ;) Try to avoid the use of English words as much as
|
||||
possible. If the new language contains only a few 'special'
|
||||
characters, try and use latin representations of it, if possible.
|
||||
Remember that most clients are only capable of handling the
|
||||
ISO-8859-1 charset. Of course, if you are translating Anope to a
|
||||
language with a totally different charset, such as Russian, feel
|
||||
free to use the one that suites it best (and the one that is in use
|
||||
by most speakers of that language ;)).
|
||||
|
||||
* When this is done, you have two solutions: either patch Services
|
||||
source code so they take in account the new language file
|
||||
(basically, you'll have to modify lang/Makefile, language.c and
|
||||
maybe services.h), or send us the translated file so we can make
|
||||
the patch and include your language in the next Anope release.
|
||||
|
||||
* Note that there is a language tool on bin/langtool.pl that can aid
|
||||
the verification process on newly created language files. Try to
|
||||
use it before you submit a language file.
|
||||
|
||||
When new major releases come out, you'll not have to retranslate the
|
||||
whole file; the Changes.lang file will help you to know which messages
|
||||
were added, modified or deleted.
|
||||
|
||||
If you did a language file translation, and want to let others use it,
|
||||
please send it to team@anope.org (don't forget to mention clearly your
|
||||
(nick)name, your e-mail and the language name). You'll of course get full
|
||||
credit for it, and will even get future final major releases before
|
||||
anyone else to complete the translation!... ;)
|
||||
|
||||
6) Contact
|
||||
|
||||
For announcements and discussions about Anope, please visit our
|
||||
Portal and Forums at http://www.anope.org/ -- make sure you register
|
||||
yourself and your network to get full benefits.
|
||||
|
||||
If you read the documentation carefully, and didn't find the answer to
|
||||
your question, feel free to post on the website forums or join our irc
|
||||
channel (irc.anope.org #anope). Once you join our Support channel, just
|
||||
type "? report" for instructions on how to report a Bug. Be as precise as
|
||||
possible when asking a question, because we have no extraordinary powers
|
||||
and can't guess things if they aren't provided. The more precise you are,
|
||||
the sooner you'll be likely to get an answer.
|
||||
|
||||
If you think you found a bug, add it to the bug tracking system
|
||||
(http://bugs.anope.org) and - again - be as precise as possible. Also say
|
||||
whether the bug happens always or under what circumstances, and anything
|
||||
that could be useful to track your bug down. If you wrote a patch, send
|
||||
it over. :)
|
||||
Anope -- a set of IRC services for IRC networks
|
||||
-----------------------------------------------
|
||||
|
||||
Anope is 2003-2011 Anope Team <team@anope.org>.
|
||||
Based on Epona 2000-2002 PegSoft <epona@pegsoft.net>.
|
||||
Based on Services 1996-1999 Andrew Church <achurch@achurch.org>.
|
||||
|
||||
This program is free but copyrighted software; see the file COPYING for
|
||||
details.
|
||||
|
||||
Information about Anope may be found at http://www.anope.org/
|
||||
Information about Epona may be found at http://www.epona.org/
|
||||
Information about Services may be found at http://www.ircservices.esper.net/
|
||||
|
||||
Table of Contents
|
||||
-----------------
|
||||
1) Credits
|
||||
2) Presentation
|
||||
3) Installation
|
||||
4) Command Line Options
|
||||
5) Messages Translation
|
||||
6) Contact and Mailing List
|
||||
|
||||
1) Credits
|
||||
|
||||
Anope is based on Lara's Epona version 1.4.14.
|
||||
Epona is based on Andy Church's IRC Services version 4.3.3.
|
||||
|
||||
The original credits:
|
||||
|
||||
* Mauritz Antunes
|
||||
Portuguese translation
|
||||
* Jose R. Holzmann, Raul S. Villarreal
|
||||
Spanish translation
|
||||
* Andrew Kempe <theshadow@shadowfire.org>
|
||||
News system
|
||||
* <d.duca@eurcom.net>
|
||||
Italian translation
|
||||
* <mikado@holyfire.com>
|
||||
Turkish translation
|
||||
* Andrew Kempe <theshadow@shadowfire.org>
|
||||
Session limiting
|
||||
|
||||
Epona credits:
|
||||
|
||||
* lara <lara@pegsoft.net>
|
||||
Main coding
|
||||
* CafeiN <oytuny@yahoo.com>
|
||||
Turkish translation
|
||||
* Sylvain Cresto aka tost <scresto@netsante.fr>
|
||||
FreeBSD 5 patch
|
||||
* Marcelo Conde Foscarini aka Bras <ircadmin@brmarket.net>
|
||||
Portuguese translation
|
||||
* Alvaro Toledo aka POLLITO <atoledo@keldon.org>
|
||||
Spanish translation
|
||||
* chemical <chemical@musicplay.de>
|
||||
German translation
|
||||
* shine <dh@shinewelt.de>
|
||||
German translation
|
||||
* Guven Guzelbey aka MeShGuL <guzelbey@cs.utk.edu>
|
||||
Turkish translation
|
||||
* Jordi Pujol <jordi.pujol@aujac.org>
|
||||
Catalan translation
|
||||
* Eva Dachs <evadachs@terra.es>
|
||||
Catalan translation
|
||||
* Toni Perez <toni.perez@aujac.org>
|
||||
Catalan translation
|
||||
* Sergios Karalis <sergios_k@hotmail.com>
|
||||
Greek translation
|
||||
* Thomas J. Stensas aka ShadowMaster <shadowmaster@shadow-realm.org>
|
||||
Ultimate 3.x support
|
||||
|
||||
Anope credits:
|
||||
|
||||
* Adam Kramer <ribosome@anope.org>
|
||||
* Adam <adam@anope.org>
|
||||
* Alvaro Toledo <atoledo@keldon.org>
|
||||
* Amanda Folson <amanda@anope.org>
|
||||
* Andrew Berquist <vash@anope.org>
|
||||
* Björn Stiddien <keeper@anope.org>
|
||||
* Charles Kingsley <chaz@anope.org>
|
||||
* Chris Hogben <heinz@anope.org>
|
||||
* Daniel Engel <dane@zero.org>
|
||||
* David <dv@diboo.net>
|
||||
* David Narayan <jester@phrixus.net>
|
||||
* David Robson <rob@anope.org>
|
||||
* Daniele Nicolucci <jollino@sogno.net>
|
||||
* Florian Schulze <certus@anope.org>
|
||||
* Gabriel Acevedo H. <drstein@anope.org>
|
||||
* Jan Milants <viper@anope.org>
|
||||
* Jens Voss <dukepyrolator@anope.org>
|
||||
* JH <jh@irc-chat.net>
|
||||
* Joris Vink <joris@anope.org>
|
||||
* Lee Holmes <lethality@anope.org>
|
||||
* Lucas Nussbaum <lucas@lucas-nussbaum.net>
|
||||
* Mark Summers <mark@goopler.net>
|
||||
* Matthew Beeching <jobe@invictachat.net>
|
||||
* Naram Qashat <cyberbotx@anope.org>
|
||||
* Phil Lavin <phil@anope.org>
|
||||
* Pieter Bootsma <geniusdex@anope.org>
|
||||
* Robin Burchell <w00t@inspircd.org>
|
||||
* Sean Roe <therock247uk@anope.org>
|
||||
* Sebastian V <hal9000@anope.org>
|
||||
* Thomas Juberg Stensås <ShadowMaster@Shadow-Realm.org>
|
||||
* Trystan .S Lee <trystan@nomadirc.net>
|
||||
* openglx <openglx@brasnerd.com.br>
|
||||
|
||||
Anope Translations:
|
||||
|
||||
* GeniusDex <geniusdex@anope.org> (nl.l)
|
||||
* Kein <kein-of@yandex.ru> (ru.l)
|
||||
* Maik Funke <Han@mefalcon.org> (de.l)
|
||||
* Gabriel Acevedo H. <drstein@anope.org> (es.l)
|
||||
* Janos Kapitany <sarkanyka@cjbchat.hu> (hun.l)
|
||||
* Szymon S'wierkosz <szymek@adres.pl> (pl.l)
|
||||
* Christopher N. <saka@epiknet.org> (fr.l)
|
||||
* Yusuf Kurekci <ysfm.20@gmail.com> (tr.l)
|
||||
|
||||
2) Presentation
|
||||
|
||||
Anope is a set of Services for IRC networks that allows users to manage
|
||||
their nicks and channels in a secure and efficient way, and administrators
|
||||
to manage their network with powerful tools.
|
||||
|
||||
Currently available services are:
|
||||
|
||||
* NickServ, a powerful nickname manager that users can use to protect
|
||||
themselves against nick stealing. Each user has its own nickname
|
||||
group, that allows the user to register as many nicks as needed
|
||||
while still being able to take profit of his privileges and to
|
||||
modify the nick configuration. NickServ also has an optional
|
||||
password retrieval feature.
|
||||
|
||||
* ChanServ, a powerful channel manager that helps users to administer
|
||||
their channels in a totally customizable way. ChanServ has an
|
||||
internal list of privileged users and banned users that controls
|
||||
accesses on a per-channel basis. It eliminates all takeover
|
||||
problems, because of its powerful op/unban/invite and even mass
|
||||
deop and mass kick functions.
|
||||
|
||||
* MemoServ, an helpful companion that allows sending short messages
|
||||
to offline users, that they can then read when they come online
|
||||
later.
|
||||
|
||||
* BotServ, an original service that allows users to get a permanent,
|
||||
friendly bot on their channels in an easy way. Each bot can be
|
||||
configured to monitor the channels against floods, repetitions,
|
||||
caps writing, and swearing, and to take appropriate actions. It
|
||||
also can handle user-friendly commands (like !op, !deop, !voice,
|
||||
!devoice, !kick, and many others), say a short greet message when
|
||||
an user joins a channel, and even "take over" ChanServ actions such
|
||||
as auto-opping users, saying the entry notice, and so on. This
|
||||
service can be disabled if you want to save some bandwidth.
|
||||
|
||||
* OperServ, the IRCops' and IRC admins' black box, that allows them
|
||||
to manage the list of network bans (also known as AKILL (DALnet) or
|
||||
GLINE (Undernet)), to configure messages displayed to users when
|
||||
they log on, to set modes and to kick users from any channel, to
|
||||
send notices quickly to the entire network, and much more!
|
||||
|
||||
* HostServ, a neat service that allows users to show custom vHosts
|
||||
(virtual hosts) instead of their real IP address; this only works
|
||||
on daemons supporting ip cloaking, such as UnrealIRCd.
|
||||
|
||||
Anope currently works with:
|
||||
|
||||
* Bahamut 1.4.27 or later (including 1.8)
|
||||
* InspIRCd 1.1, 1.2, or 2.0
|
||||
* Ratbox 2.0.6 or later
|
||||
* UnrealIRCd 3.2 or later
|
||||
* Plexus 3 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) Installation
|
||||
|
||||
See the INSTALL file for instruction on installing Anope.
|
||||
|
||||
|
||||
4) Command Line Options
|
||||
|
||||
Normally, Anope can be run simply by invoking the "services" executable.
|
||||
Any of the following command-line options can be specified to change
|
||||
the behavior of Anope:
|
||||
|
||||
--debug Enable debugging mode; more info sent to log (give
|
||||
option more times for more info)
|
||||
--readonly Enable read-only mode; no changes to databases
|
||||
allowed
|
||||
--nofork Do not fork after startup; log messages will be
|
||||
written to terminal
|
||||
--noexpire Expiration routines won't be run at all
|
||||
--version Display the version of Anope
|
||||
--nothird Do not load the non-core modules specified
|
||||
--protocoldebug Debug each incoming message after protocol parsing
|
||||
--support Used for support, same as -debug -nofork -nothird
|
||||
|
||||
Upon starting, Anope will parse its command-line parameters then
|
||||
(assuming the -nofork option is not given) detach itself and run in the
|
||||
background. If Anope encounters a problem reading the database files or
|
||||
cannot connect to its uplink server, it will terminate immediately;
|
||||
otherwise, it will run until the connection is terminated (or a QUIT,
|
||||
SHUTDOWN, or RESTART command is sent; see OperServ's help).
|
||||
|
||||
In the case of an error, an appropriate error message will be written to
|
||||
the log file.
|
||||
|
||||
If Anope is run with the "--readonly" command-line option, it can serve as
|
||||
a "backup" to the full version of services. A "full" version of services
|
||||
(run without --readonly) will automatically reintroduce its pseudo-clients
|
||||
(NickServ, ChanServ, etc.), while a "backup" services will not, thus
|
||||
allowing full services to be brought up at any time without disrupting
|
||||
the network (and without having to take backup services down beforehand).
|
||||
|
||||
The "--debug" option is useful if you find or suspect a problem in Anope.
|
||||
Giving it once on the command line will cause all traffic to and from
|
||||
services as well as some other debugging information to be recorded in
|
||||
the log file; if you send a bug report, PLEASE include an excerpt from
|
||||
the log file WITH DEBUGGING ACTIVE; we cannot emphasize enough how
|
||||
important this is to tracking down problems. (You can also enable
|
||||
debugging while Services is running using OperServ's SET DEBUG command.)
|
||||
If you repeat use --debug=<level>, the debugging level will be increased,
|
||||
which provides more detailed information but may also slow Anope down
|
||||
considerably and make the log file grow dramatically faster. In general,
|
||||
a debug level of 1 is sufficient for the coding team to be able to trace
|
||||
a problem, because all network traffic is included and we can usually
|
||||
reproduce the problem.
|
||||
|
||||
5) Messages Translations
|
||||
|
||||
Please see LANGUAGE for this information
|
||||
|
||||
6) Contact
|
||||
|
||||
For announcements and discussions about Anope, please visit our
|
||||
Portal and Forums at http://www.anope.org/ -- make sure you register
|
||||
yourself to get full benefits.
|
||||
|
||||
If you read the documentation carefully, and didn't find the answer to
|
||||
your question, feel free to post on the website forums or join our irc
|
||||
channel (irc.anope.org #anope). Once you join our Support channel be as
|
||||
precise as possible when asking a question, because we have no extraordinary
|
||||
powers and can't guess things if they aren't provided.
|
||||
|
||||
The more precise you are the sooner you'll be likely to get an answer.
|
||||
|
||||
If you think you found a bug, add it to the bug tracking system
|
||||
(http://bugs.anope.org) and - again - be as precise as possible. Also say
|
||||
whether the bug happens always or under what circumstances, and anything
|
||||
that could be useful to track your bug down. If you wrote a patch, send
|
||||
it over. :)
|
||||
|
||||
@@ -3,56 +3,34 @@ Legend:
|
||||
? = unsure
|
||||
+ = in progress
|
||||
|
||||
1.9.3
|
||||
1.9.5
|
||||
-----
|
||||
[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.
|
||||
[+] More LDAP
|
||||
[x] Rewrite silly forbid system
|
||||
[x] Fix the modules language system to work without needing its own functions..
|
||||
[x] Rewrite commands system
|
||||
[x] Rewrite access system
|
||||
[x] NS INFO: separate field for last seen realhost, shown to SRA only
|
||||
[x] Configurable bot usermodes
|
||||
|
||||
|
||||
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?)
|
||||
[ ] fantasy: allow replies/notifications to fantasy commands to go to the channel via notice
|
||||
[+] CIDR Akills, session exceptions, etc
|
||||
[?] Language charset stuff, including collation (1.9.1? phoenix?)
|
||||
[?] a way for a module to queue itself (or even another module) for unloading
|
||||
[ ] Useful/common "third party" modules to core distro
|
||||
[ ] NS AJOIN
|
||||
[ ] CS ENTRYMSG
|
||||
[+] Useful/common "third party" modules to core distro
|
||||
[x] NS AJOIN
|
||||
[x] 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?)
|
||||
[ ] 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
|
||||
[ ] 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)
|
||||
[ ] No nickname ownership?
|
||||
[ ] More commands need to be split up such as /bs bot, /ms set, /bs kick, /bs set, /os set? etc.
|
||||
[ ] Customize email messages
|
||||
|
||||
+2
-2
@@ -10,10 +10,10 @@ Anope Bundled Tools
|
||||
options. To use the SMTP client instead of sendmail, find the line in your
|
||||
services configuration file (services.conf) that defines sendmailpath. On
|
||||
that line, change the path to your services installation directory, then
|
||||
followed by "tools/anopesmtp" and the IP address of a valid SMTP server. It
|
||||
followed by "bin/anopesmtp" and the IP address of a valid SMTP server. It
|
||||
should look like this:
|
||||
|
||||
sendmailpath = "/home/anope/services/tools/anopesmtp 127.0.0.1"
|
||||
sendmailpath = "/home/anope/services/bin/anopesmtp 127.0.0.1"
|
||||
|
||||
If the SMTP client doesn't send mail, or if there's an other problem with
|
||||
it, you can compile it in debug mode. To do this, open anopesmtp.cpp, and look
|
||||
|
||||
@@ -1,309 +0,0 @@
|
||||
Troubleshooting Guide for Anope 1.9
|
||||
------------------------------------------------
|
||||
|
||||
NOTE:
|
||||
An updated version of this guide can be found on our wiki:
|
||||
|
||||
http://wiki.anope.org/index.php/Troubleshooting
|
||||
|
||||
Table of Contents
|
||||
-----------------
|
||||
|
||||
1) General
|
||||
1.1) Anope complains in the logfile about being unable to load the default
|
||||
language.
|
||||
1.2) Anope spricht kein Deutsch!, etc. (Anope doesn't speak my language!)
|
||||
1.3) I selected a language other than English, but sometimes Anope sends
|
||||
responses in English instead.
|
||||
1.4) Anope always dies after about five minutes, saying "FATAL ERROR! Can't
|
||||
back up nick.db".
|
||||
1.5) Anope crashed with a segmentation fault.
|
||||
1.6) I've found a bug that's not mentioned here or in the README or BUGS
|
||||
files. What should I do?
|
||||
1.7) My FreeBSD box complains about 'Shared object "nss_dns.so.1" not
|
||||
found'
|
||||
1.8) Anope and long (more then 30 character) nicknames.
|
||||
|
||||
2) Installation / Configuration
|
||||
2.1) When I run "make", I get an error message like "missing separator",
|
||||
"Unassociated shell command", "Unexpected end of line seen", etc.
|
||||
2.2) I get an error like "Makefile.inc not found".
|
||||
2.3) I typed "./services" at the command line, but nothing happened!
|
||||
2.4) Whenever I start Anope, I get a message on my IRC server saying
|
||||
"connection refused" or something similar, and Anope gives an error
|
||||
message from the server saying "Closing Link: ...".
|
||||
2.5) My IRC server is giving me messages like "Connection to
|
||||
services.whatever.net[127.0.0.1] activated" and then "Access denied --
|
||||
no N line". Why?
|
||||
2.6) When I say "/connect services.*", it doesn't work!
|
||||
2.7) Anope starts up okay, but if I try to register a nickname, it comes
|
||||
back with "Sorry, registration failed."
|
||||
2.8) Anope reports (via /stats u or /msg OperServ STATS) a different number
|
||||
of users online than I get from doing /lusers.
|
||||
|
||||
3) BotServ
|
||||
3.1) How do I add bots to BotServ?
|
||||
3.2) Why do kick triggers and fantasy commands fail to work with my Bahamut
|
||||
IRCd?
|
||||
|
||||
4) ChanServ
|
||||
4.1) Anope's channel mode setting doesn't work. I can't set modes with
|
||||
OperServ, and every time ChanServ tries to set a mode, my server
|
||||
reverses the change.
|
||||
4.2) Anope ignored the SET SUCCESSOR setting and deleted a channel when the
|
||||
founder expired.
|
||||
4.3) How to auto voice all those whom join my #channel?
|
||||
4.4) Channel options like RESTRICTED or SECUREOPS don't work. What's wrong?
|
||||
|
||||
5) OperServ
|
||||
5.1) Using the OperServ JUPE command results in server messages like
|
||||
"Server juped.server introduced by non-hub server services.my.net".
|
||||
5.2) When I add an AKILL, the users matching it don't get killed.
|
||||
5.3) Trying to use OperServ gives me "Access denied".
|
||||
5.4) I can't get /OS UMODES and /OS SVSNICK to work!
|
||||
5.5) What is a Super-Admin? How does it work? Why might it not work?
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
1) General
|
||||
|
||||
1.1) Anope complains in the logfile about being unable to load the default
|
||||
language.
|
||||
|
||||
You forgot to run "make install".
|
||||
|
||||
1.2) Anope spricht kein Deutsch!, etc. (Anope doesn't speak my language!)
|
||||
|
||||
See section 5 of the README file.
|
||||
|
||||
1.3) I selected a language other than English, but sometimes Anope sends
|
||||
responses in English instead.
|
||||
|
||||
Some language files are not complete--in other words, they only have a
|
||||
translation of some of the message Anope uses. In this case, the
|
||||
missing messages will be displayed in English. You can either wait for
|
||||
the primary translator to provide us with a translation, or do the
|
||||
translation yourself and send us the messages translated into your
|
||||
language.
|
||||
|
||||
1.4) Anope always dies after about five minutes, saying "FATAL ERROR! Can't
|
||||
back up nick.db".
|
||||
|
||||
Make sure that the user Anope runs as has write access to the data
|
||||
directory, and that the data directory actually exists (the latter
|
||||
shouldn't be a problem if you ran the Config script). This means Anope
|
||||
needs write and execute permission on the data directory itself and execute
|
||||
permission on every parent directory of the data directory.
|
||||
|
||||
1.5) Anope crashed with a segmentation fault.
|
||||
|
||||
See if you can reproduce this by doing a certain sequence of things. If
|
||||
so, please report it to us (see part 6 of README file). If not, you're
|
||||
probably out of luck; if you like, you can report it to us anyway, but
|
||||
chances are it won't get fixed if we don't have instructions on reproducing
|
||||
it. If you do have such a problem, you may find the crontab utility useful
|
||||
for dealing with it.
|
||||
|
||||
Also, see the DumpCore directive in the configuration file. It allows Anope
|
||||
to dump its core whenever it's segfaulting, usually calling it core and
|
||||
placing it into Anope's main directory. Open up gdb by issuing the
|
||||
following command at your shell:
|
||||
|
||||
* gdb services core
|
||||
|
||||
(of course replacing 'core' with the name of the core if different) and
|
||||
type 'bt' at the gdb prompt. After that, send us the output you got and
|
||||
keep the core file in a safe place, in case we need it to dig deeper into
|
||||
the problem.
|
||||
|
||||
1.6) I've found a bug that's not mentioned here or in the README or BUGS files.
|
||||
What should I do?
|
||||
|
||||
See section 6 of the README file.
|
||||
|
||||
1.7) My FreeBSD box complains about 'Shared object "nss_dns.so.1" not found'
|
||||
|
||||
We haven't figured out the exact cause yet, but as a quickfix you can
|
||||
delete the /etc/nsswitch.conf file. Please keep in mind that removing a
|
||||
configuration file can be dangerous, so only do this if you know what you
|
||||
are doing.
|
||||
|
||||
1.8) Anope and long (more then 30 character) nicknames.
|
||||
|
||||
By default, Anope only supports nicknames up to 30 characters (NICKLEN=30).
|
||||
If your IRCd allows for longer nicknames or has been modified to do so
|
||||
Anope will start logging a lot of ("NICK from nonexistent nick") messages.
|
||||
This is because once a user uses a nick that is too long for Anope to handle,
|
||||
Anope loses track of the user for the remainder of the session.
|
||||
It is POSSIBLE but not NOT RECOMMENDED to extend the maximum length of nicknames
|
||||
Anope can track, however this will also break database compatibility. DBs saved
|
||||
with Anope set to allow for example 40 chars cannot be read by a clean Anope
|
||||
installation and vice versa. So changing the maximum nick length is only possible
|
||||
when starting with fresh databases and even then the consequences of this are
|
||||
UNTESTED.
|
||||
In order to change the maximum internal nick length, change the NICKMAX setting
|
||||
in include/config.h, recompile anope and start without databases.
|
||||
|
||||
|
||||
2) Installation / Configuration
|
||||
|
||||
2.1) When I run "make", I get an error message like "missing separator",
|
||||
"Unassociated shell command", "Unexpected end of line seen", etc.
|
||||
|
||||
Your make program isn't compatible with the Makefile for Anope. The
|
||||
Makefile was designed to work with GNU make, and as such may not work on
|
||||
other systems' "make" programs. If you get an error from "make", obtain
|
||||
GNU make from ftp://prep.ai.mit.edu/pub/gnu/make/ (or wherever you prefer) and
|
||||
use it instead of your system's default "make". Note that GNU make may
|
||||
already be installed on your system; try using the command "gmake" instead
|
||||
of "make".
|
||||
|
||||
The make programs bundled with SunOS/Solaris and FreeBSD have been reported
|
||||
not to work; you will need to use GNU make on these systems.
|
||||
|
||||
2.2) I get an error like "Makefile.inc not found".
|
||||
|
||||
You forgot to run the Config script first. See the INSTALL file for
|
||||
compilation instructions.
|
||||
|
||||
2.3) I typed "./services" at the command line, but nothing happened!
|
||||
|
||||
Anope puts itself in the background when it starts, so you get your shell
|
||||
prompt right back. Meanwhile, Anope will continue setting up, then connect
|
||||
to the IRC server specified in services.conf (or on the command line). If
|
||||
it doesn't connect, you probably specified the wrong IRCd or RemoteServer in
|
||||
the configuration file. Check to make sure that you are actually running one of
|
||||
the supported IRCds, also. A list of supported IRCds can be found in the README
|
||||
file.
|
||||
|
||||
You can also check the log file (services.log by default) for error
|
||||
messages. Starting services with the -support command line option
|
||||
will prevent it from running in the background will output the
|
||||
messages written to the log file to the console as well. Please note that this
|
||||
will also prevent 3rd party modules from loading and will put Anope into
|
||||
debug mode.
|
||||
|
||||
2.4) Whenever I start Anope, I get a message on my IRC server saying
|
||||
"connection refused" or something similar, and Anope gives an error
|
||||
message from the server saying "Closing Link: ...".
|
||||
|
||||
See section 3 of the INSTALL file.
|
||||
|
||||
2.5) My IRC server is giving me messages like "Connection to
|
||||
services.whatever.net[127.0.0.1] activated" and then "Access denied -- no
|
||||
N line". Why?
|
||||
|
||||
This is typically caused by including a port number in the C:line for
|
||||
services, which tells your server to try to autoconnect to it (depending on
|
||||
the class (Y:line) settings). This is not what you want, because Anope
|
||||
will connect to the server itself, but does not listen for servers to
|
||||
connect to it. The solution is to remove the port number from the C:line.
|
||||
|
||||
2.6) When I say "/connect services.*", it doesn't work!
|
||||
|
||||
You cannot /connect services. When you start Anope, it will attempt to
|
||||
connect to the server you specified in services.conf. Please see the answer
|
||||
above for more information.
|
||||
|
||||
2.7) Anope starts up okay, but if I try to register a nickname, it comes back
|
||||
with "Sorry, registration failed."
|
||||
|
||||
Make sure you've selected the correct IRC server type in the configure
|
||||
script; see section 3 of the INSTALL file for details.
|
||||
|
||||
2.8) Anope reports (via /stats u or /msg OperServ STATS) a different number of
|
||||
users online than I get from doing /lusers.
|
||||
|
||||
Anope doesn't count its own pseudo-clients (NickServ, ChanServ, etc.) in
|
||||
its user count, while the IRC server does.
|
||||
|
||||
3) BotServ
|
||||
|
||||
3.1) How do I add bots to BotServ?
|
||||
|
||||
Read /msg BotServ HELP and /msg BotServ HELP BOT. Note that you need to be
|
||||
opered up and identified as a Services Administrator in Anope before you
|
||||
can use the BOT command.
|
||||
|
||||
3.2) Why do kick triggers and fantasy commands fail to work with my Bahamut
|
||||
IRCd?
|
||||
|
||||
Bahamut allows you to setup a server as 'serviceshub'. This will filter
|
||||
certain data that services usually don't need to process. This option also
|
||||
filters channel messages, because DALnet's services have no use for them.
|
||||
Anope parses the channel messages for kick triggers and fantasy commands.
|
||||
To make sure these work the server type of the hub they're linked to should
|
||||
be simply 'hub' and not 'serviceshub'.
|
||||
|
||||
|
||||
4) ChanServ
|
||||
|
||||
4.1) Anope's channel mode setting doesn't work. I can't set modes with
|
||||
OperServ, and every time ChanServ tries to set a mode, my server reverses
|
||||
the change.
|
||||
|
||||
Make sure EVERY server on your network has a U: line for Services in
|
||||
ircd.conf, for example:
|
||||
|
||||
U:services.whatever.net:*:*
|
||||
|
||||
4.2) Anope ignored the SET SUCCESSOR setting and deleted a channel when the
|
||||
founder expired.
|
||||
|
||||
Normally, this is because the successor had too many channels registered.
|
||||
In this case, you will see an entry in the log file like the following:
|
||||
|
||||
[date] Successor (SuccessorNick) of channel #somechannel owns too many
|
||||
channels, deleting channel #somechannel
|
||||
|
||||
If you don't get a message like this or you can verify that the successor
|
||||
wasn't running into the channel limit, please report it using the
|
||||
bug-reporting procedure in section 6 of the README file.
|
||||
|
||||
4.3) How to auto voice all those whom join my #channel?
|
||||
|
||||
Execute the following commands (/cs is an alias for /msg ChanServ):
|
||||
|
||||
/cs set #channel secure off
|
||||
/cs set #channel xop off
|
||||
/cs levels #channel set AUTOVOICE -1
|
||||
|
||||
4.4) Channel options like RESTRICTED or SECUREOPS don't work. What's wrong?
|
||||
|
||||
Make sure that you didn't put any of your normal IRCd's as a ULined server
|
||||
in Anope. Some access checks for clients from ULined servers are skipped to
|
||||
avoid fights between the ULined servers. This is usually only useful when
|
||||
you have a statistics server connected to your network.
|
||||
|
||||
5) OperServ
|
||||
|
||||
5.1) Using the OperServ JUPE command results in server messages like "Server
|
||||
juped.server introduced by non-hub server services.my.net".
|
||||
|
||||
Services' uplink must have an H: line for Services in the ircd.conf file,
|
||||
which looks something like:
|
||||
|
||||
H:*::services.whatever.net
|
||||
|
||||
5.2) When I add an AKILL, the users matching it don't get killed.
|
||||
|
||||
Use the AkillOnAdd configuration directive.
|
||||
|
||||
5.3) Trying to use OperServ gives me "Access denied".
|
||||
|
||||
Check that you're opered on your IRCd (ie, moded +o)
|
||||
Check that you're identified to a nickname listed within an opertype allowed to do the command you're trying.
|
||||
Check whether you can use /msg operserv staff
|
||||
|
||||
5.4) I can't get /OS UMODES and /OS SVSNICK to work!
|
||||
|
||||
You need to be a SuperAdmin to be able to use these commands.
|
||||
|
||||
5.5) What is a Super-Admin? How does it work? Why might it not work?
|
||||
|
||||
SuperAdmin's have extra privileges, including being founder on all
|
||||
channels. It must be activated on a per user basis and is only available to
|
||||
Services Roots. It is set using OperServ and is not persistent. It only
|
||||
works if SuperAdmin is not commented in the services configuration file,
|
||||
which is commented out by default. Read /msg OperServ HELP SET SUPERADMIN
|
||||
for further help.
|
||||
+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 and MySQL header files and libraries are also included in
|
||||
The OpenSSL, MySQL, and OpenLDAP 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.
|
||||
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
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.
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
<?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));
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
+32
-4
@@ -4,9 +4,10 @@ set_source_files_properties(version.cpp PROPERTIES LANGUAGE CXX COMPILE_FLAGS "$
|
||||
add_executable(version version.cpp)
|
||||
set_target_properties(version PROPERTIES LINKER_LANGUAGE CXX LINK_FLAGS "${LDFLAGS}")
|
||||
get_target_property(version_BINARY version LOCATION)
|
||||
# Modify version.h from the above executable, with dependencies to the given headers, version.cpp, and all source files in the main Anope build
|
||||
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/version.h
|
||||
COMMAND ${version_BINARY} ${Anope_SOURCE_DIR}/src/version.sh ${CMAKE_CURRENT_SOURCE_DIR}/version.h
|
||||
# Modify version.h from the above executable, with dependencies to version.cpp
|
||||
# and all of the source files in the main build
|
||||
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/version_build
|
||||
COMMAND ${version_BINARY} ${Anope_SOURCE_DIR}/src/version.sh ${CMAKE_CURRENT_BINARY_DIR}/version.h
|
||||
DEPENDS version ${SRC_SRCS}
|
||||
)
|
||||
# Add version to list of files for CPack to ignore
|
||||
@@ -16,5 +17,32 @@ 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)
|
||||
add_custom_target(headers DEPENDS version ${CMAKE_CURRENT_BINARY_DIR}/version_build ${PCH_SOURCES_GCH})
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
#ifndef ACCESS_H
|
||||
#define ACCESS_H
|
||||
|
||||
enum ChannelAccess
|
||||
{
|
||||
CA_ACCESS_LIST,
|
||||
CA_NOKICK,
|
||||
CA_FANTASIA,
|
||||
CA_GREET,
|
||||
CA_AUTOVOICE,
|
||||
CA_VOICEME,
|
||||
CA_VOICE,
|
||||
CA_INFO,
|
||||
CA_SAY,
|
||||
CA_AUTOHALFOP,
|
||||
CA_HALFOPME,
|
||||
CA_HALFOP,
|
||||
CA_KICK,
|
||||
CA_SIGNKICK,
|
||||
CA_BAN,
|
||||
CA_TOPIC,
|
||||
CA_MODE,
|
||||
CA_GETKEY,
|
||||
CA_INVITE,
|
||||
CA_UNBAN,
|
||||
CA_AUTOOP,
|
||||
CA_OPDEOPME,
|
||||
CA_OPDEOP,
|
||||
CA_AUTOPROTECT,
|
||||
CA_AKICK,
|
||||
CA_BADWORDS,
|
||||
CA_ASSIGN,
|
||||
CA_MEMO,
|
||||
CA_ACCESS_CHANGE,
|
||||
CA_PROTECTME,
|
||||
CA_PROTECT,
|
||||
CA_SET,
|
||||
CA_AUTOOWNER,
|
||||
CA_OWNERME,
|
||||
CA_OWNER,
|
||||
CA_FOUNDER,
|
||||
CA_SIZE
|
||||
};
|
||||
|
||||
class ChanAccess;
|
||||
|
||||
class CoreExport AccessProvider : public Service
|
||||
{
|
||||
public:
|
||||
AccessProvider(Module *o, const Anope::string &n);
|
||||
virtual ~AccessProvider();
|
||||
virtual ChanAccess *Create() = 0;
|
||||
};
|
||||
|
||||
class CoreExport ChanAccess
|
||||
{
|
||||
public:
|
||||
AccessProvider *provider;
|
||||
ChannelInfo *ci;
|
||||
Anope::string mask;
|
||||
Anope::string creator;
|
||||
time_t last_seen;
|
||||
time_t created;
|
||||
|
||||
ChanAccess(AccessProvider *p);
|
||||
virtual ~ChanAccess();
|
||||
virtual bool Matches(User *u, NickCore *nc) = 0;
|
||||
virtual bool HasPriv(ChannelAccess priv) = 0;
|
||||
virtual Anope::string Serialize() = 0;
|
||||
virtual void Unserialize(const Anope::string &data) = 0;
|
||||
|
||||
bool operator>(ChanAccess &other);
|
||||
bool operator<(ChanAccess &other);
|
||||
bool operator>=(ChanAccess &other);
|
||||
bool operator<=(ChanAccess &other);
|
||||
};
|
||||
|
||||
class CoreExport AccessGroup : public std::vector<ChanAccess *>
|
||||
{
|
||||
public:
|
||||
ChannelInfo *ci;
|
||||
NickCore *nc;
|
||||
bool SuperAdmin, Founder;
|
||||
AccessGroup();
|
||||
bool HasPriv(ChannelAccess priv) const;
|
||||
ChanAccess *Highest() const;
|
||||
bool operator>(const AccessGroup &other) const;
|
||||
bool operator<(const AccessGroup &other) const;
|
||||
bool operator>=(const AccessGroup &other) const;
|
||||
bool operator<=(const AccessGroup &other) const;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
+73
-35
@@ -5,15 +5,12 @@
|
||||
|
||||
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;
|
||||
typedef Anope::insensitive_map<NickAlias *> nickalias_map;
|
||||
typedef Anope::insensitive_map<NickCore *> nickcore_map;
|
||||
|
||||
extern CoreExport nickalias_map NickAliasList;
|
||||
extern CoreExport nickcore_map NickCoreList;
|
||||
extern CoreExport nickrequest_map NickRequestList;
|
||||
|
||||
/* NickServ nickname structures. */
|
||||
|
||||
@@ -23,8 +20,6 @@ enum NickNameFlag
|
||||
{
|
||||
NS_BEGIN,
|
||||
|
||||
/* Nick may not be registered or used */
|
||||
NS_FORBIDDEN,
|
||||
/* Nick never expires */
|
||||
NS_NO_EXPIRE,
|
||||
/* This nick is being held after a kill by an enforcer client
|
||||
@@ -41,6 +36,10 @@ enum NickNameFlag
|
||||
NS_END
|
||||
};
|
||||
|
||||
const Anope::string NickNameFlagStrings[] = {
|
||||
"BEGIN", "NO_EXPIRE", "HELD", "COLLIDED", ""
|
||||
};
|
||||
|
||||
/** Flags set on NickCores
|
||||
*/
|
||||
enum NickCoreFlag
|
||||
@@ -81,23 +80,17 @@ 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
|
||||
};
|
||||
|
||||
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 */
|
||||
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 NickCore;
|
||||
@@ -119,6 +112,7 @@ class CoreExport NickAlias : public Extensible, public Flags<NickNameFlag, NS_EN
|
||||
Anope::string last_quit; /* Last quit message */
|
||||
Anope::string last_realname; /* Last realname */
|
||||
Anope::string last_usermask; /* Last usermask */
|
||||
Anope::string last_realhost; /* Last uncloaked usermask, requires nickserv/auspex to see */
|
||||
time_t time_registered; /* When the nick was registered */
|
||||
time_t last_seen; /* When it was seen online for the last time */
|
||||
NickCore *nc; /* I'm an alias of this */
|
||||
@@ -157,32 +151,21 @@ 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 */
|
||||
|
||||
OperType *ot;
|
||||
Oper *o;
|
||||
|
||||
/* 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
|
||||
@@ -222,11 +205,52 @@ 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
|
||||
*/
|
||||
class NickServCollide : public Timer
|
||||
class CoreExport NickServCollide : public Timer
|
||||
{
|
||||
dynamic_reference<User> u;
|
||||
Anope::string nick;
|
||||
@@ -248,9 +272,23 @@ class NickServCollide : public Timer
|
||||
void Tick(time_t t);
|
||||
};
|
||||
|
||||
/** Timers for removing HELD status from nicks.
|
||||
*/
|
||||
class NickServHeld : public Timer
|
||||
{
|
||||
dynamic_reference<NickAlias> na;
|
||||
Anope::string nick;
|
||||
public:
|
||||
NickServHeld(NickAlias *n, long t);
|
||||
|
||||
~NickServHeld();
|
||||
|
||||
void Tick(time_t);
|
||||
};
|
||||
|
||||
/** Timers for releasing nicks to be available for use
|
||||
*/
|
||||
class NickServRelease : public User, public Timer
|
||||
class CoreExport NickServRelease : public User, public Timer
|
||||
{
|
||||
Anope::string nick;
|
||||
|
||||
|
||||
+81
-22
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* (C) 2003-2010 Anope Team
|
||||
* (C) 2003-2011 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for furhter details.
|
||||
* Please read COPYING and README for further details.
|
||||
*
|
||||
* Based on the original code of Epona by Lara.
|
||||
* Based on the original code of Services by Andy Church.
|
||||
@@ -20,6 +20,9 @@ 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
|
||||
@@ -153,6 +156,17 @@ namespace Anope
|
||||
*/
|
||||
inline size_type length() const { return this->_string.length(); }
|
||||
|
||||
/**
|
||||
* Returns the size of the currently allocated storage space in the string object.
|
||||
* This can be equal or greater than the length of the string.
|
||||
*/
|
||||
inline size_type capacity() const { return this->_string.capacity(); }
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
@@ -165,6 +179,17 @@ namespace Anope
|
||||
inline iterator erase(const iterator &first, const iterator &last) { return this->_string.erase(first, last); }
|
||||
inline void erase(size_type pos = 0, size_type n = std::string::npos) { this->_string.erase(pos, n); }
|
||||
|
||||
/**
|
||||
* Trim leading and trailing white spaces from the string.
|
||||
*/
|
||||
inline void trim()
|
||||
{
|
||||
while (!this->_string.empty() && isspace(this->_string[0]))
|
||||
this->_string.erase(this->_string.begin());
|
||||
while (!this->_string.empty() && isspace(this->_string[this->_string.length() - 1]))
|
||||
this->_string.erase(this->_string.length() - 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears the string.
|
||||
*/
|
||||
@@ -294,8 +319,12 @@ namespace Anope
|
||||
extern CoreExport time_t CurTime;
|
||||
|
||||
extern CoreExport string Version();
|
||||
|
||||
extern CoreExport string Build();
|
||||
extern CoreExport string VersionShort();
|
||||
extern CoreExport string VersionBuildString();
|
||||
extern CoreExport int VersionMajor();
|
||||
extern CoreExport int VersionMinor();
|
||||
extern CoreExport int VersionPatch();
|
||||
extern CoreExport int VersionBuild();
|
||||
|
||||
/** Check whether two strings match.
|
||||
* @param str The string to check against the pattern (e.g. foobar)
|
||||
@@ -304,9 +333,9 @@ namespace Anope
|
||||
*/
|
||||
extern CoreExport bool Match(const Anope::string &str, const Anope::string &mask, bool case_sensitive = false);
|
||||
|
||||
/** Returns a list of pointers to message handlers
|
||||
* @param The message name as sent by the IRCd
|
||||
* @return a vector with pointers to the messagehandlers (you can bind more than one handler to a message)
|
||||
/** Find a message in the message table
|
||||
* @param name The name of the message were looking for
|
||||
* @return NULL if we cant find it, or a pointer to the Message if we can
|
||||
*/
|
||||
extern CoreExport std::vector<Message *> FindMessage(const string &name);
|
||||
|
||||
@@ -323,8 +352,34 @@ namespace Anope
|
||||
*/
|
||||
extern CoreExport void Unhex(const Anope::string &src, Anope::string &dest);
|
||||
extern CoreExport void Unhex(const Anope::string &src, char *dest);
|
||||
|
||||
/** Base 64 encode a string
|
||||
* @param src The string to encode
|
||||
* @param target Where the encoded string is placed
|
||||
*/
|
||||
extern CoreExport void B64Encode(const Anope::string &src, Anope::string &target);
|
||||
|
||||
/** Base 64 decode a string
|
||||
* @param src The base64 encoded string
|
||||
* @param target The plain text result
|
||||
*/
|
||||
extern CoreExport void B64Decode(const Anope::string &src, Anope::string &target);
|
||||
|
||||
/** Return the last error, uses errno/GetLastError() to determin this
|
||||
/** 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 code
|
||||
* @return The error code
|
||||
*/
|
||||
extern CoreExport int LastErrorCode();
|
||||
|
||||
/** Return the last error, uses errno/GetLastError() to determine this
|
||||
* @return An error message
|
||||
*/
|
||||
extern CoreExport const Anope::string LastError();
|
||||
@@ -436,7 +491,7 @@ class dynamic_reference : public dynamic_reference_base
|
||||
this->invalid = false;
|
||||
this->ref = NULL;
|
||||
}
|
||||
else if (ref)
|
||||
else if (this->operator bool())
|
||||
ref->DelReference(this);
|
||||
}
|
||||
|
||||
@@ -447,7 +502,21 @@ class dynamic_reference : public dynamic_reference_base
|
||||
this->invalid = false;
|
||||
this->ref = NULL;
|
||||
}
|
||||
return this->ref;
|
||||
return this->ref != NULL;
|
||||
}
|
||||
|
||||
virtual inline operator T*()
|
||||
{
|
||||
if (this->operator bool())
|
||||
return this->ref;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
virtual inline T *operator->()
|
||||
{
|
||||
if (this->operator bool())
|
||||
return this->ref;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
virtual inline void operator=(T *newref)
|
||||
@@ -457,22 +526,12 @@ class dynamic_reference : public dynamic_reference_base
|
||||
this->invalid = false;
|
||||
this->ref = NULL;
|
||||
}
|
||||
else if (this->ref)
|
||||
else if (this->operator bool())
|
||||
this->ref->DelReference(this);
|
||||
this->ref = newref;
|
||||
if (this->ref)
|
||||
if (this->operator bool())
|
||||
this->ref->AddReference(this);
|
||||
}
|
||||
|
||||
virtual inline T *operator->()
|
||||
{
|
||||
return this->ref;
|
||||
}
|
||||
|
||||
virtual inline T *operator*()
|
||||
{
|
||||
return this->ref;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // ANOPE_H
|
||||
|
||||
+40
-14
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2010 Robin Burchell <w00t@inspircd.org>
|
||||
* Copyright (C) 2008-2010 Anope Team <team@anope.org>
|
||||
* Copyright (C) 2008-2011 Robin Burchell <w00t@inspircd.org>
|
||||
* Copyright (C) 2008-2011 Anope Team <team@anope.org>
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
*/
|
||||
@@ -8,14 +8,11 @@
|
||||
#ifndef BOTS_H
|
||||
#define BOTS_H
|
||||
|
||||
#include "commands.h"
|
||||
|
||||
class BotInfo;
|
||||
|
||||
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;
|
||||
extern CoreExport Anope::insensitive_map<BotInfo *> BotListByNick;
|
||||
extern CoreExport Anope::map<BotInfo *> BotListByUID;
|
||||
typedef Anope::insensitive_map<BotInfo *> botinfo_map;
|
||||
|
||||
/** Flags settable on a bot
|
||||
*/
|
||||
@@ -27,30 +24,40 @@ enum BotFlag
|
||||
BI_CORE,
|
||||
/* This bot can only be assigned by IRCops */
|
||||
BI_PRIVATE,
|
||||
/* This bot is defined in the config */
|
||||
BI_CONF,
|
||||
|
||||
BI_END
|
||||
};
|
||||
|
||||
static const Anope::string BotFlagString[] = { "BEGIN", "CORE", "PRIVATE", "CONF", "" };
|
||||
|
||||
class CoreExport BotInfo : public User, public Flags<BotFlag, BI_END>
|
||||
{
|
||||
public:
|
||||
uint32 chancount;
|
||||
time_t created; /* Birth date ;) */
|
||||
time_t lastmsg; /* Last time we said something */
|
||||
CommandMap Commands; /* Commands on this bot */
|
||||
typedef Anope::insensitive_map<CommandInfo> command_map;
|
||||
command_map commands; /* Commands, actual name to service name */
|
||||
Anope::string botmodes; /* Modes the bot should have as configured in service:modes */
|
||||
bool introduced; /* Whether or not this bot is introduced */
|
||||
|
||||
/** Create a new bot.
|
||||
* @param nick The nickname to assign to the bot.
|
||||
* @param user The ident to give the bot.
|
||||
* @param host The hostname to give the bot.
|
||||
* @param real The realname to give the bot.
|
||||
* @param bmodes The modes to give the bot.
|
||||
*/
|
||||
BotInfo(const Anope::string &nick, const Anope::string &user = "", const Anope::string &host = "", const Anope::string &real = "");
|
||||
BotInfo(const Anope::string &nick, const Anope::string &user = "", const Anope::string &host = "", const Anope::string &real = "", const Anope::string &bmodes = "");
|
||||
|
||||
/** Destroy a bot, clearing up appropriately.
|
||||
*/
|
||||
virtual ~BotInfo();
|
||||
|
||||
void GenerateUID();
|
||||
|
||||
/** Change the nickname for the bot.
|
||||
* @param newnick The nick to change to
|
||||
*/
|
||||
@@ -75,21 +82,40 @@ class CoreExport BotInfo : public User, public Flags<BotFlag, BI_END>
|
||||
|
||||
/** Join this bot to a channel
|
||||
* @param c The channel
|
||||
* @param update_ts Assume we're updating the TS for this channel
|
||||
* @param status The status the bot should have on the channel
|
||||
*/
|
||||
void Join(Channel *c, bool update_ts = false);
|
||||
void Join(Channel *c, ChannelStatus *status = NULL);
|
||||
|
||||
/** Join this bot to a channel
|
||||
* @param chname The channel name
|
||||
* @param update_ts Assume we're updating the TS for this channel
|
||||
* @param status The status the bot should have on the channel
|
||||
*/
|
||||
void Join(const Anope::string &chname, bool update_ts = false);
|
||||
void Join(const Anope::string &chname, ChannelStatus *status = NULL);
|
||||
|
||||
/** Part this bot from a channel
|
||||
* @param c The channel
|
||||
* @param reason The reason we're parting
|
||||
*/
|
||||
void Part(Channel *c, const Anope::string &reason = "");
|
||||
|
||||
/** Called when a user messages this bot
|
||||
* @param u The user
|
||||
* @param message The users' message
|
||||
*/
|
||||
virtual void OnMessage(User *u, const Anope::string &message);
|
||||
|
||||
/** Link a command name to a command in services
|
||||
* @param cname The command name
|
||||
* @param sname The service name
|
||||
* @param permission Permission required to execute the command, if any
|
||||
*/
|
||||
void SetCommand(const Anope::string &cname, const Anope::string &sname, const Anope::string &permission = "");
|
||||
|
||||
/** Get command info for a command
|
||||
* @param cname The command name
|
||||
* @return A struct containing service name and permission
|
||||
*/
|
||||
CommandInfo *GetCommand(const Anope::string &cname);
|
||||
};
|
||||
|
||||
#endif // BOTS_H
|
||||
|
||||
+21
-80
@@ -1,6 +1,6 @@
|
||||
/* Channel support
|
||||
*
|
||||
* (C) 2008-2010 Anope Team
|
||||
* (C) 2008-2011 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
@@ -9,41 +9,12 @@
|
||||
#ifndef CHANNELS_H
|
||||
#define CHANNELS_H
|
||||
|
||||
typedef unordered_map_namespace::unordered_map<Anope::string, Channel *, ci::hash, std::equal_to<ci::string> > channel_map;
|
||||
typedef Anope::insensitive_map<Channel *> channel_map;
|
||||
extern CoreExport channel_map ChannelList;
|
||||
|
||||
struct UserData
|
||||
{
|
||||
UserData()
|
||||
{
|
||||
Clear();
|
||||
}
|
||||
|
||||
virtual ~UserData() { }
|
||||
|
||||
void Clear()
|
||||
{
|
||||
last_use = last_start = Anope::CurTime;
|
||||
lines = times = 0;
|
||||
lastline.clear();
|
||||
}
|
||||
|
||||
/* Data validity */
|
||||
time_t last_use;
|
||||
|
||||
/* for flood kicker */
|
||||
int16 lines;
|
||||
time_t last_start;
|
||||
|
||||
/* for repeat kicker */
|
||||
Anope::string lastline;
|
||||
int16 times;
|
||||
};
|
||||
|
||||
struct UserContainer
|
||||
struct UserContainer : public Extensible
|
||||
{
|
||||
User *user;
|
||||
UserData ud;
|
||||
ChannelStatus *Status;
|
||||
|
||||
UserContainer(User *u) : user(u) { }
|
||||
@@ -52,8 +23,10 @@ struct UserContainer
|
||||
|
||||
typedef std::list<UserContainer *> CUserList;
|
||||
|
||||
enum ChannelFlags
|
||||
enum ChannelFlag
|
||||
{
|
||||
/* ChanServ is currently holding the channel */
|
||||
CH_INHABIT,
|
||||
/* Channel still exists when emptied */
|
||||
CH_PERSIST,
|
||||
/* If set the channel is syncing users (channel was just created) and it should not be deleted */
|
||||
@@ -62,15 +35,16 @@ enum ChannelFlags
|
||||
CH_LOGCHAN
|
||||
};
|
||||
|
||||
class CoreExport Channel : public Extensible, public Flags<ChannelFlags>
|
||||
const Anope::string ChannelFlagString[] = { "CH_INABIT", "CH_PERSIST", "CH_SYNCING", "CH_LOGCHAN", "" };
|
||||
|
||||
class CoreExport Channel : public Extensible, public Flags<ChannelFlag, 3>
|
||||
{
|
||||
public:
|
||||
typedef std::multimap<ChannelModeName, Anope::string> ModeList;
|
||||
private:
|
||||
/** A map of channel modes with their parameters set on this channel
|
||||
*/
|
||||
std::map<ChannelModeName, Anope::string> Params;
|
||||
|
||||
/* Modes set on the channel */
|
||||
Flags<ChannelModeName, CMODE_END * 2> modes;
|
||||
ModeList modes;
|
||||
|
||||
public:
|
||||
/** Default constructor
|
||||
@@ -87,10 +61,6 @@ class CoreExport Channel : public Extensible, public Flags<ChannelFlags>
|
||||
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;
|
||||
|
||||
@@ -98,8 +68,6 @@ class CoreExport Channel : public Extensible, public Flags<ChannelFlags>
|
||||
Anope::string topic_setter; /* Who set the topic */
|
||||
time_t topic_time; /* When the topic was set*/
|
||||
|
||||
std::list<BanData *> bd;
|
||||
|
||||
time_t server_modetime; /* Time of last server MODE */
|
||||
time_t chanserv_modetime; /* Time of last check_modes() */
|
||||
int16 server_modecount; /* Number of server MODEs this second */
|
||||
@@ -146,16 +114,18 @@ class CoreExport Channel : public Extensible, public Flags<ChannelFlags>
|
||||
*/
|
||||
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 true or false
|
||||
* @return The number of modes set
|
||||
* @param param The optional mode param
|
||||
*/
|
||||
bool HasMode(ChannelModeName Name) const;
|
||||
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);
|
||||
|
||||
/** Set a mode internally on a channel, this is not sent out to the IRCd
|
||||
* @param cm The mode
|
||||
@@ -205,30 +175,6 @@ class CoreExport Channel : public Extensible, public Flags<ChannelFlags>
|
||||
*/
|
||||
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
|
||||
@@ -236,11 +182,6 @@ class CoreExport Channel : public Extensible, public Flags<ChannelFlags>
|
||||
*/
|
||||
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
|
||||
|
||||
+68
-60
@@ -1,9 +1,9 @@
|
||||
/* Declarations for command data.
|
||||
*
|
||||
* (C) 2003-2010 Anope Team
|
||||
* (C) 2003-2011 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for furhter details.
|
||||
* Please read COPYING and README for further details.
|
||||
*
|
||||
* Based on the original code of Epona by Lara.
|
||||
* Based on the original code of Services by Andy Church.
|
||||
@@ -18,103 +18,111 @@ class Module;
|
||||
class BotInfo;
|
||||
class Command;
|
||||
|
||||
typedef std::map<Anope::string, Command *, std::less<ci::string> > CommandMap;
|
||||
|
||||
/** The return value from commands.
|
||||
*/
|
||||
enum CommandReturn
|
||||
{
|
||||
MOD_CONT,
|
||||
MOD_STOP
|
||||
};
|
||||
|
||||
extern CoreExport Command *FindCommand(BotInfo *bi, const Anope::string &cmd);
|
||||
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
|
||||
{
|
||||
CFLAG_ALLOW_UNREGISTERED,
|
||||
CFLAG_ALLOW_FORBIDDEN,
|
||||
CFLAG_ALLOW_SUSPENDED,
|
||||
CFLAG_ALLOW_UNREGISTEREDCHANNEL,
|
||||
CFLAG_STRIP_CHANNEL,
|
||||
CFLAG_DISABLE_FANTASY
|
||||
CFLAG_STRIP_CHANNEL
|
||||
};
|
||||
|
||||
const Anope::string CommandFlagStrings[] = {
|
||||
"CFLAG_ALLOW_UNREGISTERED",
|
||||
"CFLAG_STRIP_CHANNEL",
|
||||
""
|
||||
};
|
||||
|
||||
struct CommandInfo
|
||||
{
|
||||
Anope::string name;
|
||||
Anope::string permission;
|
||||
};
|
||||
|
||||
/* The source for a command */
|
||||
struct CoreExport CommandSource
|
||||
{
|
||||
/* User executing the command */
|
||||
User *u;
|
||||
/* Channel the command was executed on (fantasy) */
|
||||
Channel *c;
|
||||
/* 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;
|
||||
/* The actual name of the command being executed */
|
||||
Anope::string command;
|
||||
/* The permission of the command being executed */
|
||||
Anope::string permission;
|
||||
|
||||
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>
|
||||
class CoreExport Command : public Service, public Flags<CommandFlag>
|
||||
{
|
||||
Anope::string desc;
|
||||
std::vector<Anope::string> syntax;
|
||||
|
||||
public:
|
||||
/* Maximum paramaters accepted by this command */
|
||||
size_t MaxParams;
|
||||
/* Minimum parameters required to use this command */
|
||||
size_t MinParams;
|
||||
/* Command name */
|
||||
Anope::string name;
|
||||
/* Permission needed to use this comand */
|
||||
Anope::string permission;
|
||||
|
||||
/* Module which owns us */
|
||||
Module *module;
|
||||
/* Service this command is on */
|
||||
BotInfo *service;
|
||||
|
||||
/** Create a new command.
|
||||
* @param owner The owner of the command
|
||||
* @param sname The command name
|
||||
* @param min_params The minimum number of parameters the parser will require to execute this command
|
||||
* @param max_params The maximum number of parameters the parser will create, after max_params, all will be combined into the last argument.
|
||||
* NOTE: If max_params is not set (default), there is no limit to the max number of params.
|
||||
*/
|
||||
Command(const Anope::string &sname, size_t min_params, size_t max_params = 0, const Anope::string &spermission = "");
|
||||
Command(Module *owner, const Anope::string &sname, size_t min_params, size_t max_params = 0);
|
||||
|
||||
virtual ~Command();
|
||||
|
||||
/** Execute this command.
|
||||
* @param u The user executing the command.
|
||||
protected:
|
||||
void SetDesc(const Anope::string &d);
|
||||
|
||||
void ClearSyntax();
|
||||
void SetSyntax(const Anope::string &s);
|
||||
void SendSyntax(CommandSource &);
|
||||
void SendSyntax(CommandSource &, const Anope::string &syntax);
|
||||
public:
|
||||
/** Get the command description
|
||||
* @return The commands description
|
||||
*/
|
||||
virtual CommandReturn Execute(User *u, const std::vector<Anope::string> &);
|
||||
const Anope::string &GetDesc() const;
|
||||
|
||||
/** Execute this command.
|
||||
* @param source The source
|
||||
* @param params Command parameters
|
||||
*/
|
||||
virtual void Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) = 0;
|
||||
|
||||
/** Called when HELP is requsted for the client this command is on.
|
||||
* @param u The user requesting help
|
||||
* @param source The source
|
||||
*/
|
||||
virtual void OnServHelp(User *u);
|
||||
virtual void OnServHelp(CommandSource &source);
|
||||
|
||||
/** Requested when the user is requesting help on this command. Help on this command should be sent to the user.
|
||||
* @param u The user requesting help
|
||||
* @param source The source
|
||||
* @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(User *u, const Anope::string &subcommand);
|
||||
virtual bool OnHelp(CommandSource &source, const Anope::string &subcommand);
|
||||
|
||||
/** Requested when the user provides bad syntax to this command (not enough params, etc).
|
||||
* @param u The user executing the command.
|
||||
* @param source The source
|
||||
* @param subcommand The subcommand the user tried to use
|
||||
*/
|
||||
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
|
||||
*/
|
||||
void SetPermission(const Anope::string &reststr);
|
||||
|
||||
/** Add a subcommand to this command
|
||||
* @param c The command
|
||||
*/
|
||||
virtual bool AddSubcommand(Command *c);
|
||||
|
||||
/** Delete a subcommand from this command
|
||||
* @param c The command
|
||||
*/
|
||||
virtual bool DelSubcommand(Command *c);
|
||||
|
||||
/** Find a subcommand
|
||||
* @param name The subcommand name
|
||||
* @return The subcommand
|
||||
*/
|
||||
virtual Command *FindSubcommand(const Anope::string &subcommand);
|
||||
virtual void OnSyntaxError(CommandSource &source, const Anope::string &subcommand);
|
||||
};
|
||||
|
||||
#endif // COMMANDS_H
|
||||
|
||||
+123
-310
@@ -33,9 +33,6 @@ enum ConfigDataType
|
||||
DT_INTEGER, // Integer
|
||||
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
|
||||
@@ -44,7 +41,7 @@ enum ConfigDataType
|
||||
DT_TIME, // Time value
|
||||
DT_NORELOAD = 32, // Item can't be reloaded after startup
|
||||
DT_ALLOW_WILD = 64, // Allow wildcards/CIDR in DT_IPADDRESS
|
||||
DT_ALLOW_NEWLINE = 128 // New line characters allowed in DT_CHARPTR
|
||||
DT_ALLOW_NEWLINE = 128 // New line characters allowed in DT_STRING
|
||||
};
|
||||
|
||||
/** Holds a config value, either string, integer or boolean.
|
||||
@@ -53,34 +50,22 @@ enum ConfigDataType
|
||||
* The callback function can then alter the values of the ValueItem
|
||||
* classes to validate the settings.
|
||||
*/
|
||||
class ValueItem
|
||||
class CoreExport ValueItem
|
||||
{
|
||||
private:
|
||||
/** Actual data */
|
||||
Anope::string v;
|
||||
public:
|
||||
/** Initialize with nothing */
|
||||
ValueItem();
|
||||
/** Initialize with an int */
|
||||
ValueItem(int);
|
||||
/** Initialize with a bool */
|
||||
ValueItem(bool);
|
||||
/** Initialize with a char pointer */
|
||||
ValueItem(const char *);
|
||||
/** Initialize with an std::string */
|
||||
ValueItem(const std::string &);
|
||||
/** Initialize with a ci::string */
|
||||
ValueItem(const ci::string &);
|
||||
/** Initialize with an Anope::string */
|
||||
ValueItem(const Anope::string &);
|
||||
/** Initialize with a long */
|
||||
ValueItem(long);
|
||||
/** Change value to a char pointer */
|
||||
//void Set(char *);
|
||||
/** Change value to a const char pointer */
|
||||
void Set(const char *);
|
||||
/** Change value to an std::string */
|
||||
void Set(const std::string &);
|
||||
/** Change value to a ci::string */
|
||||
void Set(const ci::string &);
|
||||
/** Change value to an Anope::string */
|
||||
void Set(const Anope::string &);
|
||||
/** Change value to an int */
|
||||
@@ -89,11 +74,7 @@ class ValueItem
|
||||
int GetInteger() const;
|
||||
/** Get value as a string */
|
||||
const char *GetString() const;
|
||||
/** 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 */
|
||||
/** Get value as an Anope::string */
|
||||
inline const Anope::string &GetValue() const { return v; }
|
||||
/** Get value as a bool */
|
||||
bool GetBool() const;
|
||||
@@ -143,112 +124,6 @@ template<typename T> class ValueContainer : public ValueContainerBase
|
||||
}
|
||||
};
|
||||
|
||||
/** This a specific version of ValueContainer to handle character arrays specially
|
||||
*/
|
||||
template<> class ValueContainer<char **> : public ValueContainerBase
|
||||
{
|
||||
private:
|
||||
/** Contained item */
|
||||
char **val;
|
||||
public:
|
||||
/** Initialize with nothing */
|
||||
ValueContainer() : ValueContainerBase(), val(NULL) { }
|
||||
/** Initialize with a value of type T */
|
||||
ValueContainer(char **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 type T of size s */
|
||||
void Set(const char *newval, size_t s)
|
||||
{
|
||||
if (*val)
|
||||
delete [] *val;
|
||||
if (!*newval)
|
||||
{
|
||||
*val = NULL;
|
||||
return;
|
||||
}
|
||||
*val = new char[s];
|
||||
strlcpy(*val, newval, s);
|
||||
}
|
||||
};
|
||||
|
||||
/** 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
|
||||
@@ -268,16 +143,7 @@ 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)
|
||||
{
|
||||
@@ -304,11 +170,6 @@ typedef ValueContainer<unsigned *> ValueContainerUInt;
|
||||
*/
|
||||
typedef ValueContainer<long unsigned *> ValueContainerLUInt;
|
||||
|
||||
/** A specialization of ValueContainer to hold a pointer to
|
||||
* a char array.
|
||||
*/
|
||||
typedef ValueContainer<char **> ValueContainerChar;
|
||||
|
||||
/** A specialization of ValueContainer to hold a pointer to
|
||||
* an int
|
||||
*/
|
||||
@@ -319,16 +180,6 @@ 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
|
||||
*/
|
||||
@@ -348,43 +199,88 @@ typedef bool (*MultiValidator)(ServerConfig *, const Anope::string &, const Anop
|
||||
*/
|
||||
typedef bool (*MultiNotify)(ServerConfig *, const Anope::string &);
|
||||
|
||||
/** Holds a core configuration item and its callbacks
|
||||
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 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
|
||||
*/
|
||||
struct InitialConfig
|
||||
class ConfigurationFile
|
||||
{
|
||||
/** 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;
|
||||
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();
|
||||
};
|
||||
|
||||
/** Holds a core configuration item and its callbacks
|
||||
* where there may be more than one item
|
||||
/** Holds all of the core configuration items
|
||||
*/
|
||||
struct MultiConfig
|
||||
class CoreExport 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;
|
||||
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();
|
||||
};
|
||||
|
||||
/** This class holds the bulk of the runtime configuration for Anope.
|
||||
@@ -398,8 +294,6 @@ 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.
|
||||
*/
|
||||
@@ -407,15 +301,16 @@ 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 'filename' into 'target', with the new config parser everything is parsed into
|
||||
/** Load the configuration file into 'this'. With the new config parser everything is parsed into
|
||||
* tag/key/value at load-time rather than at read-value time.
|
||||
*/
|
||||
bool LoadConf(ConfigDataHash &, const Anope::string &);
|
||||
void LoadConf(ConfigurationFile &file);
|
||||
// Both these return true if the value existed or false otherwise
|
||||
/** Writes 'length' chars into 'result' as a string
|
||||
*/
|
||||
@@ -447,22 +342,15 @@ class CoreExport ServerConfig
|
||||
|
||||
/** Below here is a list of variables which contain the config files values
|
||||
*/
|
||||
/* IRCd module in use */
|
||||
Anope::string IRCDModule;
|
||||
|
||||
/* Host to connect to **/
|
||||
/* Host to bind to */
|
||||
Anope::string LocalHost;
|
||||
/* List of uplink servers to try and connect to */
|
||||
std::list<Uplink *> Uplinks;
|
||||
std::vector<Uplink *> Uplinks;
|
||||
|
||||
/* Our server name */
|
||||
Anope::string ServerName;
|
||||
/* Our servers description */
|
||||
Anope::string ServerDesc;
|
||||
/* The username/ident of services clients */
|
||||
Anope::string ServiceUser;
|
||||
/* The hostname if services clients */
|
||||
Anope::string ServiceHost;
|
||||
|
||||
/* Name of the network were on */
|
||||
Anope::string NetworkName;
|
||||
@@ -476,41 +364,19 @@ class CoreExport ServerConfig
|
||||
/* Max length of passwords */
|
||||
unsigned PassLen;
|
||||
|
||||
/* NickServ Name */
|
||||
Anope::string s_NickServ;
|
||||
/* ChanServ Name */
|
||||
Anope::string s_ChanServ;
|
||||
/* MemoServ Name */
|
||||
Anope::string s_MemoServ;
|
||||
/* BotServ Name */
|
||||
Anope::string s_BotServ;
|
||||
/* OperServ name */
|
||||
Anope::string s_OperServ;
|
||||
/* Global name */
|
||||
Anope::string s_GlobalNoticer;
|
||||
/* NickServs realname */
|
||||
Anope::string desc_NickServ;
|
||||
/* ChanServ realname */
|
||||
Anope::string desc_ChanServ;
|
||||
/* MemoServ realname */
|
||||
Anope::string desc_MemoServ;
|
||||
/* BotServ realname */
|
||||
Anope::string desc_BotServ;
|
||||
/* OperServ realname */
|
||||
Anope::string desc_OperServ;
|
||||
/* Global realname */
|
||||
Anope::string desc_GlobalNoticer;
|
||||
|
||||
/* HostServ Name */
|
||||
Anope::string s_HostServ;
|
||||
/* HostServ realname */
|
||||
Anope::string desc_HostServ;
|
||||
|
||||
/* Filename for the PID file */
|
||||
Anope::string PIDFilename;
|
||||
/* MOTD filename */
|
||||
Anope::string MOTDFilename;
|
||||
|
||||
Anope::string BotServ;
|
||||
Anope::string ChanServ;
|
||||
Anope::string Global;
|
||||
Anope::string HostServ;
|
||||
Anope::string NickServ;
|
||||
Anope::string OperServ;
|
||||
Anope::string MemoServ;
|
||||
|
||||
/* True if its ok to not be able to save backs */
|
||||
bool NoBackupOkay;
|
||||
/* Do password checking when new people register */
|
||||
@@ -537,6 +403,9 @@ 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;
|
||||
@@ -544,12 +413,12 @@ 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 */
|
||||
std::vector<ChannelModeStatus *> BotModeList;
|
||||
/* How many times to try and reconnect to the uplink before giving up */
|
||||
unsigned MaxRetries;
|
||||
ChannelStatus BotModeList;
|
||||
/* How long to wait between connection attempts */
|
||||
int RetryWait;
|
||||
/* If services should hide unprivileged commands */
|
||||
@@ -593,12 +462,16 @@ class CoreExport ServerConfig
|
||||
time_t NSRegDelay;
|
||||
/* Time before the registering mail will be resent */
|
||||
time_t NSResendDelay;
|
||||
/* How long before nicks expir */
|
||||
/* How long before nicks expire */
|
||||
time_t NSExpire;
|
||||
/* Time before NickRequests expire */
|
||||
time_t NSRExpire;
|
||||
/* How long before suspended nicks expire */
|
||||
time_t NSSuspendExpire;
|
||||
/* Time before unconfirmed nicks expire */
|
||||
time_t NSUnconfirmedExpire;
|
||||
/* 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 */
|
||||
@@ -609,8 +482,6 @@ class CoreExport ServerConfig
|
||||
Anope::string NSEnforcerHost;
|
||||
/* How long before recovered nicks are released */
|
||||
time_t NSReleaseTimeout;
|
||||
/* /nickserv list is oper only */
|
||||
bool NSListOpersOnly;
|
||||
/* Max number of entries that can be returned from the list command */
|
||||
unsigned NSListMax;
|
||||
/* Only allow usermode +a etc on real services admins */
|
||||
@@ -619,17 +490,27 @@ class CoreExport ServerConfig
|
||||
bool NSStrictPrivileges;
|
||||
/* Use email to verify new users registering */
|
||||
bool NSEmailReg;
|
||||
/* Core NickServ modules */
|
||||
Anope::string NickCoreModules;
|
||||
/* Set the proper channel modes on users when they identify */
|
||||
bool NSModeOnID;
|
||||
/* Add the users hostnask their access list when they register */
|
||||
bool NSAddAccessOnReg;
|
||||
/* Maximum number of channels on AJoin */
|
||||
unsigned AJoinMax;
|
||||
|
||||
/* Core ChanServ modules */
|
||||
Anope::string ChanCoreModules;
|
||||
/* Default flags for newly registered channels */
|
||||
Flags<ChannelInfoFlag, CI_END> CSDefFlags;
|
||||
/* Max number of channels a user can own */
|
||||
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 */
|
||||
@@ -640,8 +521,6 @@ class CoreExport ServerConfig
|
||||
Anope::string CSAutokickReason;
|
||||
/* Time ChanServ should stay in the channel to hold it to keep users from getting in */
|
||||
time_t CSInhabit;
|
||||
/* ChanServ's LIST command is oper only */
|
||||
bool CSListOpersOnly;
|
||||
/* Max number of entries allowed to be returned from the LIST command */
|
||||
unsigned CSListMax;
|
||||
/* true to make ChanServ oper only */
|
||||
@@ -656,7 +535,9 @@ class CoreExport ServerConfig
|
||||
/* Who can use memos reciepts */
|
||||
unsigned MSMemoReceipt;
|
||||
|
||||
/* Defai;t BotServ flags */
|
||||
/* Core BotServ modules */
|
||||
Anope::string BotCoreModules;
|
||||
/* Default BotServ flags */
|
||||
Flags<BotServFlag> BSDefFlags;
|
||||
/* How long before botserv forgets a user. This is used for flood kickers etc */
|
||||
time_t BSKeepData;
|
||||
@@ -707,26 +588,6 @@ 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 */
|
||||
@@ -737,14 +598,6 @@ 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;
|
||||
|
||||
@@ -769,46 +622,6 @@ class CoreExport ServerConfig
|
||||
|
||||
/* List of modules to autoload */
|
||||
std::list<Anope::string> ModulesAutoLoad;
|
||||
/* Encryption modules */
|
||||
std::list<Anope::string> EncModuleList;
|
||||
/* Database modules */
|
||||
std::list<Anope::string> DBModuleList;
|
||||
/* HostServ Core Modules */
|
||||
std::list<Anope::string> HostServCoreModules;
|
||||
/* MemoServ Core Modules */
|
||||
std::list<Anope::string> MemoServCoreModules;
|
||||
/* BotServ Core Modules */
|
||||
std::list<Anope::string> BotServCoreModules;
|
||||
/* OperServ Core Modules */
|
||||
std::list<Anope::string> OperServCoreModules;
|
||||
/* NickServ Core Modules */
|
||||
std::list<Anope::string> NickServCoreModules;
|
||||
/* ChanServ Core Modules */
|
||||
std::list<Anope::string> ChanServCoreModules;
|
||||
|
||||
/* Default defcon level */
|
||||
int DefConLevel;
|
||||
/* Timeout before defcon is reset */
|
||||
time_t DefConTimeOut;
|
||||
/* Session limiit to use when using defcon */
|
||||
unsigned DefConSessionLimit;
|
||||
/* How long to add akills for defcon */
|
||||
time_t DefConAKILL;
|
||||
/* Chan modes for defcon */
|
||||
Anope::string DefConChanModes;
|
||||
/* Should we global on defcon */
|
||||
bool GlobalOnDefcon;
|
||||
/* Should we send DefconMessage aswell? */
|
||||
bool GlobalOnDefconMore;
|
||||
/* Message to send when defcon is off */
|
||||
Anope::string DefConOffMessage;
|
||||
/* Message to send when defcon is on*/
|
||||
Anope::string DefconMessage;
|
||||
/* Reason to akill clients for defcon */
|
||||
Anope::string DefConAkillReason;
|
||||
|
||||
/* The socket engine in use */
|
||||
Anope::string SocketEngine;
|
||||
|
||||
/* User keys to use for generating random hashes for pass codes etc */
|
||||
unsigned long UserKey1;
|
||||
@@ -823,7 +636,7 @@ class CoreExport ServerConfig
|
||||
/* List of available opertypes */
|
||||
std::list<OperType *> MyOperTypes;
|
||||
/* List of pairs of opers and their opertype from the config */
|
||||
std::list<std::pair<Anope::string, Anope::string> > Opers;
|
||||
std::vector<Oper *> Opers;
|
||||
};
|
||||
|
||||
/** This class can be used on its own to represent an exception, or derived to represent a module-specific exception.
|
||||
@@ -871,7 +684,7 @@ class CoreExport ConfigReader
|
||||
long error;
|
||||
public:
|
||||
/** Default constructor.
|
||||
* This constructor initialises the ConfigReader class to read services.conf.
|
||||
* This constructor initialises the ConfigReader class to read the configuration file(s).
|
||||
*/
|
||||
ConfigReader();
|
||||
/** Overloaded constructor.
|
||||
|
||||
+16
-22
@@ -113,7 +113,7 @@ struct DNSPacket
|
||||
inline void FillBuffer(unsigned char *buffer);
|
||||
};
|
||||
|
||||
struct DNSRecord
|
||||
struct CoreExport DNSRecord
|
||||
{
|
||||
/* Name of the initial lookup */
|
||||
Anope::string name;
|
||||
@@ -130,50 +130,44 @@ struct DNSRecord
|
||||
/* Record length */
|
||||
unsigned short rdlength;
|
||||
|
||||
inline DNSRecord(const Anope::string &n);
|
||||
/* When this record was created in our cache */
|
||||
time_t created;
|
||||
};
|
||||
|
||||
/** The socket used to talk to the nameserver, uses UDP
|
||||
*/
|
||||
class DNSSocket : public ConnectionSocket
|
||||
{
|
||||
private:
|
||||
int SendTo(const unsigned char *buf, size_t len) const;
|
||||
int RecvFrom(char *buf, size_t size, sockaddrs &addrs) const;
|
||||
|
||||
public:
|
||||
DNSSocket();
|
||||
virtual ~DNSSocket();
|
||||
|
||||
bool ProcessRead();
|
||||
|
||||
bool ProcessWrite();
|
||||
inline DNSRecord(const Anope::string &n);
|
||||
operator bool() const;
|
||||
};
|
||||
|
||||
/** DNS manager, manages the connection and all requests
|
||||
*/
|
||||
class DNSManager : public Timer
|
||||
class CoreExport DNSManager : public Timer, public Socket
|
||||
{
|
||||
std::multimap<Anope::string, DNSRecord *> cache;
|
||||
sockaddrs addrs;
|
||||
public:
|
||||
DNSSocket *sock;
|
||||
|
||||
std::deque<DNSPacket *> packets;
|
||||
std::map<short, DNSRequest *> requests;
|
||||
|
||||
static const int DNSPort = 53;
|
||||
|
||||
DNSManager();
|
||||
DNSManager(const Anope::string &nameserver, int port);
|
||||
|
||||
~DNSManager();
|
||||
|
||||
bool ProcessRead();
|
||||
|
||||
bool ProcessWrite();
|
||||
|
||||
void AddCache(DNSRecord *rr);
|
||||
bool CheckCache(DNSRequest *request);
|
||||
void Tick(time_t now);
|
||||
|
||||
void Cleanup(Module *mod);
|
||||
|
||||
/** Does a BLOCKING DNS query and returns the first IP.
|
||||
* Only use this if you know what you are doing. Unless you specifically
|
||||
* need a blocking query use the DNSRequest system
|
||||
*/
|
||||
static DNSRecord BlockingQuery(const Anope::string &mask, QueryType qt);
|
||||
};
|
||||
|
||||
/** A DNS timeout, one is made for every DNS request to detect timeouts
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2010 Anope Team <team@anope.org>
|
||||
* Copyright (C) 2008-2011 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() const { return Item; }
|
||||
T &GetItem() { 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() const { return Item; }
|
||||
T *GetItem() { 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() const { return Item; }
|
||||
T *GetItem() { 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 ExtensibleItemRegular<char *>(NULL));
|
||||
this->Extend(key, new ExtensibleItemPointer<char *>(NULL));
|
||||
}
|
||||
|
||||
/** Shrink an Extensible class.
|
||||
|
||||
+48
-203
@@ -1,9 +1,9 @@
|
||||
/* Prototypes and external variable declarations.
|
||||
*
|
||||
* (C) 2003-2010 Anope Team
|
||||
* (C) 2003-2011 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for furhter details.
|
||||
* Please read COPYING and README for further details.
|
||||
*
|
||||
* Based on the original code of Epona by Lara.
|
||||
* Based on the original code of Services by Andy Church.
|
||||
@@ -17,128 +17,57 @@
|
||||
|
||||
#include "hashcomp.h"
|
||||
|
||||
E void ModuleRunTimeDirCleanUp();
|
||||
|
||||
/* IRC Variables */
|
||||
|
||||
E IRCDVar *ircd;
|
||||
E IRCDProto *ircdproto;
|
||||
E IRCdMessage *ircdmessage;
|
||||
|
||||
/**** actions.c ****/
|
||||
|
||||
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, const Anope::string &nick);
|
||||
|
||||
E BotInfo *BotServ;
|
||||
E BotInfo *ChanServ;
|
||||
E BotInfo *Global;
|
||||
E BotInfo *HostServ;
|
||||
E BotInfo *MemoServ;
|
||||
E BotInfo *NickServ;
|
||||
E BotInfo *OperServ;
|
||||
E void common_unban(ChannelInfo *ci, User *u, bool full = false);
|
||||
|
||||
/**** botserv.c ****/
|
||||
|
||||
E void get_botserv_stats(long *nrec, long *memuse);
|
||||
E void bs_init();
|
||||
E void botchanmsgs(User *u, ChannelInfo *ci, const Anope::string &buf);
|
||||
E BotInfo *findbot(const Anope::string &nick);
|
||||
|
||||
/** Finds a pseudoclient, given a UID. Useful for TS6 protocol modules.
|
||||
* @param uid The UID to search for
|
||||
* @return The pseudoclient structure, or NULL if one could not be found
|
||||
*/
|
||||
E Anope::string normalizeBuffer(const Anope::string &);
|
||||
|
||||
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 ****/
|
||||
|
||||
E void get_channel_stats(long *nrec, long *memuse);
|
||||
|
||||
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);
|
||||
E void do_join(const Anope::string &source, const Anope::string &channels, const Anope::string &ts);
|
||||
E void do_kick(const Anope::string &source, const Anope::string &channel, const Anope::string &users, const Anope::string &reason);
|
||||
E void do_part(const Anope::string &source, const Anope::string &channels, const Anope::string &reason);
|
||||
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))
|
||||
return ChanServ ? ChanServ : NickServ;
|
||||
return ci->bi;
|
||||
}
|
||||
|
||||
/**** chanserv.c ****/
|
||||
|
||||
E LevelInfo levelinfo[];
|
||||
|
||||
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(const NickCore *nc);
|
||||
|
||||
E void check_modes(Channel *c);
|
||||
E int check_valid_admin(User *user, Channel *chan, int servermode);
|
||||
E int check_valid_op(User *user, Channel *chan, int servermode);
|
||||
|
||||
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 Anope::string services_conf;
|
||||
E ConfigurationFile services_conf;
|
||||
E ServerConfig *Config;
|
||||
|
||||
/* hostserv.c */
|
||||
E void do_on_id(User *u);
|
||||
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);
|
||||
E void enc_encrypt(const Anope::string &src, Anope::string &dest);
|
||||
E bool enc_decrypt(const Anope::string &src, Anope::string &dest);
|
||||
|
||||
/**** hostserv.c ****/
|
||||
E void get_hostserv_stats(long *nrec, long *memuse);
|
||||
E void hostserv_init();
|
||||
|
||||
/**** init.c ****/
|
||||
|
||||
@@ -146,25 +75,20 @@ E void introduce_user(const Anope::string &user);
|
||||
E bool GetCommandLineArgument(const Anope::string &name, char shortname = 0);
|
||||
E bool GetCommandLineArgument(const Anope::string &name, char shortname, Anope::string ¶m);
|
||||
E void Init(int ac, char **av);
|
||||
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 std::vector<Anope::string> domains;
|
||||
E void InitLanguages();
|
||||
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 *);
|
||||
E const char *translate(const char *string);
|
||||
E const char *translate(User *u, const char *string);
|
||||
E const char *translate(NickCore *nc, const char *string);
|
||||
E const char *anope_gettext(const char *lang, const char *string);
|
||||
|
||||
/**** main.c ****/
|
||||
|
||||
@@ -178,70 +102,54 @@ E bool noexpire;
|
||||
E bool protocoldebug;
|
||||
|
||||
E bool quitting;
|
||||
E bool shutting_down;
|
||||
E bool restarting;
|
||||
E Anope::string quitmsg;
|
||||
E bool save_data;
|
||||
E time_t start_time;
|
||||
|
||||
E ConnectionSocket *UplinkSock;
|
||||
E int CurrentUplink;
|
||||
|
||||
E void save_databases();
|
||||
E void expire_all();
|
||||
E void sighandler(int signum);
|
||||
E void do_restart_services();
|
||||
|
||||
/* The socket to our uplink */
|
||||
class CoreExport UplinkSocket : public ConnectionSocket
|
||||
{
|
||||
public:
|
||||
UplinkSocket(bool ipv6 = false);
|
||||
/**** messages.cpp ****/
|
||||
|
||||
virtual ~UplinkSocket();
|
||||
|
||||
bool Read(const Anope::string &buf);
|
||||
};
|
||||
|
||||
/**** memoserv.c ****/
|
||||
|
||||
E void ms_init();
|
||||
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(User *u, const Anope::string &name, const Anope::string &text, int z);
|
||||
|
||||
/**** 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(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 Anope::string duration(const time_t &seconds, NickCore *nc = NULL);
|
||||
E Anope::string expire_left(NickCore *nc, time_t expires);
|
||||
E Anope::string do_strftime(const time_t &t, NickCore *nc = NULL, bool short_output = false);
|
||||
E bool doValidHost(const Anope::string &host, int type);
|
||||
|
||||
E bool isValidHost(const Anope::string &host, int type);
|
||||
@@ -250,7 +158,6 @@ E bool isvalidchar(char c);
|
||||
E Anope::string myStrGetToken(const Anope::string &str, char dilim, int token_number);
|
||||
E Anope::string myStrGetTokenRemainder(const Anope::string &str, char dilim, int token_number);
|
||||
E int myNumToken(const Anope::string &str, char dilim);
|
||||
E void EnforceQlinedNick(const Anope::string &nick, const Anope::string &killer);
|
||||
E bool nickIsServices(const Anope::string &nick, bool bot);
|
||||
|
||||
E void add_entropy_userkeys();
|
||||
@@ -259,54 +166,30 @@ E unsigned char getrandom8();
|
||||
E uint16 getrandom16();
|
||||
E uint32 getrandom32();
|
||||
|
||||
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);
|
||||
E Anope::string normalizeBuffer(const Anope::string &);
|
||||
|
||||
/**** modes.cpp ****/
|
||||
/* Number of generic modes we support */
|
||||
E unsigned GenericChannelModes, GenericUserModes;
|
||||
E Flags<ChannelModeName, CMODE_END * 2> DefMLockOn;
|
||||
E Flags<ChannelModeName, CMODE_END * 2> DefMLockOff;
|
||||
E std::map<ChannelModeName, Anope::string> DefMLockParams;
|
||||
E std::multimap<ChannelModeName, ModeLock> def_mode_locks;
|
||||
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);
|
||||
E void change_core_display(NickCore *nc, const Anope::string &newdisplay);
|
||||
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 ****/
|
||||
@@ -315,27 +198,8 @@ E void send_cmd(const Anope::string &source, const char *fmt, ...) FORMAT(printf
|
||||
|
||||
E void notice_server(const Anope::string &source, const Server *s, const char *fmt, ...) FORMAT(printf, 3, 4);
|
||||
|
||||
/**** sessions.c ****/
|
||||
|
||||
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(const Anope::string &nick, const Anope::string &host, const Anope::string &hostip);
|
||||
E void del_session(const Anope::string &host);
|
||||
|
||||
E void expire_exceptions();
|
||||
|
||||
E Session *findsession(const Anope::string &host);
|
||||
|
||||
E Exception *find_host_exception(const Anope::string &host);
|
||||
E Exception *find_hostip_exception(const Anope::string &host, const Anope::string &hostip);
|
||||
E int exception_add(User *u, const Anope::string &mask, unsigned limit, const Anope::string &reason, const Anope::string &who, time_t expires);
|
||||
|
||||
/**** sockets.cpp ****/
|
||||
|
||||
E SocketEngineBase *SocketEngine;
|
||||
E int32 TotalRead;
|
||||
E int32 TotalWritten;
|
||||
E SocketIO normalSocketIO;
|
||||
@@ -346,34 +210,15 @@ E int32 opcnt;
|
||||
E uint32 maxusercnt, usercnt;
|
||||
E time_t maxusertime;
|
||||
|
||||
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 &, 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 void do_umode(const Anope::string &user, const Anope::string &modes);
|
||||
E void do_kill(User *user, const Anope::string &reason);
|
||||
|
||||
E bool is_oper(User *user);
|
||||
E bool matches_list(Channel *c, User *user, ChannelModeName mode);
|
||||
|
||||
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);
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
E void b64_encode(const Anope::string &src, Anope::string &target);
|
||||
E void b64_decode(const Anope::string &src, Anope::string &target);
|
||||
|
||||
#ifdef _WIN32
|
||||
E Anope::string GetWindowsVersion();
|
||||
E bool SupportedWindowsVersion();
|
||||
#endif
|
||||
|
||||
#endif /* EXTERN_H */
|
||||
|
||||
+4
-4
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2010 InspIRCd Development Team
|
||||
* Copyright (C) 2009-2010 Anope Team <team@anope.org>
|
||||
* Copyright (C) 2002-2011 InspIRCd Development Team
|
||||
* Copyright (C) 2009-2011 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 hash
|
||||
struct CoreExport 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 hash
|
||||
struct CoreExport hash
|
||||
{
|
||||
/* VS 2008 specific code */
|
||||
enum { bucket_size = 4, min_buckets = 8 };
|
||||
|
||||
+100
-1551
File diff suppressed because it is too large
Load Diff
+4
-6
@@ -29,6 +29,8 @@ struct LogFile
|
||||
Anope::string GetName() const;
|
||||
};
|
||||
|
||||
class Command;
|
||||
|
||||
class CoreExport Log
|
||||
{
|
||||
public:
|
||||
@@ -39,7 +41,7 @@ class CoreExport Log
|
||||
|
||||
std::stringstream buf;
|
||||
|
||||
Log(LogType type = LOG_NORMAL, const Anope::string &category = "", BotInfo *bi = Global);
|
||||
Log(LogType type = LOG_NORMAL, const Anope::string &category = "", BotInfo *bi = NULL);
|
||||
|
||||
/* LOG_COMMAND/OVERRIDE/ADMIN */
|
||||
Log(LogType type, User *u, Command *c, ChannelInfo *ci = NULL);
|
||||
@@ -88,11 +90,7 @@ class CoreExport LogInfo
|
||||
|
||||
void AddType(std::list<Anope::string> &list, const Anope::string &type);
|
||||
|
||||
bool HasType(std::list<Anope::string> &list, const Anope::string &type) const;
|
||||
|
||||
std::list<Anope::string> &GetList(LogType type);
|
||||
|
||||
bool HasType(LogType Type);
|
||||
bool HasType(LogType ltype, const Anope::string &type) const;
|
||||
|
||||
void ProcessMessage(const Log *l);
|
||||
};
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
|
||||
#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
-92
@@ -1,7 +1,7 @@
|
||||
/* Mode support
|
||||
*
|
||||
* Copyright (C) 2008-2010 Adam <Adam@anope.org>
|
||||
* Copyright (C) 2008-2010 Anope Team <team@anope.org>
|
||||
* Copyright (C) 2008-2011 Adam <Adam@anope.org>
|
||||
* Copyright (C) 2008-2011 Anope Team <team@anope.org>
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
*/
|
||||
@@ -16,14 +16,26 @@ enum UserModeName
|
||||
UMODE_BEGIN,
|
||||
|
||||
UMODE_SERV_ADMIN, UMODE_BOT, UMODE_CO_ADMIN, UMODE_FILTER, UMODE_HIDEOPER, UMODE_NETADMIN,
|
||||
UMODE_REGPRIV, UMODE_PROTECTED, UMODE_NO_CTCP, UMODE_WEBTV, UMODE_WHOIS, UMODE_ADMIN, UMODE_DEAF,
|
||||
UMODE_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_CALLERID, UMODE_COMMONCHANS,
|
||||
UMODE_HIDDEN, UMODE_STRIPCOLOR, UMODE_INVISIBLE_OPER,
|
||||
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_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
|
||||
@@ -36,6 +48,7 @@ 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,
|
||||
@@ -48,6 +61,29 @@ 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
|
||||
@@ -79,8 +115,6 @@ 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 */
|
||||
@@ -88,11 +122,10 @@ 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, const Anope::string &mNameAsString, char modeChar, ModeType type);
|
||||
Mode(ModeClass mClass, char modeChar, ModeType type);
|
||||
|
||||
/** Default destructor
|
||||
*/
|
||||
@@ -109,14 +142,17 @@ 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, const Anope::string &mNameAsString, char modeChar);
|
||||
UserMode(UserModeName mName, char modeChar);
|
||||
|
||||
/** Default destructor
|
||||
*/
|
||||
virtual ~UserMode();
|
||||
|
||||
/** Returns the mode name as a string
|
||||
*/
|
||||
const Anope::string NameAsString();
|
||||
};
|
||||
|
||||
class CoreExport UserModeParam : public UserMode
|
||||
@@ -124,10 +160,9 @@ 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, const Anope::string &mNameAsString, char modeChar);
|
||||
UserModeParam(UserModeName mName, char modeChar);
|
||||
|
||||
/** Check if the param is valid
|
||||
* @param value The param
|
||||
@@ -146,10 +181,9 @@ 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, const Anope::string &mNameAsString, char modeChar);
|
||||
ChannelMode(ChannelModeName mName, char modeChar);
|
||||
|
||||
/** Default destructor
|
||||
*/
|
||||
@@ -159,7 +193,11 @@ 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
|
||||
*/
|
||||
virtual bool CanSet(User *u) const { return true; }
|
||||
virtual bool CanSet(User *u) const;
|
||||
|
||||
/** Returns the mode name as a string
|
||||
*/
|
||||
const Anope::string NameAsString();
|
||||
};
|
||||
|
||||
|
||||
@@ -170,10 +208,9 @@ 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, const Anope::string &mNameAsString, char modeChar);
|
||||
ChannelModeList(ChannelModeName mName, char modeChar);
|
||||
|
||||
/** Default destructor
|
||||
*/
|
||||
@@ -185,18 +222,25 @@ class CoreExport ChannelModeList : public ChannelMode
|
||||
*/
|
||||
virtual bool IsValid(const Anope::string &mask) const { return true; }
|
||||
|
||||
/** Add the mask to the channel, this should be overridden
|
||||
/** 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
|
||||
* @param chan The channel
|
||||
* @param mask The mask
|
||||
*/
|
||||
virtual void AddMask(Channel *chan, const Anope::string &mask) { }
|
||||
virtual void OnAdd(Channel *chan, const Anope::string &mask) { }
|
||||
|
||||
/** Delete the mask from the channel, this should be overridden
|
||||
/** Called when a mask is removed from a channel
|
||||
* @param chan The channel
|
||||
* @param mask The mask
|
||||
*/
|
||||
virtual void DelMask(Channel *chan, const Anope::string &mask) { }
|
||||
|
||||
virtual void OnDel(Channel *chan, const Anope::string &mask) { }
|
||||
};
|
||||
|
||||
/** This is a mode with a paramater, eg +k/l. These modes should use/inherit from this
|
||||
@@ -206,11 +250,10 @@ 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, const Anope::string &mNameAsString, char modeChar, bool MinusArg = false);
|
||||
ChannelModeParam(ChannelModeName mName, char modeChar, bool MinusArg = false);
|
||||
|
||||
/** Default destructor
|
||||
*/
|
||||
@@ -236,70 +279,22 @@ 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, const Anope::string &mNameAsString, char modeChar, char mSymbol);
|
||||
ChannelModeStatus(ChannelModeName mName, char modeChar, char mSymbol);
|
||||
|
||||
/** Default destructor
|
||||
*/
|
||||
virtual ~ChannelModeStatus();
|
||||
};
|
||||
|
||||
/** Channel mode +b
|
||||
*/
|
||||
class CoreExport ChannelModeBan : public ChannelModeList
|
||||
{
|
||||
public:
|
||||
ChannelModeBan(char modeChar) : ChannelModeList(CMODE_BAN, "CMODE_BAN", modeChar) { }
|
||||
|
||||
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, "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) { }
|
||||
ChannelModeKey(char modeChar) : ChannelModeParam(CMODE_KEY, modeChar) { }
|
||||
|
||||
bool IsValid(const Anope::string &value) const;
|
||||
};
|
||||
@@ -310,7 +305,7 @@ class ChannelModeFlood : public ChannelModeParam
|
||||
class CoreExport ChannelModeAdmin : public ChannelMode
|
||||
{
|
||||
public:
|
||||
ChannelModeAdmin(char modeChar) : ChannelMode(CMODE_ADMINONLY, "CMODE_ADMINONLY", modeChar) { }
|
||||
ChannelModeAdmin(char modeChar) : ChannelMode(CMODE_ADMINONLY, modeChar) { }
|
||||
|
||||
/* Opers only */
|
||||
bool CanSet(User *u) const;
|
||||
@@ -322,7 +317,7 @@ class CoreExport ChannelModeAdmin : public ChannelMode
|
||||
class CoreExport ChannelModeOper : public ChannelMode
|
||||
{
|
||||
public:
|
||||
ChannelModeOper(char modeChar) : ChannelMode(CMODE_OPERONLY, "CMODE_OPERONLY", modeChar) { }
|
||||
ChannelModeOper(char modeChar) : ChannelMode(CMODE_OPERONLY, modeChar) { }
|
||||
|
||||
/* Opers only */
|
||||
bool CanSet(User *u) const;
|
||||
@@ -334,7 +329,7 @@ class CoreExport ChannelModeOper : public ChannelMode
|
||||
class CoreExport ChannelModeRegistered : public ChannelMode
|
||||
{
|
||||
public:
|
||||
ChannelModeRegistered(char modeChar) : ChannelMode(CMODE_REGISTERED, "CMODE_REGISTERED", modeChar) { }
|
||||
ChannelModeRegistered(char modeChar) : ChannelMode(CMODE_REGISTERED, modeChar) { }
|
||||
|
||||
/* No one mlocks +r */
|
||||
bool CanSet(User *u) const;
|
||||
@@ -401,18 +396,9 @@ 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::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.
|
||||
*/
|
||||
/* List of all modes Anope knows about */
|
||||
static std::vector<ChannelMode *> ChannelModes;
|
||||
static std::vector<UserMode *> UserModes;
|
||||
|
||||
/** Add a user mode to Anope
|
||||
* @param um A UserMode or UserMode derived class
|
||||
@@ -450,11 +436,17 @@ class CoreExport ModeManager
|
||||
*/
|
||||
static UserMode *FindUserModeByName(UserModeName Name);
|
||||
|
||||
/** Find a mode by name
|
||||
/** Find channel mode by string
|
||||
* @param name The mode name
|
||||
* @return The mode
|
||||
*/
|
||||
static Mode *FindModeByName(const Anope::string &name);
|
||||
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);
|
||||
|
||||
/** Gets the channel mode char for a symbol (eg + returns v)
|
||||
* @param Value The symbol
|
||||
|
||||
+2
-2
@@ -2,8 +2,8 @@
|
||||
#define MODULE_H
|
||||
|
||||
#include "services.h"
|
||||
#include "commands.h"
|
||||
#include "modules.h"
|
||||
#define _(x) x
|
||||
#include "oper.h"
|
||||
#include "commands.h"
|
||||
|
||||
#endif // MODULE_H
|
||||
|
||||
+241
-233
@@ -1,9 +1,9 @@
|
||||
/* Modular support
|
||||
*
|
||||
* (C) 2003-2010 Anope Team
|
||||
* (C) 2003-2011 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for furhter details.
|
||||
* Please read COPYING and README for further details.
|
||||
*
|
||||
* Based on the original code of Epona by Lara.
|
||||
* Based on the original code of Services by Andy Church.
|
||||
@@ -17,7 +17,6 @@
|
||||
#include <stdio.h>
|
||||
#include "timers.h"
|
||||
#include "hashcomp.h"
|
||||
#include "commands.h"
|
||||
|
||||
/* Cross OS compatibility macros */
|
||||
#ifdef _WIN32
|
||||
@@ -27,7 +26,7 @@
|
||||
# define dlsym(file, symbol) (HMODULE)GetProcAddress(file, symbol)
|
||||
# define dlclose(file) FreeLibrary(file) ? 0 : 1
|
||||
# define ano_modclearerr() SetLastError(0)
|
||||
# define ano_moderr() Anope::LastError().c_str()
|
||||
# define ano_moderr() (Anope::LastError().empty() ? NULL : Anope::LastError().c_str())
|
||||
#else
|
||||
typedef void * ano_module_t;
|
||||
|
||||
@@ -127,10 +126,6 @@ else \
|
||||
|
||||
class Message;
|
||||
|
||||
extern CoreExport Module *FindModule(const Anope::string &name);
|
||||
int protocol_module_init();
|
||||
extern CoreExport bool moduleMinVersion(int major, int minor, int patch, int build);
|
||||
|
||||
enum ModuleReturn
|
||||
{
|
||||
MOD_ERR_OK,
|
||||
@@ -138,15 +133,9 @@ enum ModuleReturn
|
||||
MOD_ERR_PARAMS,
|
||||
MOD_ERR_EXISTS,
|
||||
MOD_ERR_NOEXIST,
|
||||
MOD_ERR_NOUSER,
|
||||
MOD_ERR_NOLOAD,
|
||||
MOD_ERR_NOUNLOAD,
|
||||
MOD_ERR_SYNTAX,
|
||||
MOD_ERR_NODELETE,
|
||||
MOD_ERR_UNKNOWN,
|
||||
MOD_ERR_FILE_IO,
|
||||
MOD_ERR_NOSERVICE,
|
||||
MOD_ERR_NO_MOD_NAME,
|
||||
MOD_ERR_EXCEPTION,
|
||||
MOD_ERR_VERSION
|
||||
};
|
||||
@@ -155,7 +144,7 @@ enum ModuleReturn
|
||||
*/
|
||||
enum Priority { PRIORITY_FIRST, PRIORITY_DONTCARE, PRIORITY_LAST, PRIORITY_BEFORE, PRIORITY_AFTER };
|
||||
/* Module types, in the order in which they are unloaded. The order these are in is IMPORTANT */
|
||||
enum MODType { MT_BEGIN, THIRD, QATESTED, SUPPORTED, CORE, DATABASE, ENCRYPTION, PROTOCOL, SOCKETENGINE, MT_END };
|
||||
enum ModType { MT_BEGIN, THIRD, SUPPORTED, CORE, DATABASE, ENCRYPTION, PROTOCOL, MT_END };
|
||||
|
||||
typedef std::multimap<Anope::string, Message *> message_map;
|
||||
extern CoreExport message_map MessageMap;
|
||||
@@ -165,9 +154,9 @@ extern CoreExport std::list<Module *> Modules;
|
||||
class Version
|
||||
{
|
||||
private:
|
||||
unsigned Major;
|
||||
unsigned Minor;
|
||||
unsigned Build;
|
||||
int Major;
|
||||
int Minor;
|
||||
int Build;
|
||||
|
||||
public:
|
||||
/** Constructor
|
||||
@@ -175,7 +164,7 @@ class Version
|
||||
* @param vMinor The minor version numbber
|
||||
* @param vBuild The build version numbber
|
||||
*/
|
||||
Version(unsigned vMajor, unsigned vMinor, unsigned vBuild);
|
||||
Version(int vMajor, int vMinor, int vBuild);
|
||||
|
||||
/** Destructor
|
||||
*/
|
||||
@@ -184,21 +173,22 @@ class Version
|
||||
/** Get the major version of Anope this was built against
|
||||
* @return The major version
|
||||
*/
|
||||
unsigned GetMajor() const;
|
||||
int GetMajor() const;
|
||||
|
||||
/** Get the minor version of Anope this was built against
|
||||
* @return The minor version
|
||||
*/
|
||||
unsigned GetMinor() const;
|
||||
int GetMinor() const;
|
||||
|
||||
/** Get the build version this was built against
|
||||
* @return The build version
|
||||
*/
|
||||
unsigned GetBuild() const;
|
||||
int GetBuild() const;
|
||||
};
|
||||
|
||||
/* Forward declaration of CallBack class for the Module class */
|
||||
class CallBack;
|
||||
class XLineManager;
|
||||
struct CommandSource;
|
||||
|
||||
/** Every module in Anope is actually a class.
|
||||
*/
|
||||
@@ -211,6 +201,10 @@ class CoreExport Module : public Extensible
|
||||
*/
|
||||
Anope::string name;
|
||||
|
||||
/** What type this module is
|
||||
*/
|
||||
ModType type;
|
||||
|
||||
/** The temporary path/filename
|
||||
*/
|
||||
Anope::string filename;
|
||||
@@ -235,24 +229,17 @@ class CoreExport Module : public Extensible
|
||||
*/
|
||||
Anope::string author;
|
||||
|
||||
/** What type this module is
|
||||
*/
|
||||
MODType type;
|
||||
|
||||
/** Creates and initialises a new module.
|
||||
* @param modname The module name
|
||||
* @param loadernick The nickname of the user loading the module.
|
||||
* @param type The module type
|
||||
*/
|
||||
Module(const Anope::string &modname, const Anope::string &loadernick);
|
||||
Module(const Anope::string &modname, const Anope::string &loadernick, ModType type = THIRD);
|
||||
|
||||
/** Destroys a module, freeing resources it has allocated.
|
||||
*/
|
||||
virtual ~Module();
|
||||
|
||||
/** Sets a given type (CORE,PROTOCOL,3RD etc) on a module.
|
||||
* @param type The type to set the module as.
|
||||
*/
|
||||
void SetType(MODType type);
|
||||
|
||||
/** Toggles the permanent flag on a module. If a module is permanent,
|
||||
* then it may not be unloaded.
|
||||
*
|
||||
@@ -283,29 +270,6 @@ class CoreExport Module : public Extensible
|
||||
*/
|
||||
Version GetVersion() const;
|
||||
|
||||
/** Send a message to a user in their language, if a translation is available
|
||||
* @param from Client to send the message from
|
||||
* @param to User to send the message to
|
||||
* @param fmt The message
|
||||
*/
|
||||
void SendMessage(BotInfo *from, User *to, const char *fmt, ...);
|
||||
|
||||
/**
|
||||
* Add a module provided command to the given service.
|
||||
* @param bi The service to add the command to
|
||||
* @param c The command to add
|
||||
* @return MOD_ERR_OK on successfully adding the command
|
||||
*/
|
||||
int AddCommand(BotInfo *bi, Command *c);
|
||||
|
||||
/**
|
||||
* Delete a command from the service given.
|
||||
* @param bi The service to remove the command from
|
||||
* @param c Thec command to delete
|
||||
* @return returns MOD_ERR_OK on success
|
||||
*/
|
||||
int DelCommand(BotInfo *bi, Command *c);
|
||||
|
||||
/** Called when the ircd notifies that a user has been kicked from a channel.
|
||||
* @param c The channel the user has been kicked from.
|
||||
* @param target The user that has been kicked.
|
||||
@@ -315,9 +279,8 @@ class CoreExport Module : public Extensible
|
||||
virtual void OnUserKicked(Channel *c, User *target, const Anope::string &source, const Anope::string &kickmsg) { }
|
||||
|
||||
/** Called when Services' configuration has been loaded.
|
||||
* @param startup True if Services is starting for the first time, false otherwise.
|
||||
*/
|
||||
virtual void OnReload(bool startup) {}
|
||||
virtual void OnReload() { }
|
||||
|
||||
/** Called before a bot is assigned to a channel.
|
||||
* @param sender The user assigning the bot
|
||||
@@ -334,20 +297,11 @@ class CoreExport Module : public Extensible
|
||||
*/
|
||||
virtual EventReturn OnBotUnAssign(User *sender, ChannelInfo *ci) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called after a user has been introduced, but before any type
|
||||
* of checking has been done (akills, defcon, s*lines, etc)
|
||||
* return EVENT_STOP here to allow the user to get by untouched,
|
||||
* or kill them then return EVENT_STOP to tell Anope the user no
|
||||
* longer exists
|
||||
* @param u The user
|
||||
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to stop processing
|
||||
*/
|
||||
virtual EventReturn OnPreUserConnect(User *u) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called when a new user connects to the network.
|
||||
* @param u The connecting user.
|
||||
* @param exempt set to true/is true if the user should be excepted from bans etc
|
||||
*/
|
||||
virtual void OnUserConnect(User *u) { }
|
||||
virtual void OnUserConnect(dynamic_reference<User> &u, bool &exempt) { }
|
||||
|
||||
/** Called when a new server connects to the network.
|
||||
* @param s The server that has connected to the network
|
||||
@@ -360,32 +314,32 @@ class CoreExport Module : public Extensible
|
||||
*/
|
||||
virtual void OnUserNickChange(User *u, const Anope::string &oldnick) { }
|
||||
|
||||
/** Called immediatly when a user tries to run a command
|
||||
* @param u The user
|
||||
* @param bi The bot the command is being run from
|
||||
* @param command The command
|
||||
* @param message The parameters used for the command
|
||||
* @param c The command class (if it exists)
|
||||
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to halt the command and not process it
|
||||
/** Called when someone uses the generic/help command
|
||||
* @param source Command source
|
||||
* @param params Params
|
||||
*/
|
||||
virtual EventReturn OnPreCommandRun(User *u, BotInfo *bi, const Anope::string &command, const Anope::string &message, Command *c) { return EVENT_CONTINUE; }
|
||||
virtual void OnPreHelp(CommandSource &source, const std::vector<Anope::string> ¶ms) { }
|
||||
|
||||
/** Called when someone uses the generic/help command
|
||||
* @param source Command source
|
||||
* @param params Params
|
||||
*/
|
||||
virtual void OnPostHelp(CommandSource &source, const std::vector<Anope::string> ¶ms) { }
|
||||
|
||||
/** Called before a command is due to be executed.
|
||||
* @param u The user executing the command
|
||||
* @param service The service the command is associated with
|
||||
* @param source The source of the command
|
||||
* @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(User *u, BotInfo *service, const Anope::string &command, const std::vector<Anope::string> ¶ms) { return EVENT_CONTINUE; }
|
||||
virtual EventReturn OnPreCommand(CommandSource &source, Command *command, std::vector<Anope::string> ¶ms) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called after a command has been executed.
|
||||
* @param u The user executing the command
|
||||
* @param service The service the command is associated with
|
||||
* @param source The source of the command
|
||||
* @param command The command the user executed
|
||||
* @param params The parameters the user sent
|
||||
*/
|
||||
virtual void OnPostCommand(User *u, BotInfo *service, const Anope::string &command, const std::vector<Anope::string> ¶ms) { }
|
||||
virtual void OnPostCommand(CommandSource &source, Command *command, const std::vector<Anope::string> ¶ms) { }
|
||||
|
||||
/** Called after the core has finished loading the databases, but before
|
||||
* we connect to the server
|
||||
@@ -407,7 +361,6 @@ 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
|
||||
@@ -426,10 +379,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 ci The channael
|
||||
* @param c The channel
|
||||
* @param bi The bot
|
||||
*/
|
||||
virtual void OnBotJoin(ChannelInfo *ci, BotInfo *bi) { }
|
||||
virtual void OnBotJoin(Channel *c, BotInfo *bi) { }
|
||||
|
||||
/** Called when a bot places a ban
|
||||
* @param u User being banned
|
||||
@@ -450,6 +403,11 @@ 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
|
||||
@@ -473,6 +431,13 @@ class CoreExport Module : public Extensible
|
||||
*/
|
||||
virtual void OnPartChannel(User *u, Channel *c, const Anope::string &channel, const Anope::string &msg) { }
|
||||
|
||||
/** Called when a user leaves a channel.
|
||||
* From either parting, being kicked, or quitting/killed!
|
||||
* @param u The user
|
||||
* @param c The channel
|
||||
*/
|
||||
virtual void OnLeaveChannel(User *u, Channel *c) { }
|
||||
|
||||
/** Called before a user joins a channel
|
||||
* @param u The user
|
||||
* @param c The channel
|
||||
@@ -498,17 +463,14 @@ class CoreExport Module : public Extensible
|
||||
*/
|
||||
virtual EventReturn OnPreChanExpire(ChannelInfo *ci) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called when a channel expires
|
||||
* @param chname The channel name
|
||||
/** Called before a channel expires
|
||||
* @param ci The channel
|
||||
*/
|
||||
virtual void OnChanExpire(const Anope::string &chname) { }
|
||||
virtual void OnChanExpire(ChannelInfo *ci) { }
|
||||
|
||||
/** Called before Anope connects to its uplink
|
||||
* @param u The uplink we're going to connect to
|
||||
* @param Number What number the uplink is
|
||||
* @return Other than EVENT_CONTINUE to stop attempting to connect
|
||||
/** Called before Anope connecs to its uplink
|
||||
*/
|
||||
virtual EventReturn OnPreServerConnect(Uplink *u, int Number) { return EVENT_CONTINUE; }
|
||||
virtual void OnPreServerConnect() { }
|
||||
|
||||
/** Called when Anope connects to its uplink
|
||||
*/
|
||||
@@ -522,16 +484,6 @@ class CoreExport Module : public Extensible
|
||||
*/
|
||||
virtual void OnServerDisconnect() { }
|
||||
|
||||
/** Called before the database expire routines are called
|
||||
* Note: Code that is in seperate expiry routines should just be done
|
||||
* when we save the DB, theres no need to have both
|
||||
*/
|
||||
virtual void OnPreDatabaseExpire() { }
|
||||
|
||||
/** Called when the database expire routines are called
|
||||
*/
|
||||
virtual void OnDatabaseExpire() { }
|
||||
|
||||
/** Called when the flatfile dbs are being written
|
||||
* @param Write A callback to the function used to insert a line into the database
|
||||
*/
|
||||
@@ -559,14 +511,6 @@ 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
|
||||
@@ -595,12 +539,6 @@ 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
|
||||
@@ -613,28 +551,14 @@ class CoreExport Module : public Extensible
|
||||
*/
|
||||
virtual void OnDatabaseWriteMetadata(void (*WriteMetadata)(const Anope::string &, const Anope::string &), ChannelInfo *ci) { }
|
||||
|
||||
/** Called before services restart
|
||||
*/
|
||||
virtual void OnPreRestart() { }
|
||||
|
||||
/** Called when services restart
|
||||
*/
|
||||
virtual void OnRestart() { }
|
||||
|
||||
/** Called before services shutdown
|
||||
*/
|
||||
virtual void OnPreShutdown() { }
|
||||
|
||||
/** Called when services shutdown
|
||||
*/
|
||||
virtual void OnShutdown() { }
|
||||
|
||||
/** Called on signal
|
||||
* @param signum The signum
|
||||
* @param msg The quitmsg
|
||||
*/
|
||||
virtual void OnSignal(int signum, const Anope::string &msg) { }
|
||||
|
||||
/** Called before a nick expires
|
||||
* @param na The nick
|
||||
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to halt the command and not process it
|
||||
@@ -651,25 +575,11 @@ class CoreExport Module : public Extensible
|
||||
*/
|
||||
virtual void OnDefconLevel(int level) { }
|
||||
|
||||
/** Called before an akill is added
|
||||
* @param u The user adding the akill
|
||||
* @param ak The akill
|
||||
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to halt the command and not process it
|
||||
*/
|
||||
virtual EventReturn OnAddAkill(User *u, XLine *ak) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called before an akill is deleted
|
||||
* @param u The user removing the akill
|
||||
* @param ak The akill, can be NULL for all akills!
|
||||
*/
|
||||
virtual void OnDelAkill(User *u, XLine *ak) { }
|
||||
|
||||
/** Called after an exception has been added
|
||||
* @param u The user who added it
|
||||
* @param ex The exception
|
||||
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to halt the command and not process it
|
||||
*/
|
||||
virtual EventReturn OnExceptionAdd(User *u, Exception *ex) { return EVENT_CONTINUE; }
|
||||
virtual EventReturn OnExceptionAdd(Exception *ex) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called before an exception is deleted
|
||||
* @param u The user who is deleting it
|
||||
@@ -679,18 +589,24 @@ class CoreExport Module : public Extensible
|
||||
|
||||
/** Called before a XLine is added
|
||||
* @param u The user adding the XLine
|
||||
* @param sx The XLine
|
||||
* @param Type The type of XLine this is
|
||||
* @param x The XLine
|
||||
* @param xlm The xline manager it was added to
|
||||
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to halt the command and not process it
|
||||
*/
|
||||
virtual EventReturn OnAddXLine(User *u, XLine *x, XLineType Type) { return EVENT_CONTINUE; }
|
||||
virtual EventReturn OnAddXLine(User *u, XLine *x, XLineManager *xlm) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called before a XLine is deleted
|
||||
* @param u The user deleting the XLine
|
||||
* @param sx The XLine, can be NULL for all XLines
|
||||
* @param Type The type of XLine this is
|
||||
* @param x The XLine, can be NULL for all XLines
|
||||
* @param xlm The xline manager it was deleted from
|
||||
*/
|
||||
virtual void OnDelXLine(User *u, XLine *x, XLineType Type) { }
|
||||
virtual void OnDelXLine(User *u, XLine *x, XLineManager *xlm) { }
|
||||
|
||||
/** Called when a user is checked for whether they are a services oper
|
||||
* @param u The user
|
||||
* @return EVENT_ALLOW to allow, anything else to deny
|
||||
*/
|
||||
virtual EventReturn IsServicesOper(User *u) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called when a server quits
|
||||
* @param server The server
|
||||
@@ -726,25 +642,16 @@ 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 nc The user who was deleted
|
||||
* @param access The access entry being removed
|
||||
*/
|
||||
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 nc The nick whos access was changed
|
||||
* @param level The level of the new access
|
||||
*/
|
||||
virtual void OnAccessChange(ChannelInfo *ci, User *u, NickCore *nc, int level) { }
|
||||
virtual void OnAccessDel(ChannelInfo *ci, User *u, ChanAccess *access) { }
|
||||
|
||||
/** Called when access is added
|
||||
* @param ci The channel
|
||||
* @param u The user who added the access
|
||||
* @para nc The nick who was added to access
|
||||
* @param level The level they were added at
|
||||
* @param access The access changed
|
||||
*/
|
||||
virtual void OnAccessAdd(ChannelInfo *ci, User *u, NickCore *nc, int level) { }
|
||||
virtual void OnAccessAdd(ChannelInfo *ci, User *u, ChanAccess *access) { }
|
||||
|
||||
/** Called when the access list is cleared
|
||||
* @param ci The channel
|
||||
@@ -785,6 +692,11 @@ class CoreExport Module : public Extensible
|
||||
*/
|
||||
virtual void OnChanUnsuspend(ChannelInfo *ci) { }
|
||||
|
||||
/** Called when a channel is being created, for any reason
|
||||
* @param ci The channel
|
||||
*/
|
||||
virtual void OnCreateChan(ChannelInfo *ci) { }
|
||||
|
||||
/** Called when a channel is being deleted, for any reason
|
||||
* @param ci The channel
|
||||
*/
|
||||
@@ -814,17 +726,45 @@ class CoreExport Module : public Extensible
|
||||
*/
|
||||
virtual void OnAkickDel(User *u, ChannelInfo *ci, AutoKick *ak) { }
|
||||
|
||||
/** Called after a user join a channel when we decide whether to kick them or not
|
||||
* @param u The user
|
||||
* @param ci The channel
|
||||
* @param kick Set to true to kick
|
||||
* @return EVENT_ALLOW to stop processing immediatly
|
||||
*/
|
||||
virtual EventReturn OnCheckKick(User *u, ChannelInfo *ci, bool &kick) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called when a user requests info for a channel
|
||||
* @param u The user requesting info
|
||||
* @param source 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(User *u, ChannelInfo *ci, bool ShowHidden) { }
|
||||
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) { }
|
||||
|
||||
/** Checks if access has the channel privilege 'priv'.
|
||||
* @param access THe access struct
|
||||
* @param priv The privilege being checked for
|
||||
* @return EVENT_ALLOW for yes, EVENT_STOP to stop all processing
|
||||
*/
|
||||
virtual EventReturn OnCheckPriv(ChanAccess *access, ChannelAccess priv) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Check whether an access group has a privilege
|
||||
* @param group The group
|
||||
* @param priv The privilege
|
||||
* @return MOD_ALLOW to allow, MOD_STOP to stop
|
||||
*/
|
||||
virtual EventReturn OnGroupCheckPriv(const AccessGroup *group, ChannelAccess priv) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called when a nick is dropped
|
||||
* @param nick The nick
|
||||
* @param u The user dropping the nick
|
||||
* @param na The nick
|
||||
*/
|
||||
virtual void OnNickDrop(const Anope::string &nick) { }
|
||||
virtual void OnNickDrop(User *u, NickAlias *na) { }
|
||||
|
||||
/** Called when a nick is forbidden
|
||||
* @param na The nick alias of the forbidden nick
|
||||
@@ -878,16 +818,6 @@ 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
|
||||
*/
|
||||
@@ -905,12 +835,67 @@ 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 u The user requesting info
|
||||
* @param source 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(User *u, NickAlias *na, bool ShowHidden) { }
|
||||
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(Command *c, CommandSource *source, const std::vector<Anope::string> ¶ms, const Anope::string &account, const Anope::string &password) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called when a user does /ns update
|
||||
* @param u The user
|
||||
*/
|
||||
virtual void OnNickUpdate(User *u) { }
|
||||
|
||||
/** 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) { }
|
||||
|
||||
/** Called when a user becomes (un)away
|
||||
* @param message The message, is .empty() if unaway
|
||||
*/
|
||||
virtual void OnUserAway(User *u, const Anope::string &message) { }
|
||||
|
||||
/** Called when a vhost is deleted
|
||||
* @param na The nickalias of the vhost
|
||||
@@ -923,18 +908,12 @@ class CoreExport Module : public Extensible
|
||||
virtual void OnSetVhost(NickAlias *na) { }
|
||||
|
||||
/** Called when a memo is sent
|
||||
* @param u The user sending the memo
|
||||
* @param nc The nickcore of who the memo was sent to
|
||||
* @param source The source of the memo
|
||||
* @param target The target of the memo
|
||||
* @param mi Memo info for target
|
||||
* @param m The memo
|
||||
*/
|
||||
virtual void OnMemoSend(User *u, NickCore *nc, Memo *m) { }
|
||||
|
||||
/** Called when a memo is sent
|
||||
* @param u The user sending the memo
|
||||
* @param ci The channel the memo was sent to
|
||||
* @param m The memo
|
||||
*/
|
||||
virtual void OnMemoSend(User *u, ChannelInfo *ci, Memo *m) { }
|
||||
virtual void OnMemoSend(const Anope::string &source, const Anope::string &target, MemoInfo *mi, Memo *m) { }
|
||||
|
||||
/** Called when a memo is deleted
|
||||
* @param nc The nickcore of the memo being deleted
|
||||
@@ -991,20 +970,18 @@ class CoreExport Module : public Extensible
|
||||
virtual void OnUserModeAdd(UserMode *um) { }
|
||||
|
||||
/** Called when a mode is about to be mlocked
|
||||
* @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
|
||||
* @param ci The channel the mode is being locked on
|
||||
* @param lock The mode lock
|
||||
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to deny the mlock.
|
||||
*/
|
||||
virtual EventReturn OnMLock(ChannelInfo *ci, ChannelModeName Name, bool status, const Anope::string ¶m) { return EVENT_CONTINUE; }
|
||||
virtual EventReturn OnMLock(ChannelInfo *ci, ModeLock *lock) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called when a mode is about to be unlocked
|
||||
* @param ci The channel
|
||||
* @param Name The mode being mlocked
|
||||
* @param ci The channel the mode is being unlocked from
|
||||
* @param mode The mode being unlocked
|
||||
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to deny the mlock.
|
||||
*/
|
||||
virtual EventReturn OnUnMLock(ChannelInfo *ci, ChannelModeName Name) { return EVENT_CONTINUE; }
|
||||
virtual EventReturn OnUnMLock(ChannelInfo *ci, ChannelMode *mode, const Anope::string ¶m) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called after a module is loaded
|
||||
* @param u The user loading the module, can be NULL
|
||||
@@ -1027,6 +1004,21 @@ 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, 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 c The channel
|
||||
* @param msg The message
|
||||
*/
|
||||
virtual void OnPrivmsg(User *u, Channel *c, Anope::string &msg) { }
|
||||
};
|
||||
|
||||
/** Implementation-specific flags which may be set in ModuleManager::Attach()
|
||||
@@ -1038,18 +1030,20 @@ 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_OnDelNickRequest, I_OnMakeNickRequest, I_OnNickClearAccess, I_OnNickAddAccess, I_OnNickEraseAccess,
|
||||
I_OnNickInfo,
|
||||
I_OnNickClearAccess, I_OnNickAddAccess, I_OnNickEraseAccess,
|
||||
I_OnNickClearCert, I_OnNickAddCert, I_OnNickEraseCert,
|
||||
I_OnNickInfo, I_OnFindNick, I_OnFindCore, I_OnCheckAuthentication,
|
||||
I_OnNickUpdate,
|
||||
|
||||
/* 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_OnChanForbidden, I_OnChanSuspend, I_OnChanDrop, I_OnPreChanExpire, I_OnChanExpire, I_OnAccessAdd,
|
||||
I_OnAccessDel, I_OnAccessClear, I_OnLevelChange, I_OnChanRegistered, I_OnChanUnsuspend, I_OnCreateChan, I_OnDelChan, I_OnChannelCreate,
|
||||
I_OnChannelDelete, I_OnAkickAdd, I_OnAkickDel, I_OnCheckKick,
|
||||
I_OnChanInfo, I_OnFindChan, I_OnCheckPriv, I_OnGroupCheckPriv,
|
||||
|
||||
/* 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_OnUserKicked, I_OnBotFantasy, I_OnBotNoFantasyAccess, I_OnBotBan, I_OnBadWordAdd, I_OnBadWordDel, I_OnFindBot,
|
||||
|
||||
/* HostServ */
|
||||
I_OnSetVhost, I_OnDeleteVhost,
|
||||
@@ -1058,28 +1052,27 @@ enum Implementation
|
||||
I_OnMemoSend, I_OnMemoDel,
|
||||
|
||||
/* Users */
|
||||
I_OnPreUserConnect, I_OnUserConnect, I_OnUserNickChange, I_OnUserQuit, I_OnUserLogoff, I_OnPreJoinChannel,
|
||||
I_OnJoinChannel, I_OnPrePartChannel, I_OnPartChannel,
|
||||
I_OnUserConnect, I_OnUserNickChange, I_OnUserQuit, I_OnUserLogoff, I_OnPreJoinChannel,
|
||||
I_OnJoinChannel, I_OnPrePartChannel, I_OnPartChannel, I_OnLeaveChannel, I_OnFingerprint, I_OnUserAway,
|
||||
|
||||
/* OperServ */
|
||||
I_OnDefconLevel, I_OnAddAkill, I_OnDelAkill, I_OnExceptionAdd, I_OnExceptionDel,
|
||||
I_OnAddXLine, I_OnDelXLine,
|
||||
I_OnAddXLine, I_OnDelXLine, I_IsServicesOper,
|
||||
|
||||
/* Database */
|
||||
I_OnPostLoadDatabases, I_OnSaveDatabase, I_OnLoadDatabase,
|
||||
I_OnDatabaseExpire,
|
||||
I_OnDatabaseWrite, I_OnDatabaseRead, I_OnDatabaseReadMetadata, I_OnDatabaseWriteMetadata,
|
||||
|
||||
/* Modules */
|
||||
I_OnModuleLoad, I_OnModuleUnload,
|
||||
|
||||
/* Other */
|
||||
I_OnReload, I_OnPreServerConnect, I_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_OnReload, I_OnNewServer, I_OnPreServerConnect, I_OnServerConnect, I_OnPreUplinkSync, I_OnServerDisconnect,
|
||||
I_OnPreHelp, I_OnPostHelp, I_OnPreCommand, I_OnPostCommand, I_OnRestart, I_OnShutdown,
|
||||
I_OnServerQuit, I_OnTopicUpdated,
|
||||
I_OnEncrypt, I_OnEncryptCheckLen, I_OnDecrypt, I_OnCheckPassword,
|
||||
I_OnEncrypt, I_OnDecrypt,
|
||||
I_OnChannelModeSet, I_OnChannelModeUnset, I_OnUserModeSet, I_OnUserModeUnset, I_OnChannelModeAdd, I_OnUserModeAdd,
|
||||
I_OnMLock, I_OnUnMLock, I_OnServerSync, I_OnUplinkSync,
|
||||
I_OnMLock, I_OnUnMLock, I_OnServerSync, I_OnUplinkSync, I_OnBotPrivmsg, I_OnPrivmsg,
|
||||
I_END
|
||||
};
|
||||
|
||||
@@ -1099,6 +1092,10 @@ class CoreExport ModuleManager
|
||||
*/
|
||||
static std::vector<Module *> EventHandlers[I_END];
|
||||
|
||||
/** Clean up the module runtime directory
|
||||
*/
|
||||
static void CleanupRuntimeDirectory();
|
||||
|
||||
/** Load up a list of modules.
|
||||
* @param module_list The list of modules to load
|
||||
**/
|
||||
@@ -1118,6 +1115,27 @@ class CoreExport ModuleManager
|
||||
*/
|
||||
static ModuleReturn UnloadModule(Module *m, User * u);
|
||||
|
||||
/** Find a module
|
||||
* @param name The module name
|
||||
* @return The module
|
||||
*/
|
||||
static Module *FindModule(const Anope::string &name);
|
||||
|
||||
/** Find the first module of a certain type
|
||||
* @param type The module type
|
||||
* @return The module
|
||||
*/
|
||||
static Module *FindFirstOf(ModType type);
|
||||
|
||||
/** Checks whether this version of Anope is at least major.minor.patch.build
|
||||
* Throws a ModuleException if not
|
||||
* @param major The major version
|
||||
* @param minor The minor vesion
|
||||
* @param patch The patch version
|
||||
* @param build The build version
|
||||
*/
|
||||
static void RequireVersion(int major, int minor, int patch, int build);
|
||||
|
||||
/** Change the priority of one event in a module.
|
||||
* Each module event has a list of modules which are attached to that event type. If you wish to be called before or after other specific modules, you may use this
|
||||
* method (usually within void Module::Prioritize()) to set your events priority. You may use this call in other methods too, however, this is not supported behaviour
|
||||
@@ -1175,8 +1193,7 @@ class CoreExport ModuleManager
|
||||
*/
|
||||
static void ClearCallBacks(Module *m);
|
||||
|
||||
/** Unloading all modules, NEVER call this when Anope isn't shutting down.
|
||||
* Ever.
|
||||
/** Unloading all modules except the protocol module.
|
||||
*/
|
||||
static void UnloadAll();
|
||||
|
||||
@@ -1198,11 +1215,17 @@ class CoreExport ModuleManager
|
||||
*/
|
||||
static Service *GetService(const Anope::string &name);
|
||||
|
||||
/** Get the existing service key names
|
||||
* @return The keys
|
||||
*/
|
||||
static std::vector<Anope::string> GetServiceKeys();
|
||||
|
||||
private:
|
||||
/** Call the module_delete function to safely delete the module
|
||||
* @param m the module to delete
|
||||
* @return MOD_ERR_OK on success, anything else on fail
|
||||
*/
|
||||
static void DeleteModule(Module *m);
|
||||
static ModuleReturn DeleteModule(Module *m);
|
||||
};
|
||||
|
||||
/** Class used for callbacks within modules
|
||||
@@ -1225,17 +1248,6 @@ class CallBack : public Timer
|
||||
}
|
||||
};
|
||||
|
||||
class CoreExport Service : public Base
|
||||
{
|
||||
public:
|
||||
Module *owner;
|
||||
Anope::string name;
|
||||
|
||||
Service(Module *o, const Anope::string &n);
|
||||
|
||||
virtual ~Service();
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
class service_reference : public dynamic_reference<T>
|
||||
{
|
||||
@@ -1246,10 +1258,6 @@ class service_reference : public dynamic_reference<T>
|
||||
{
|
||||
}
|
||||
|
||||
virtual ~service_reference()
|
||||
{
|
||||
}
|
||||
|
||||
operator bool()
|
||||
{
|
||||
if (this->invalid)
|
||||
|
||||
@@ -1,46 +1,15 @@
|
||||
/* OperServ support
|
||||
*
|
||||
* (C) 2008-2010 Anope Team
|
||||
* (C) 2008-2011 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
*/
|
||||
|
||||
#ifndef OPERSERV_H
|
||||
#define OPERSERV_H
|
||||
|
||||
extern CoreExport std::vector<NewsItem *> News;
|
||||
extern CoreExport std::vector<std::bitset<32> > DefCon;
|
||||
extern CoreExport bool DefConModesSet;
|
||||
extern CoreExport Flags<ChannelModeName, CMODE_END * 2> DefConModesOn;
|
||||
extern CoreExport Flags<ChannelModeName, CMODE_END * 2> DefConModesOff;
|
||||
extern CoreExport std::map<ChannelModeName, Anope::string> DefConModesOnParams;
|
||||
#ifndef OPER_H
|
||||
#define OPER_H
|
||||
|
||||
class XLineManager;
|
||||
extern CoreExport XLineManager *SGLine;
|
||||
extern CoreExport XLineManager *SZLine;
|
||||
extern CoreExport XLineManager *SQLine;
|
||||
extern CoreExport XLineManager *SNLine;
|
||||
|
||||
extern CoreExport bool SetDefConParam(ChannelModeName, const Anope::string &);
|
||||
extern CoreExport bool GetDefConParam(ChannelModeName, Anope::string &);
|
||||
extern CoreExport void UnsetDefConParam(ChannelModeName);
|
||||
extern CoreExport bool CheckDefCon(DefconLevel Level);
|
||||
extern CoreExport bool CheckDefCon(int level, DefconLevel Level);
|
||||
extern CoreExport void AddDefCon(int level, DefconLevel Level);
|
||||
extern CoreExport void DelDefCon(int level, DefconLevel Level);
|
||||
|
||||
extern CoreExport void os_init();
|
||||
|
||||
extern CoreExport void oper_global(const Anope::string &nick, const char *fmt, ...);
|
||||
extern CoreExport void server_global(const Server *s, const Anope::string &message);
|
||||
|
||||
enum XLineType
|
||||
{
|
||||
X_SNLINE,
|
||||
X_SQLINE,
|
||||
X_SZLINE
|
||||
};
|
||||
|
||||
class CoreExport XLine
|
||||
{
|
||||
@@ -60,24 +29,29 @@ class CoreExport XLine
|
||||
Anope::string GetHost() const;
|
||||
};
|
||||
|
||||
class CoreExport XLineManager
|
||||
class CoreExport XLineManager : public Service
|
||||
{
|
||||
private:
|
||||
/* List of XLine managers we check users against in XLineManager::CheckAll */
|
||||
static std::list<XLineManager *> XLineManagers;
|
||||
|
||||
char type;
|
||||
protected:
|
||||
/* List of XLines in this XLineManager */
|
||||
std::vector<XLine *> XLines;
|
||||
public:
|
||||
/* List of XLine managers we check users against in XLineManager::CheckAll */
|
||||
static std::list<XLineManager *> XLineManagers;
|
||||
|
||||
/** Constructor
|
||||
*/
|
||||
XLineManager();
|
||||
XLineManager(Module *creator, const Anope::string &name, char t);
|
||||
|
||||
/** Destructor
|
||||
*/
|
||||
virtual ~XLineManager();
|
||||
|
||||
/** The type of xline provided by this service
|
||||
* @return The type
|
||||
*/
|
||||
const char &Type();
|
||||
|
||||
/** Register a XLineManager, places it in XLineManagers for use in XLineManager::CheckAll
|
||||
* It is important XLineManagers are registered in the proper order. Eg, if you had one akilling
|
||||
* clients and one handing them free olines, you would want the akilling one first. This way if a client
|
||||
@@ -129,20 +103,21 @@ class CoreExport XLineManager
|
||||
void Clear();
|
||||
|
||||
/** Add an entry to this XLine Manager
|
||||
* @param bi The bot error replies should be sent from
|
||||
* @param u The user adding the XLine
|
||||
* @param mask The mask of the XLine
|
||||
* @param creator The creator of the XLine
|
||||
* @param expires When this should expire
|
||||
* @param reaosn The reason
|
||||
* @return A pointer to the XLine
|
||||
*/
|
||||
virtual XLine *Add(BotInfo *bi, User *u, const Anope::string &mask, time_t expires, const Anope::string &reason);
|
||||
virtual XLine *Add(const Anope::string &mask, const Anope::string &creator, time_t expires, const Anope::string &reason);
|
||||
|
||||
private:
|
||||
/** Delete an XLine, eg, remove it from the IRCd.
|
||||
* @param x The xline
|
||||
*/
|
||||
virtual void Del(XLine *x);
|
||||
|
||||
public:
|
||||
/** Checks if a mask can/should be added to the XLineManager
|
||||
* @param mask The mask
|
||||
* @param expires When the mask would expire
|
||||
@@ -176,57 +151,12 @@ class CoreExport XLineManager
|
||||
* @param x The xline
|
||||
*/
|
||||
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;
|
||||
};
|
||||
|
||||
/* This is for AKILLS */
|
||||
class SGLineManager : public XLineManager
|
||||
{
|
||||
public:
|
||||
XLine *Add(BotInfo *bi, User *u, const Anope::string &mask, time_t expires, const Anope::string &reason);
|
||||
|
||||
void Del(XLine *x);
|
||||
|
||||
void OnMatch(User *u, XLine *x);
|
||||
|
||||
void OnExpire(XLine *x);
|
||||
};
|
||||
|
||||
class SNLineManager : public XLineManager
|
||||
{
|
||||
public:
|
||||
XLine *Add(BotInfo *bi, User *u, const Anope::string &mask, time_t expires, const Anope::string &reason);
|
||||
|
||||
void Del(XLine *x);
|
||||
|
||||
void OnMatch(User *u, XLine *x);
|
||||
|
||||
void OnExpire(XLine *x);
|
||||
};
|
||||
|
||||
class SQLineManager : public XLineManager
|
||||
{
|
||||
public:
|
||||
XLine *Add(BotInfo *bi, User *u, const Anope::string &mask, time_t expires, const Anope::string &reason);
|
||||
|
||||
void Del(XLine *x);
|
||||
|
||||
void OnMatch(User *u, XLine *x);
|
||||
|
||||
void OnExpire(XLine *x);
|
||||
|
||||
static bool Check(Channel *c);
|
||||
};
|
||||
|
||||
class SZLineManager : public XLineManager
|
||||
{
|
||||
public:
|
||||
XLine *Add(BotInfo *bi, User *u, const Anope::string &mask, time_t expires, const Anope::string &reason);
|
||||
|
||||
void Del(XLine *x);
|
||||
|
||||
void OnMatch(User *u, XLine *x);
|
||||
|
||||
void OnExpire(XLine *x);
|
||||
};
|
||||
|
||||
#endif // OPERSERV_H
|
||||
#endif // OPER_H
|
||||
+42
-2
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2010 Robin Burchell <w00t@inspircd.org>
|
||||
* Copyright (C) 2008-2010 Anope Team <team@anope.org>
|
||||
* Copyright (C) 2008-2011 Robin Burchell <w00t@inspircd.org>
|
||||
* Copyright (C) 2008-2011 Anope Team <team@anope.org>
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
*/
|
||||
@@ -10,6 +10,26 @@
|
||||
|
||||
#include "hashcomp.h"
|
||||
|
||||
class OperType;
|
||||
|
||||
struct CoreExport Oper
|
||||
{
|
||||
Anope::string name;
|
||||
Anope::string password;
|
||||
Anope::string certfp;
|
||||
OperType *ot;
|
||||
bool config;
|
||||
|
||||
Oper(const Anope::string &n, const Anope::string &p, const Anope::string &c, OperType *o) :
|
||||
name(n), password(p), certfp(c), ot(o), config(false) { }
|
||||
|
||||
/** 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:
|
||||
@@ -36,6 +56,16 @@ class CoreExport OperType
|
||||
*/
|
||||
std::set<OperType *> inheritances;
|
||||
public:
|
||||
/** Modes to set when someone identifys using this opertype
|
||||
*/
|
||||
Anope::string modes;
|
||||
|
||||
/** 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".
|
||||
*/
|
||||
@@ -71,6 +101,16 @@ 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
|
||||
|
||||
+114
-60
@@ -1,6 +1,6 @@
|
||||
/* Modular support
|
||||
*
|
||||
* (C) 2008-2010 Anope Team
|
||||
* (C) 2008-2011 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
@@ -9,7 +9,7 @@
|
||||
#ifndef REGCHANNEL_H
|
||||
#define REGCHANNEL_H
|
||||
|
||||
typedef unordered_map_namespace::unordered_map<Anope::string, ChannelInfo *, ci::hash, std::equal_to<ci::string> > registered_channel_map;
|
||||
typedef Anope::insensitive_map<ChannelInfo *> registered_channel_map;
|
||||
extern CoreExport registered_channel_map RegisteredChannelList;
|
||||
|
||||
/** Flags used for the ChannelInfo class
|
||||
@@ -18,8 +18,6 @@ enum ChannelInfoFlag
|
||||
{
|
||||
CI_BEGIN,
|
||||
|
||||
/* ChanServ is currently holding the channel */
|
||||
CI_INHABIT,
|
||||
/* Retain the topic even after the channel is emptied */
|
||||
CI_KEEPTOPIC,
|
||||
/* Don't allow non-authorized users to be opped */
|
||||
@@ -34,8 +32,6 @@ enum ChannelInfoFlag
|
||||
CI_PEACE,
|
||||
/* Don't allow any privileges unless a user is IDENTIFIED with NickServ */
|
||||
CI_SECURE,
|
||||
/* Don't allow the channel to be registered or used */
|
||||
CI_FORBIDDEN,
|
||||
/* Channel does not expire */
|
||||
CI_NO_EXPIRE,
|
||||
/* Channel memo limit may not be changed */
|
||||
@@ -48,8 +44,6 @@ enum ChannelInfoFlag
|
||||
CI_SIGNKICK,
|
||||
/* Sign kicks if level is < than the one defined by the SIGNKIGK level */
|
||||
CI_SIGNKICK_LEVEL,
|
||||
/* Uses XOP */
|
||||
CI_XOP,
|
||||
/* Channel is suspended */
|
||||
CI_SUSPENDED,
|
||||
/* Channel still exists when emptied, this can be caused by setting a perm
|
||||
@@ -62,28 +56,75 @@ enum ChannelInfoFlag
|
||||
CI_END
|
||||
};
|
||||
|
||||
const Anope::string ChannelInfoFlagStrings[] = {
|
||||
"BEGIN", "KEEPTOPIC", "SECUREOPS", "PRIVATE", "TOPICLOCK", "RESTRICTED",
|
||||
"PEACE", "SECURE", "NO_EXPIRE", "MEMO_HARDMAX", "OPNOTICE", "SECUREFOUNDER",
|
||||
"SIGNKICK", "SIGNKICK_LEVEL", "SUSPENDED", "PERSIST", ""
|
||||
};
|
||||
|
||||
/** 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:
|
||||
std::map<ChannelModeName, Anope::string> Params; /* Map of parameters by mode name for mlock */
|
||||
std::vector<ChanAccess *> access; /* List of authorized users */
|
||||
NickCore *founder; /* Channel founder */
|
||||
std::vector<ChanAccess *> access; /* List of authorized users */
|
||||
std::vector<AutoKick *> akick; /* List of users to kickban */
|
||||
std::vector<BadWord *> badwords; /* List of badwords */
|
||||
Flags<ChannelModeName, CMODE_END * 2> mlock_on; /* Modes mlocked on */
|
||||
Flags<ChannelModeName, CMODE_END * 2> mlock_off; /* Modes mlocked off */
|
||||
|
||||
public:
|
||||
typedef std::multimap<ChannelModeName, ModeLock> ModeList;
|
||||
ModeList mode_locks;
|
||||
|
||||
/** Default constructor
|
||||
* @param chname The channel name
|
||||
*/
|
||||
ChannelInfo(const Anope::string &chname);
|
||||
|
||||
/** Copy constructor
|
||||
* @param ci The ChannelInfo to copy settings to
|
||||
*/
|
||||
ChannelInfo(ChannelInfo &ci);
|
||||
|
||||
/** Default destructor
|
||||
*/
|
||||
~ChannelInfo();
|
||||
|
||||
Anope::string name; /* Channel name */
|
||||
NickCore *founder;
|
||||
NickCore *successor; /* Who gets the channel if the founder nick is dropped or expires */
|
||||
Anope::string desc;
|
||||
|
||||
@@ -94,38 +135,41 @@ class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag,
|
||||
Anope::string last_topic_setter; /* Setter */
|
||||
time_t last_topic_time; /* Time */
|
||||
|
||||
Anope::string forbidby;
|
||||
Anope::string forbidreason;
|
||||
|
||||
int16 bantype;
|
||||
int16 *levels; /* Access levels for commands */
|
||||
|
||||
Anope::string entry_message; /* Notice sent on entering channel */
|
||||
int16 levels[CA_SIZE];
|
||||
|
||||
MemoInfo memos;
|
||||
|
||||
Channel *c; /* Pointer to channel record (if channel is currently in use) */
|
||||
|
||||
/* For BotServ */
|
||||
|
||||
BotInfo *bi; /* Bot used on this channel */
|
||||
Flags<BotServFlag> botflags;
|
||||
int16 *ttb; /* Times to ban for each kicker */
|
||||
int16 ttb[TTB_SIZE]; /* Times to ban for each kicker */
|
||||
|
||||
int16 capsmin, capspercent; /* For CAPS kicker */
|
||||
int16 floodlines, floodsecs; /* For FLOOD kicker */
|
||||
int16 repeattimes; /* For REPEAT kicker */
|
||||
|
||||
/** Add an entry to the channel access list
|
||||
*
|
||||
* @param nc The NickCore of the user that the access entry should be tied to
|
||||
* @param level The channel access level the user has on the channel
|
||||
* @param creator The user who added the access
|
||||
* @param last_seen When the user was last seen within the channel
|
||||
*
|
||||
* Creates a new access list entry and inserts it into the access list.
|
||||
/** Change the founder of the channek
|
||||
* @params nc The new founder
|
||||
*/
|
||||
void AddAccess(NickCore *nc, int16 level, const Anope::string &creator, int32 last_seen = 0);
|
||||
void SetFounder(NickCore *nc);
|
||||
|
||||
/** Get the founder of the channel
|
||||
* @return The founder
|
||||
*/
|
||||
NickCore *GetFounder() const;
|
||||
|
||||
/** Find which bot should send mode/topic/etc changes for this channel
|
||||
* @return The bot
|
||||
*/
|
||||
BotInfo *WhoSends();
|
||||
|
||||
/** Add an entry to the channel access list
|
||||
* @param access The entry
|
||||
*/
|
||||
void AddAccess(ChanAccess *access);
|
||||
|
||||
/** Get an entry from the channel access list by index
|
||||
*
|
||||
@@ -136,15 +180,11 @@ class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag,
|
||||
*/
|
||||
ChanAccess *GetAccess(unsigned index);
|
||||
|
||||
/** Get an entry from the channel access list by NickCore
|
||||
*
|
||||
* @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.
|
||||
/** Retrieve the access for a user or group in the form of a vector of access entries
|
||||
* (as multiple entries can affect a single user).
|
||||
*/
|
||||
ChanAccess *GetAccess(const NickCore *nc, int16 level = 0);
|
||||
AccessGroup AccessFor(User *u);
|
||||
AccessGroup AccessFor(NickCore *nc);
|
||||
|
||||
/** Get the size of the accss vector for this channel
|
||||
* @return The access vector size
|
||||
@@ -159,6 +199,14 @@ 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.
|
||||
@@ -236,51 +284,57 @@ class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag,
|
||||
void LoadMLock();
|
||||
|
||||
/** Check if a mode is mlocked
|
||||
* @param Name The mode
|
||||
* @param mode The mode
|
||||
* @param An optional param
|
||||
* @param status True to check mlock on, false for mlock off
|
||||
* @return true on success, false on fail
|
||||
*/
|
||||
bool HasMLock(ChannelModeName Name, bool status) const;
|
||||
bool HasMLock(ChannelMode *mode, const Anope::string ¶m, bool status) const;
|
||||
|
||||
/** Set a mlock
|
||||
* @param Name The mode
|
||||
* @param mode 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(ChannelModeName Name, bool status, const Anope::string ¶m = "");
|
||||
bool SetMLock(ChannelMode *mode, bool status, const Anope::string ¶m = "", Anope::string setter = "", time_t created = Anope::CurTime);
|
||||
|
||||
/** Remove a mlock
|
||||
* @param Name The mode
|
||||
* @return true on success, false on failure (module blcoking)
|
||||
* @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
|
||||
*/
|
||||
bool RemoveMLock(ChannelModeName Name);
|
||||
bool RemoveMLock(ChannelMode *mode, const Anope::string ¶m = "");
|
||||
|
||||
/** Clear all mlocks on the channel
|
||||
*/
|
||||
void ClearMLock();
|
||||
|
||||
/** Get the number of mlocked modes for this channel
|
||||
* @param status true for mlock on, false for mlock off
|
||||
* @return The number of mlocked modes
|
||||
/** Get all of the mlocks for this channel
|
||||
* @return The mlocks
|
||||
*/
|
||||
size_t GetMLockCount(bool status) const;
|
||||
const std::multimap<ChannelModeName, ModeLock> &GetMLock() const;
|
||||
|
||||
/** Get a param from the channel
|
||||
* @param Name The mode
|
||||
* @param Target a string to put the param into
|
||||
* @return true on success
|
||||
/** 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
|
||||
*/
|
||||
bool GetParam(ChannelModeName Name, Anope::string &Target) const;
|
||||
std::pair<ModeList::iterator, ModeList::iterator> GetModeList(ChannelModeName Name);
|
||||
|
||||
/** Check if a mode is set and has a param
|
||||
* @param Name The mode
|
||||
/** Get details for a specific mlock
|
||||
* @param mname The mode name
|
||||
* @param An optional param to match with
|
||||
* @return The MLock, if any
|
||||
*/
|
||||
bool HasParam(ChannelModeName Name) const;
|
||||
ModeLock *GetMLock(ChannelModeName mname, const Anope::string ¶m = "");
|
||||
|
||||
/** Clear all the params from the channel
|
||||
/** Get the current mode locks as a string
|
||||
* @param complete True to show mlock parameters aswell
|
||||
* @return A string of mode locks, eg: +nrt
|
||||
*/
|
||||
void ClearParams();
|
||||
Anope::string GetMLockAsString(bool complete) const;
|
||||
|
||||
/** Check whether a user is permitted to be on this channel
|
||||
* @param u The user
|
||||
@@ -303,7 +357,7 @@ class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag,
|
||||
/** A timer used to keep the BotServ bot/ChanServ in the channel
|
||||
* after kicking the last user in a channel
|
||||
*/
|
||||
class ChanServTimer : public Timer
|
||||
class CoreExport ChanServTimer : public Timer
|
||||
{
|
||||
private:
|
||||
dynamic_reference<Channel> c;
|
||||
|
||||
+9
-35
@@ -4,13 +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();
|
||||
extern CoreExport const Anope::string ts6_uid_retrieve();
|
||||
extern CoreExport const Anope::string ts6_sid_retrieve();
|
||||
|
||||
/* Types of capab
|
||||
*/
|
||||
@@ -21,33 +18,7 @@ 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
|
||||
};
|
||||
@@ -73,6 +44,8 @@ enum ServerFlag
|
||||
SERVER_JUPED
|
||||
};
|
||||
|
||||
const Anope::string ServerFlagStrings[] = { "SERVER_NONE", "SERVER_SYNCING", "SERVER_JUPED", "" };
|
||||
|
||||
/** Class representing a server
|
||||
*/
|
||||
class CoreExport Server : public Flags<ServerFlag>
|
||||
@@ -134,6 +107,11 @@ class CoreExport Server : public Flags<ServerFlag>
|
||||
*/
|
||||
const Anope::string &GetDescription() const;
|
||||
|
||||
/** Change this servers SID
|
||||
* @param sid The new SID
|
||||
*/
|
||||
void SetSID(const Anope::string &sid);
|
||||
|
||||
/** Get the server numeric/SID
|
||||
* @return The numeric/SID
|
||||
*/
|
||||
@@ -159,10 +137,6 @@ 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)
|
||||
*/
|
||||
|
||||
+195
-289
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
*
|
||||
* (C) 2003-2010 Anope Team
|
||||
* (C) 2003-2011 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for furhter details.
|
||||
* Please read COPYING and README for further details.
|
||||
*
|
||||
* Based on the original code of Epona by Lara.
|
||||
* Based on the original code of Services by Andy Church.
|
||||
@@ -43,6 +43,11 @@
|
||||
#include <fcntl.h>
|
||||
#include <typeinfo>
|
||||
|
||||
#if GETTEXT_FOUND
|
||||
# include <libintl.h>
|
||||
#endif
|
||||
#define _(x) x
|
||||
|
||||
#ifndef _WIN32
|
||||
# include <unistd.h>
|
||||
# include <grp.h>
|
||||
@@ -50,40 +55,14 @@
|
||||
# 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>
|
||||
# endif
|
||||
# define DllExport
|
||||
# define CoreExport
|
||||
# define MARK_DEPRECATED __attribute((deprecated))
|
||||
# define DeleteFile unlink
|
||||
#else
|
||||
# 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);
|
||||
# include "anope_windows.h"
|
||||
#endif
|
||||
|
||||
/* Telling compilers about printf()-like functions: */
|
||||
@@ -93,18 +72,10 @@ extern CoreExport const char *inet_ntop(int af, const void *src, char *dst, size
|
||||
# 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. */
|
||||
@@ -128,18 +99,6 @@ 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.
|
||||
@@ -280,6 +239,23 @@ class DatabaseException : public CoreException
|
||||
virtual ~DatabaseException() throw() { }
|
||||
};
|
||||
|
||||
class Signal
|
||||
{
|
||||
static std::vector<Signal *> SignalHandlers;
|
||||
static void SignalHandler(int signal);
|
||||
|
||||
struct sigaction action, old;
|
||||
sig_atomic_t called;
|
||||
public:
|
||||
static void Process();
|
||||
|
||||
int signal;
|
||||
|
||||
Signal(int s);
|
||||
~Signal();
|
||||
virtual void OnSignal() = 0;
|
||||
};
|
||||
|
||||
/** Debug cast to be used instead of dynamic_cast, this uses dynamic_cast
|
||||
* for debug builds and static_cast on releass builds to speed up the program
|
||||
* because dynamic_cast relies on RTTI.
|
||||
@@ -305,8 +281,12 @@ template<typename T, size_t Size = 32> class Flags
|
||||
{
|
||||
protected:
|
||||
std::bitset<Size> Flag_Values;
|
||||
const Anope::string *Flag_Strings;
|
||||
|
||||
public:
|
||||
Flags() : Flag_Strings(NULL) { }
|
||||
Flags(const Anope::string *flag_strings) : Flag_Strings(flag_strings) { }
|
||||
|
||||
/** Add a flag to this item
|
||||
* @param Value The flag
|
||||
*/
|
||||
@@ -346,8 +326,39 @@ 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));
|
||||
}
|
||||
};
|
||||
|
||||
class Module;
|
||||
|
||||
class CoreExport Service : public Base
|
||||
{
|
||||
public:
|
||||
Module *owner;
|
||||
Anope::string name;
|
||||
|
||||
Service(Module *o, const Anope::string &n);
|
||||
|
||||
virtual ~Service();
|
||||
};
|
||||
|
||||
|
||||
#include "sockets.h"
|
||||
#include "socketengine.h"
|
||||
#include "extensible.h"
|
||||
@@ -356,12 +367,20 @@ 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 CoreException("Stringify fail");
|
||||
throw ConvertException("Stringify fail");
|
||||
|
||||
return stream.str();
|
||||
}
|
||||
@@ -373,11 +392,11 @@ template<typename T> inline void convert(const Anope::string &s, T &x, Anope::st
|
||||
char c;
|
||||
bool res = i >> x;
|
||||
if (!res)
|
||||
throw CoreException("Convert fail");
|
||||
throw ConvertException("Convert fail");
|
||||
if (failIfLeftoverChars)
|
||||
{
|
||||
if (i.get(c))
|
||||
throw CoreException("Convert fail");
|
||||
throw ConvertException("Convert fail");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -412,13 +431,11 @@ 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;
|
||||
struct EList;
|
||||
struct Session;
|
||||
class Entry;
|
||||
|
||||
#include "threadengine.h"
|
||||
#include "opertype.h"
|
||||
@@ -432,7 +449,6 @@ 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 */
|
||||
@@ -441,8 +457,6 @@ 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 */
|
||||
@@ -452,11 +466,9 @@ 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 */
|
||||
};
|
||||
|
||||
/*************************************************************************/
|
||||
@@ -467,17 +479,20 @@ enum MemoFlag
|
||||
{
|
||||
/* Memo is unread */
|
||||
MF_UNREAD,
|
||||
/* SEnder requests a receipt */
|
||||
MF_RECEIPT,
|
||||
/* Memo is a notification of receipt */
|
||||
MF_NOTIFYS
|
||||
/* Sender requests a receipt */
|
||||
MF_RECEIPT
|
||||
};
|
||||
|
||||
const Anope::string MemoFlagStrings[] = {
|
||||
"MF_UNREAD", "MF_RECEIPT", ""
|
||||
};
|
||||
|
||||
/* 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 Memo : public Flags<MemoFlag>
|
||||
class CoreExport Memo : public Flags<MemoFlag>
|
||||
{
|
||||
public:
|
||||
Memo();
|
||||
time_t time; /* When it was sent */
|
||||
Anope::string sender;
|
||||
Anope::string text;
|
||||
@@ -485,12 +500,31 @@ class Memo : public Flags<MemoFlag>
|
||||
|
||||
struct CoreExport MemoInfo
|
||||
{
|
||||
unsigned memomax;
|
||||
int16 memomax;
|
||||
std::vector<Memo *> memos;
|
||||
std::vector<Anope::string> ignores;
|
||||
|
||||
unsigned GetIndex(Memo *m) const;
|
||||
void Del(unsigned index);
|
||||
void Del(Memo *m);
|
||||
bool HasIgnore(User *u);
|
||||
};
|
||||
|
||||
struct Session
|
||||
{
|
||||
Anope::string host; /* Host of the session */
|
||||
unsigned count; /* Number of clients with this host */
|
||||
unsigned hits; /* Number of subsequent kills for a host */
|
||||
};
|
||||
|
||||
struct Exception
|
||||
{
|
||||
Anope::string mask; /* Hosts to which this exception applies */
|
||||
unsigned limit; /* Session limit for exception */
|
||||
Anope::string who; /* Nick of person who added the exception */
|
||||
Anope::string reason; /* Reason for exception's addition */
|
||||
time_t time; /* When this exception was added */
|
||||
time_t expires; /* Time when it expires. 0 == no expiry */
|
||||
};
|
||||
|
||||
/*************************************************************************/
|
||||
@@ -542,66 +576,6 @@ class CoreExport HostInfo
|
||||
const time_t GetTime() const;
|
||||
};
|
||||
|
||||
enum AccessLevel
|
||||
{
|
||||
/* Note that these two levels also serve as exclusive boundaries for valid
|
||||
* access levels. ACCESS_FOUNDER may be assumed to be strictly greater
|
||||
* than any valid access level, and ACCESS_INVALID may be assumed to be
|
||||
* strictly less than any valid access level. Also read below.
|
||||
*/
|
||||
ACCESS_FOUNDER = 10001, /* Numeric level indicating founder access */
|
||||
ACCESS_INVALID = -10000, /* Used in levels[] for disabled settings */
|
||||
/* There is one exception to the above access levels: SuperAdmins will have
|
||||
* access level 10001. This level is never stored, however; it is only used
|
||||
* in comparison and to let SuperAdmins win from founders where needed
|
||||
*/
|
||||
ACCESS_SUPERADMIN = 10002,
|
||||
/* Levels for xOP */
|
||||
ACCESS_VOP = 3,
|
||||
ACCESS_HOP = 4,
|
||||
ACCESS_AOP = 5,
|
||||
ACCESS_SOP = 10,
|
||||
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
|
||||
@@ -623,52 +597,6 @@ struct BadWord
|
||||
BadWordType type;
|
||||
};
|
||||
|
||||
/* Indices for cmd_access[]: */
|
||||
enum ChannelAccess
|
||||
{
|
||||
CA_INVITE,
|
||||
CA_AKICK,
|
||||
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,
|
||||
CA_ASSIGN, /* BotServ ASSIGN command */
|
||||
CA_BADWORDS, /* BotServ BADWORDS command */
|
||||
CA_NOKICK, /* Not kicked by the bot */
|
||||
CA_FANTASIA,
|
||||
CA_SAY,
|
||||
CA_GREET,
|
||||
CA_VOICEME,
|
||||
CA_VOICE,
|
||||
CA_GETKEY,
|
||||
CA_AUTOHALFOP,
|
||||
CA_AUTOPROTECT,
|
||||
CA_OPDEOPME,
|
||||
CA_HALFOPME,
|
||||
CA_HALFOP,
|
||||
CA_PROTECTME,
|
||||
CA_PROTECT,
|
||||
CA_KICKME,
|
||||
CA_KICK,
|
||||
CA_SIGNKICK,
|
||||
CA_BANME,
|
||||
CA_BAN,
|
||||
CA_TOPIC,
|
||||
CA_INFO,
|
||||
CA_AUTOOWNER,
|
||||
CA_OWNER,
|
||||
CA_OWNERME,
|
||||
CA_FOUNDER,
|
||||
CA_SIZE
|
||||
};
|
||||
|
||||
/* BotServ SET flags */
|
||||
enum BotServFlag
|
||||
{
|
||||
@@ -679,8 +607,6 @@ enum BotServFlag
|
||||
BS_DONTKICKVOICES,
|
||||
/* BotServ bot accepts fantasy commands */
|
||||
BS_FANTASY,
|
||||
/* BotServ bot sets modes etc instead of ChanServ */
|
||||
BS_SYMBIOSIS,
|
||||
/* BotServ should show greets */
|
||||
BS_GREET,
|
||||
/* BotServ bots are not allowed to be in this channel */
|
||||
@@ -703,9 +629,24 @@ 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", "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
|
||||
{
|
||||
@@ -718,9 +659,11 @@ enum
|
||||
TTB_FLOOD,
|
||||
TTB_REPEAT,
|
||||
TTB_ITALICS,
|
||||
TTB_AMSGS,
|
||||
TTB_SIZE
|
||||
};
|
||||
|
||||
#include "access.h"
|
||||
#include "regchannel.h"
|
||||
|
||||
/*************************************************************************/
|
||||
@@ -729,25 +672,10 @@ enum
|
||||
* user is kicked.
|
||||
*/
|
||||
|
||||
#include "language.h"
|
||||
#include "users.h"
|
||||
#include "account.h"
|
||||
#include "commands.h"
|
||||
#include "bots.h"
|
||||
|
||||
struct BanData
|
||||
{
|
||||
Anope::string mask; /* Since a nick is unsure and a User structure is unsafe */
|
||||
time_t last_use; /* Since time is the only way to check whether it's still useful */
|
||||
int16 ttb[TTB_SIZE];
|
||||
};
|
||||
|
||||
struct LevelInfo
|
||||
{
|
||||
int what;
|
||||
Anope::string name;
|
||||
LanguageString desc;
|
||||
};
|
||||
|
||||
#include "channels.h"
|
||||
|
||||
/** Channelban type flags
|
||||
@@ -755,7 +683,7 @@ struct LevelInfo
|
||||
enum EntryType
|
||||
{
|
||||
ENTRYTYPE_NONE,
|
||||
ENTRYTYPE_CIDR4,
|
||||
ENTRYTYPE_CIDR,
|
||||
ENTRYTYPE_NICK_WILD,
|
||||
ENTRYTYPE_NICK,
|
||||
ENTRYTYPE_USER_WILD,
|
||||
@@ -764,56 +692,32 @@ enum EntryType
|
||||
ENTRYTYPE_HOST
|
||||
};
|
||||
|
||||
class Entry : public Flags<EntryType>
|
||||
class CoreExport Entry : public Flags<EntryType>
|
||||
{
|
||||
ChannelModeName modename;
|
||||
|
||||
public:
|
||||
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
|
||||
{
|
||||
unsigned char cidr_len;
|
||||
Anope::string mask;
|
||||
time_t time; /* When do we stop ignoring them? */
|
||||
};
|
||||
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);
|
||||
|
||||
/* News stuff */
|
||||
/** Get the banned mask for this entry
|
||||
* @return The mask
|
||||
*/
|
||||
const Anope::string GetMask();
|
||||
|
||||
enum NewsType
|
||||
{
|
||||
NEWS_LOGON,
|
||||
NEWS_RANDOM,
|
||||
NEWS_OPER
|
||||
};
|
||||
|
||||
struct NewsMessages
|
||||
{
|
||||
NewsType type;
|
||||
Anope::string name;
|
||||
LanguageString msgs[10];
|
||||
};
|
||||
|
||||
struct NewsItem
|
||||
{
|
||||
NewsType type;
|
||||
uint32 num;
|
||||
Anope::string Text;
|
||||
Anope::string who;
|
||||
time_t time;
|
||||
/** 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;
|
||||
};
|
||||
|
||||
/*************************************************************************/
|
||||
@@ -825,49 +729,11 @@ struct MailInfo
|
||||
FILE *pipe;
|
||||
User *sender;
|
||||
NickCore *recipient;
|
||||
NickRequest *recip;
|
||||
};
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
struct Exception
|
||||
{
|
||||
Anope::string mask; /* Hosts to which this exception applies */
|
||||
unsigned limit; /* Session limit for exception */
|
||||
Anope::string who; /* Nick of person who added the exception */
|
||||
Anope::string reason; /* Reason for exception's addition */
|
||||
time_t time; /* When this exception was added */
|
||||
time_t expires; /* Time when it expires. 0 == no expiry */
|
||||
};
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
typedef unordered_map_namespace::unordered_map<Anope::string, Session *, Anope::hash> session_map;
|
||||
extern CoreExport session_map SessionList;
|
||||
|
||||
struct Session
|
||||
{
|
||||
Anope::string host;
|
||||
unsigned count; /* Number of clients with this host */
|
||||
unsigned hits; /* Number of subsequent kills for a host */
|
||||
};
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/* Defcon */
|
||||
enum DefconLevel
|
||||
{
|
||||
DEFCON_NO_NEW_CHANNELS,
|
||||
DEFCON_NO_NEW_NICKS,
|
||||
DEFCON_NO_MLOCK_CHANGE,
|
||||
DEFCON_FORCE_CHAN_MODES,
|
||||
DEFCON_REDUCE_SESSION,
|
||||
DEFCON_NO_NEW_CLIENTS,
|
||||
DEFCON_OPER_ONLY,
|
||||
DEFCON_SILENT_OPER_ONLY,
|
||||
DEFCON_AKILL_NEW_CLIENTS,
|
||||
DEFCON_NO_NEW_MEMOS
|
||||
};
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
@@ -886,11 +752,14 @@ 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;
|
||||
class XLine;
|
||||
|
||||
#include "extern.h"
|
||||
#include "operserv.h"
|
||||
#include "language.h"
|
||||
#include "mail.h"
|
||||
#include "servers.h"
|
||||
#include "logger.h"
|
||||
@@ -915,16 +784,15 @@ class CoreExport IRCDProto
|
||||
public:
|
||||
virtual ~IRCDProto() { }
|
||||
|
||||
virtual void SendSVSNOOP(const Anope::string &, int) { }
|
||||
virtual void SendSVSNOOP(const Server *, bool) { }
|
||||
virtual void SendTopic(BotInfo *, Channel *) = 0;
|
||||
virtual void SendVhostDel(User *) { }
|
||||
virtual void SendAkill(const XLine *) = 0;
|
||||
virtual void SendAkill(User *, 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;
|
||||
virtual void SendClientIntroduction(const User *u) = 0;
|
||||
virtual void SendKick(const BotInfo *bi, const Channel *chan, const User *user, const char *fmt, ...);
|
||||
virtual void SendNoticeChanops(const BotInfo *bi, const Channel *dest, const char *fmt, ...);
|
||||
virtual void SendMessage(const BotInfo *bi, const Anope::string &dest, const char *fmt, ...);
|
||||
@@ -937,13 +805,12 @@ 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(const BotInfo *, const Anope::string &, time_t) = 0;
|
||||
virtual void SendJoin(BotInfo *, const ChannelContainer *);
|
||||
virtual void SendSQLineDel(const XLine *x) = 0;
|
||||
virtual void SendJoin(User *, Channel *, const ChannelStatus *) = 0;
|
||||
virtual void SendSQLineDel(const XLine *x) { }
|
||||
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(const XLine *x) = 0;
|
||||
virtual void SendSQLine(User *, const XLine *x) { }
|
||||
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);
|
||||
@@ -954,14 +821,11 @@ class CoreExport IRCDProto
|
||||
virtual void SendSVSHoldDel(const Anope::string &) { }
|
||||
virtual void SendSGLineDel(const XLine *) { }
|
||||
virtual void SendSZLineDel(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 SendSZLine(User *u, const XLine *) { }
|
||||
virtual void SendSGLine(User *, const XLine *) { }
|
||||
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() { }
|
||||
@@ -986,6 +850,35 @@ 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> &);
|
||||
};
|
||||
|
||||
/*************************************************************************/
|
||||
@@ -998,6 +891,19 @@ struct Uplink
|
||||
bool ipv6;
|
||||
|
||||
Uplink(const Anope::string &_host, int _port, const Anope::string &_password, bool _ipv6) : host(_host), port(_port), password(_password), ipv6(_ipv6) { }
|
||||
bool operator==(const Uplink &other) const
|
||||
{
|
||||
if (this->host != other.host)
|
||||
return false;
|
||||
if (this->port != other.port)
|
||||
return false;
|
||||
if (this->password != other.password)
|
||||
return false;
|
||||
if (this->ipv6 != other.ipv6)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
inline bool operator!=(const Uplink &other) const { return !(*this == other); }
|
||||
};
|
||||
|
||||
/** A class to process numbered lists (passed to most DEL/LIST/VIEW commands).
|
||||
|
||||
+13
-17
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
*
|
||||
* (C) 2003-2010 Anope Team
|
||||
* (C) 2003-2011 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for furhter details.
|
||||
* Please read COPYING and README for further details.
|
||||
*
|
||||
* Based on the original code of Epona by Lara.
|
||||
* Based on the original code of Services by Andy Church.
|
||||
@@ -12,47 +12,43 @@
|
||||
#ifndef SOCKETENGINE_H
|
||||
#define SOCKETENGINE_H
|
||||
|
||||
class CoreExport SocketEngineBase
|
||||
class CoreExport SocketEngine
|
||||
{
|
||||
public:
|
||||
#ifdef _WIN32
|
||||
/* Windows crap */
|
||||
WSADATA wsa;
|
||||
#endif
|
||||
/* Map of sockets */
|
||||
std::map<int, Socket *> Sockets;
|
||||
static std::map<int, Socket *> Sockets;
|
||||
|
||||
/** Default constructor
|
||||
/** Called to initialize the socket engine
|
||||
*/
|
||||
SocketEngineBase();
|
||||
static void Init();
|
||||
|
||||
/** Default destructor
|
||||
/** Called to shutdown the socket engine
|
||||
*/
|
||||
virtual ~SocketEngineBase();
|
||||
static void Shutdown();
|
||||
|
||||
/** Add a socket to the internal list
|
||||
* @param s The socket
|
||||
*/
|
||||
virtual void AddSocket(Socket *s) { }
|
||||
static void AddSocket(Socket *s);
|
||||
|
||||
/** Delete a socket from the internal list
|
||||
* @param s The socket
|
||||
*/
|
||||
virtual void DelSocket(Socket *s) { }
|
||||
static void DelSocket(Socket *s);
|
||||
|
||||
/** Mark a socket as writeable
|
||||
* @param s The socket
|
||||
*/
|
||||
virtual void MarkWritable(Socket *s) { }
|
||||
static void MarkWritable(Socket *s);
|
||||
|
||||
/** Unmark a socket as writeable
|
||||
* @param s The socket
|
||||
*/
|
||||
virtual void ClearWritable(Socket *s) { }
|
||||
static void ClearWritable(Socket *s);
|
||||
|
||||
/** Read from sockets and do things
|
||||
*/
|
||||
virtual void Process() { }
|
||||
static void Process();
|
||||
};
|
||||
|
||||
#endif // SOCKETENGINE_H
|
||||
|
||||
+94
-23
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
*
|
||||
* (C) 2003-2010 Anope Team
|
||||
* (C) 2003-2011 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for furhter details.
|
||||
* Please read COPYING and README for further details.
|
||||
*
|
||||
* Based on the original code of Epona by Lara.
|
||||
* Based on the original code of Services by Andy Church.
|
||||
@@ -80,6 +80,18 @@ 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:
|
||||
@@ -109,6 +121,8 @@ enum SocketFlag
|
||||
SF_WRITABLE
|
||||
};
|
||||
|
||||
static const Anope::string SocketFlagStrings[] = { "SF_DEAD", "SF_WRITABLE", "" };
|
||||
|
||||
class Socket;
|
||||
class ClientSocket;
|
||||
class ListenSocket;
|
||||
@@ -123,27 +137,46 @@ class CoreExport SocketIO
|
||||
* @param sz How much to read
|
||||
* @return Number of bytes received
|
||||
*/
|
||||
virtual int Recv(Socket *s, char *buf, size_t sz) const;
|
||||
virtual int Recv(Socket *s, char *buf, size_t sz);
|
||||
|
||||
/** Write something to the socket
|
||||
* @param s The socket
|
||||
* @param buf What to write
|
||||
* @return Number of bytes written
|
||||
*/
|
||||
virtual int Send(Socket *s, const Anope::string &buf) const;
|
||||
virtual int Send(Socket *s, const Anope::string &buf);
|
||||
|
||||
/** Accept a connection from a socket
|
||||
* @param s The socket
|
||||
* @return The new socket
|
||||
*/
|
||||
virtual void Accept(ListenSocket *s);
|
||||
virtual ClientSocket *Accept(ListenSocket *s);
|
||||
|
||||
/** Check if a connection has been accepted
|
||||
* @param s The client socket
|
||||
* @return -1 on error, 0 to wait, 1 on success
|
||||
*/
|
||||
virtual int Accepted(ClientSocket *cs);
|
||||
|
||||
/** Bind a socket
|
||||
* @param s The socket
|
||||
* @param ip The IP to bind to
|
||||
* @param port The optional port to bind to
|
||||
*/
|
||||
virtual void Bind(Socket *s, const Anope::string &ip, int port = 0);
|
||||
|
||||
/** Connect the socket
|
||||
* @param s THe socket
|
||||
* @param s The socket
|
||||
* @param target IP to connect to
|
||||
* @param port to connect to
|
||||
* @param bindip IP to bind to, if any
|
||||
*/
|
||||
virtual void Connect(ConnectionSocket *s, const Anope::string &target, int port, const Anope::string &bindip = "");
|
||||
virtual void Connect(ConnectionSocket *s, const Anope::string &target, int port);
|
||||
|
||||
/** Check if this socket is connected
|
||||
* @param s The socket
|
||||
* @return -1 for error, 0 for wait, 1 for connected
|
||||
*/
|
||||
virtual int Connected(ConnectionSocket *s);
|
||||
|
||||
/** Called when the socket is destructing
|
||||
*/
|
||||
@@ -159,6 +192,9 @@ class CoreExport Socket : public Flags<SocketFlag, 2>
|
||||
bool IPv6;
|
||||
|
||||
public:
|
||||
/* Sockaddrs for bind() (if it's bound) */
|
||||
sockaddrs bindaddr;
|
||||
|
||||
/* I/O functions used for this socket */
|
||||
SocketIO *IO;
|
||||
|
||||
@@ -200,6 +236,12 @@ class CoreExport Socket : public Flags<SocketFlag, 2>
|
||||
*/
|
||||
bool SetNonBlocking();
|
||||
|
||||
/** Bind the socket to an ip and port
|
||||
* @param ip The ip
|
||||
* @param port The port
|
||||
*/
|
||||
void Bind(const Anope::string &ip, int port = 0);
|
||||
|
||||
/** Called when there is something to be received for this socket
|
||||
* @return true on success, false to drop this socket
|
||||
*/
|
||||
@@ -220,11 +262,11 @@ class CoreExport BufferedSocket : public Socket
|
||||
{
|
||||
protected:
|
||||
/* Things to be written to the socket */
|
||||
std::string WriteBuffer;
|
||||
Anope::string WriteBuffer;
|
||||
/* Part of a message sent from the server, but not totally received */
|
||||
std::string extrabuf;
|
||||
Anope::string extrabuf;
|
||||
/* How much data was received from this socket */
|
||||
size_t RecvLen;
|
||||
int RecvLen;
|
||||
|
||||
public:
|
||||
/** Blank constructor
|
||||
@@ -267,20 +309,16 @@ class CoreExport BufferedSocket : public Socket
|
||||
/** Get the length of the read buffer
|
||||
* @return The length of the read buffer
|
||||
*/
|
||||
size_t ReadBufferLen() const;
|
||||
int ReadBufferLen() const;
|
||||
|
||||
/** Get the length of the write buffer
|
||||
* @return The length of the write buffer
|
||||
*/
|
||||
size_t WriteBufferLen() const;
|
||||
int WriteBufferLen() const;
|
||||
};
|
||||
|
||||
class CoreExport ListenSocket : public Socket
|
||||
{
|
||||
protected:
|
||||
/* Sockaddrs for bindip/port */
|
||||
sockaddrs listenaddrs;
|
||||
|
||||
public:
|
||||
/** Constructor
|
||||
* @param bindip The IP to bind to
|
||||
@@ -309,10 +347,10 @@ class CoreExport ListenSocket : public Socket
|
||||
class CoreExport ConnectionSocket : public BufferedSocket
|
||||
{
|
||||
public:
|
||||
/* Sockaddrs for bindip (if there is one) */
|
||||
sockaddrs bindaddr;
|
||||
/* Sockaddrs for connection ip/port */
|
||||
sockaddrs conaddr;
|
||||
/* True if connected */
|
||||
bool connected;
|
||||
|
||||
/** Constructor
|
||||
* @param ipv6 true to use IPv6
|
||||
@@ -323,18 +361,41 @@ class CoreExport ConnectionSocket : public BufferedSocket
|
||||
/** Connect the socket
|
||||
* @param TargetHost The target host to connect to
|
||||
* @param Port The target port to connect to
|
||||
* @param BindHost The host to bind to for connecting
|
||||
*/
|
||||
void Connect(const Anope::string &TargetHost, int Port, const Anope::string &BindHost = "");
|
||||
void Connect(const Anope::string &TargetHost, int Port);
|
||||
|
||||
/** Called when there is something to be received for this socket
|
||||
* @return true on success, false to drop this socket
|
||||
*/
|
||||
bool ProcessRead();
|
||||
|
||||
/** Called when the socket is ready to be written to
|
||||
* @return true on success, false to drop this socket
|
||||
*/
|
||||
bool ProcessWrite();
|
||||
|
||||
/** Called when there is an error for this socket
|
||||
* @return true on success, false to drop this socket
|
||||
*/
|
||||
void ProcessError();
|
||||
|
||||
/** Called on a successful connect
|
||||
*/
|
||||
virtual void OnConnect();
|
||||
|
||||
/** Called when a connection is not successful
|
||||
* @param error The error
|
||||
*/
|
||||
virtual void OnError(const Anope::string &error);
|
||||
};
|
||||
|
||||
class ClientSocket : public BufferedSocket
|
||||
class CoreExport 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
|
||||
@@ -342,6 +403,16 @@ class ClientSocket : public BufferedSocket
|
||||
* @param addr Address the connection came from
|
||||
*/
|
||||
ClientSocket(ListenSocket *ls, int fd, const sockaddrs &addr);
|
||||
|
||||
/** Called when there is something to be received for this socket
|
||||
* @return true on success, false to drop this socket
|
||||
*/
|
||||
bool ProcessRead();
|
||||
|
||||
/** Called when the socket is ready to be written to
|
||||
* @return true on success, false to drop this socket
|
||||
*/
|
||||
bool ProcessWrite();
|
||||
};
|
||||
|
||||
class CoreExport Pipe : public BufferedSocket
|
||||
|
||||
@@ -7,20 +7,16 @@
|
||||
#cmakedefine HAVE_SYS_TYPES_H 1
|
||||
#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 HAVE_EPOLL 1
|
||||
#cmakedefine HAVE_POLL 1
|
||||
#cmakedefine GETTEXT_FOUND 1
|
||||
#cmakedefine RUNGROUP "@RUNGROUP@"
|
||||
#define LIBINTL "@LIBINTL_INCLUDE@"
|
||||
|
||||
#cmakedefine HAVE_UINT8_T 1
|
||||
#cmakedefine HAVE_U_INT8_T 1
|
||||
@@ -104,9 +100,6 @@ typedef unsigned long uint32;
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
# ifdef MSVCPP
|
||||
# define snprintf _snprintf
|
||||
# endif
|
||||
# define popen _popen
|
||||
# define pclose _pclose
|
||||
# define ftruncate _chsize
|
||||
|
||||
+11
-1
@@ -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,6 +67,10 @@ 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
|
||||
*/
|
||||
@@ -99,6 +103,12 @@ 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
|
||||
|
||||
+7
-3
@@ -1,9 +1,9 @@
|
||||
/* Timer include stuff.
|
||||
*
|
||||
* (C) 2003-2010 Anope Team
|
||||
* (C) 2003-2011 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for furhter details.
|
||||
* Please read COPYING and README for further details.
|
||||
* Based on the original code of Epona by Lara.
|
||||
* Based on the original code of Services by Andy Church.
|
||||
*/
|
||||
@@ -63,6 +63,11 @@ class CoreExport Timer : public Extensible
|
||||
*/
|
||||
bool GetRepeat() const;
|
||||
|
||||
/** Set the interval between ticks
|
||||
* @paramt t The new interval
|
||||
*/
|
||||
void SetSecs(time_t t);
|
||||
|
||||
/** Returns the interval between ticks
|
||||
* @return The interval
|
||||
*/
|
||||
@@ -85,7 +90,6 @@ class CoreExport Timer : public Extensible
|
||||
*/
|
||||
class CoreExport TimerManager : public Extensible
|
||||
{
|
||||
protected:
|
||||
/** A list of timers
|
||||
*/
|
||||
static std::vector<Timer *> Timers;
|
||||
|
||||
+53
-27
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2010 Robin Burchell <w00t@inspircd.org>
|
||||
* Copyright (C) 2008-2010 Anope Team <team@anope.org>
|
||||
* Copyright (C) 2008-2011 Robin Burchell <w00t@inspircd.org>
|
||||
* Copyright (C) 2008-2011 Anope Team <team@anope.org>
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
*/
|
||||
@@ -8,18 +8,13 @@
|
||||
#ifndef USERS_H
|
||||
#define USERS_H
|
||||
|
||||
/* 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;
|
||||
extern CoreExport Anope::insensitive_map<User *> UserListByNick;
|
||||
extern CoreExport Anope::map<User *> UserListByUID;
|
||||
|
||||
class CoreExport ChannelStatus : public Flags<ChannelModeName, CMODE_END * 2>
|
||||
{
|
||||
public:
|
||||
ChannelStatus();
|
||||
Anope::string BuildCharPrefixList() const;
|
||||
Anope::string BuildModePrefixList() const;
|
||||
};
|
||||
@@ -54,12 +49,12 @@ 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 */
|
||||
time_t my_signon; /* When did _we_ see the user? */
|
||||
|
||||
int isSuperAdmin; /* is SuperAdmin on or off? */
|
||||
bool SuperAdmin; /* is SuperAdmin on or off? */
|
||||
|
||||
/* Channels the user is in */
|
||||
UChannelList chans;
|
||||
@@ -81,7 +76,7 @@ class CoreExport User : public Extensible
|
||||
* @param shost The hostname of the user
|
||||
* @param suid The unique identifier of the user.
|
||||
*/
|
||||
User(const Anope::string &snick, const Anope::string &sident, const Anope::string &shost, const Anope::string &suid);
|
||||
User(const Anope::string &snick, const Anope::string &sident, const Anope::string &shost, const Anope::string &suid = "");
|
||||
|
||||
/** Destroy a user.
|
||||
*/
|
||||
@@ -90,7 +85,7 @@ class CoreExport User : public Extensible
|
||||
/** Update the nickname of a user record accordingly, should be
|
||||
* called from ircd protocol.
|
||||
*/
|
||||
virtual void SetNewNick(const Anope::string &newnick);
|
||||
void SetNewNick(const Anope::string &newnick);
|
||||
|
||||
/** Update the displayed (vhost) of a user record.
|
||||
* This is used (if set) instead of real host.
|
||||
@@ -145,25 +140,22 @@ 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 nick
|
||||
* @param source Sender
|
||||
* @param fmt Format of the Message
|
||||
* @param ... any number of parameters
|
||||
*/
|
||||
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;
|
||||
void SendMessage(BotInfo *source, const char *fmt, ...);
|
||||
virtual void SendMessage(BotInfo *source, Anope::string msg);
|
||||
|
||||
/** Collide a nick
|
||||
* See the comment in users.cpp
|
||||
@@ -171,6 +163,13 @@ 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,19 +183,35 @@ 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) const;
|
||||
virtual bool IsIdentified(bool CheckNick = false);
|
||||
|
||||
/** 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) const;
|
||||
virtual bool IsRecognized(bool CheckSecure = true);
|
||||
|
||||
/** 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);
|
||||
|
||||
/** Update the last usermask stored for a user, and check to see if they are recognized
|
||||
*/
|
||||
@@ -256,6 +271,11 @@ class CoreExport User : public Extensible
|
||||
*/
|
||||
void SetModesInternal(const char *umodes, ...);
|
||||
|
||||
/** Get modes set for this user.
|
||||
* @return A string of modes set on the user
|
||||
*/
|
||||
Anope::string GetModes() const;
|
||||
|
||||
/** Find the channel container for Channel c that the user is on
|
||||
* This is preferred over using FindUser in Channel, as there are usually more users in a channel
|
||||
* than channels a user is in
|
||||
@@ -268,6 +288,12 @@ class CoreExport User : public Extensible
|
||||
* @return true or false
|
||||
*/
|
||||
bool IsProtected() const;
|
||||
|
||||
/** Kill a user
|
||||
* @param source The user/server doing the kill
|
||||
* @param reason The reason for the kill
|
||||
*/
|
||||
void Kill(const Anope::string &source, const Anope::string &reason);
|
||||
};
|
||||
|
||||
#endif // USERS_H
|
||||
|
||||
+10
-3
@@ -1,9 +1,9 @@
|
||||
/* Build bumper
|
||||
*
|
||||
* (C) 2003-2010 Anope Team
|
||||
* (C) 2003-2011 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for furhter details.
|
||||
* Please read COPYING and README for further details.
|
||||
*
|
||||
* Based on the original code of Epona by Lara.
|
||||
* Based on the original code of Services by Andy Church.
|
||||
@@ -54,12 +54,19 @@ int main(int argc, char *argv[])
|
||||
|
||||
std::string version_build = "#define VERSION_BUILD 1";
|
||||
std::string build = "#define BUILD 1";
|
||||
std::string version_extra;
|
||||
if (fd.is_open())
|
||||
{
|
||||
while (getline(fd, filebuf))
|
||||
{
|
||||
if (!filebuf.find("#define VERSION_BUILD"))
|
||||
version_build = filebuf;
|
||||
else if (!filebuf.find("#define VERSION_EXTRA"))
|
||||
{
|
||||
size_t q = filebuf.find('"');
|
||||
|
||||
version_extra = filebuf.substr(q + 1, filebuf.length() - q - 2);
|
||||
}
|
||||
else if (!filebuf.find("#define BUILD"))
|
||||
{
|
||||
size_t tab = filebuf.find(' ');
|
||||
@@ -89,7 +96,7 @@ int main(int argc, char *argv[])
|
||||
for (std::list<std::pair<std::string, std::string> >::iterator it = versions.begin(), it_end = versions.end(); it != it_end; ++it)
|
||||
{
|
||||
if (it->first == "EXTRA")
|
||||
fd << "#define VERSION_EXTRA \"" << it->second << "\"" << std::endl;
|
||||
fd << "#define VERSION_EXTRA \"" << (!version_extra.empty() ? version_extra : "") << (version_extra.find(it->second) == std::string::npos ? it->second : "") << "\"" << std::endl;
|
||||
else
|
||||
fd << "#define VERSION_" << it->first << " " << it->second << std::endl;
|
||||
}
|
||||
|
||||
-11871
File diff suppressed because it is too large
Load Diff
-11981
File diff suppressed because it is too large
Load Diff
-11840
File diff suppressed because it is too large
Load Diff
-11873
File diff suppressed because it is too large
Load Diff
-11881
File diff suppressed because it is too large
Load Diff
-11715
File diff suppressed because it is too large
Load Diff
-11804
File diff suppressed because it is too large
Load Diff
-11755
File diff suppressed because it is too large
Load Diff
-11691
File diff suppressed because it is too large
Load Diff
-9235
File diff suppressed because it is too large
Load Diff
-11702
File diff suppressed because it is too large
Load Diff
-12062
File diff suppressed because it is too large
Load Diff
-11642
File diff suppressed because it is too large
Load Diff
@@ -1,36 +0,0 @@
|
||||
# German translations for cs_appendtopic
|
||||
# German messages for cs_appendtopic
|
||||
# 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 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"
|
||||
"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"
|
||||
|
||||
#: 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:89 cs_appendtopic.cpp:100
|
||||
msgid "Syntax: APPENDTOPIC channel text"
|
||||
msgstr "Syntax: APPENDTOPIC Channel Text"
|
||||
|
||||
#: 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"
|
||||
"hinzuzufügen. Wenn TOPICLOCK gesetzt ist, wird das Topic aktualisiert\n"
|
||||
"und das neue, aktualisierte Topic wird gesperrt."
|
||||
@@ -1,36 +0,0 @@
|
||||
# Italian translations for cs_appendtopic
|
||||
# Traduzioni italiane per il cs_appendtopic
|
||||
# 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 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"
|
||||
"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"
|
||||
|
||||
#: 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:89 cs_appendtopic.cpp:100
|
||||
msgid "Syntax: APPENDTOPIC channel text"
|
||||
msgstr "Sintassi: APPENDTOPIC canale testo"
|
||||
|
||||
#: 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"
|
||||
"viene bloccato."
|
||||
@@ -1,37 +0,0 @@
|
||||
# Dutch translations for cs_appendtopic
|
||||
# Engelse vertalingen voor het cs_appendtopic
|
||||
# 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 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"
|
||||
"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"
|
||||
|
||||
#: cs_appendtopic.cpp:105
|
||||
msgid " APPENDTOPIC Add text to a channels topic"
|
||||
msgstr " APPENDTOPIC Voeg tekst aan een kanaal onderwerp toe"
|
||||
|
||||
#: cs_appendtopic.cpp:89 cs_appendtopic.cpp:100
|
||||
msgid "Syntax: APPENDTOPIC channel text"
|
||||
msgstr "Gebruik: APPENDTOPIC kanaal tekst"
|
||||
|
||||
#: 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 ""
|
||||
"Dit command stelt gebruikers in staat om text toe te voegen\n"
|
||||
"achter het huidige onderwerp van een kanaal. Als TOPICLOCK aan\n"
|
||||
"staat, zal het onderwerp worden bijgewerkt en zal het nieuwe,\n"
|
||||
"bijgewerkte topic worden geforceerd."
|
||||
@@ -1,32 +0,0 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \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"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: cs_appendtopic.cpp:105
|
||||
msgid " APPENDTOPIC Add text to a channels topic"
|
||||
msgstr ""
|
||||
|
||||
#: cs_appendtopic.cpp:89 cs_appendtopic.cpp:100
|
||||
msgid "Syntax: APPENDTOPIC channel text"
|
||||
msgstr ""
|
||||
|
||||
#: 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 ""
|
||||
@@ -1,35 +0,0 @@
|
||||
# Portuguese translations for cs_appendtopic
|
||||
# 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 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"
|
||||
"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"
|
||||
|
||||
#: 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:89 cs_appendtopic.cpp:100
|
||||
msgid "Syntax: APPENDTOPIC channel text"
|
||||
msgstr "Sintaxe: APPENDTOPIC canal texto"
|
||||
|
||||
#: 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 ""
|
||||
"Este comando permite aos usuários anexar texto a um tópico de canal\n"
|
||||
"já definido. Quando TOPICLOCK está ativado, o tópico é atualizado e\n"
|
||||
"o novo tópico é travado."
|
||||
@@ -1,37 +0,0 @@
|
||||
# Russian translations for cs_appendtopic
|
||||
# ?????????? ???????? ??? ?????? cs_appendtopic
|
||||
# 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 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"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=ISO-8859-1\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"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:105
|
||||
msgid " APPENDTOPIC Add text to a channels topic"
|
||||
msgstr " APPENDTOPIC Äîáàâëÿåò òåêñò ê òîïèêó êàíàëà"
|
||||
|
||||
#: cs_appendtopic.cpp:89 cs_appendtopic.cpp:100
|
||||
msgid "Syntax: APPENDTOPIC channel text"
|
||||
msgstr "Ñèíòàêñèñ: APPENDTOPIC #êàíàë òåêñò"
|
||||
|
||||
#: 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"
|
||||
"Ïðèìå÷àíèå: òåêñò áóäåò ÄÎÁÀÂËÅÍ ê òîïèêó, òî åñòü ñòàðûé òîïèê óäàëåí ÍÅ ÁÓÄÅÒ."
|
||||
@@ -1,85 +0,0 @@
|
||||
# German translations for cs_enforce
|
||||
# German messages for cs_enforce
|
||||
# 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 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"
|
||||
"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"
|
||||
|
||||
#: cs_enforce.cpp:215
|
||||
msgid " ENFORCE Enforce various channel modes and set options"
|
||||
msgstr " ENFORCE Erzwingt verschieden Modes und SET Optionen"
|
||||
|
||||
#: 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"
|
||||
"on. The what option indicates what modes and options to\n"
|
||||
"enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n"
|
||||
"or +R. When left out, it defaults to SET.\n"
|
||||
" \n"
|
||||
"If what is SET, it will enforce SECUREOPS and RESTRICTED\n"
|
||||
"on the users currently in the channel, if they are set. Give\n"
|
||||
"SECUREOPS to enforce the SECUREOPS option, even if it is not\n"
|
||||
"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n"
|
||||
"if it's not enabled."
|
||||
msgstr ""
|
||||
"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 \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 \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: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: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 \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: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"
|
||||
"specified for what, an equalivant of channelmode +R on\n"
|
||||
"other ircds will be enforced. All users that are in the channel\n"
|
||||
"but have not identified for their nickname will be kicked and\n"
|
||||
"banned from the channel."
|
||||
msgstr ""
|
||||
"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:178 cs_enforce.cpp:210
|
||||
msgid "Syntax: ENFORCE channel [what]"
|
||||
msgstr "Syntax: \002ENFORCE \037Channel\037 [\037was\037]\002"
|
||||
@@ -1,85 +0,0 @@
|
||||
# Italian translations for cs_enforce
|
||||
# Traduzioni italiane per il cs_enforce
|
||||
# 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 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"
|
||||
"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"
|
||||
|
||||
#: 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:180
|
||||
msgid ""
|
||||
"Enforce various channel modes and set options. The channel\n"
|
||||
"option indicates what channel to enforce the modes and options\n"
|
||||
"on. The what option indicates what modes and options to\n"
|
||||
"enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n"
|
||||
"or +R. When left out, it defaults to SET.\n"
|
||||
" \n"
|
||||
"If what is SET, it will enforce SECUREOPS and RESTRICTED\n"
|
||||
"on the users currently in the channel, if they are set. Give\n"
|
||||
"SECUREOPS to enforce the SECUREOPS option, even if it is not\n"
|
||||
"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 \037canale\037\n"
|
||||
"indica il canale sul quale forzare i modi e le opzioni. Il parametro\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 \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: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: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 \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: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"
|
||||
"specified for what, an equalivant of channelmode +R on\n"
|
||||
"other ircds will be enforced. All users that are in the channel\n"
|
||||
"but have not identified for their nickname will be kicked and\n"
|
||||
"banned from the channel."
|
||||
msgstr ""
|
||||
"Se \037cosa\037 è MODES, niente verrà forzato, siccome forzerebbe\n"
|
||||
"dei modi che l'ircd in uso non supporterebbe. Se +R è specificato\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:178 cs_enforce.cpp:210
|
||||
msgid "Syntax: ENFORCE channel [what]"
|
||||
msgstr "Sintassi: \002ENFORCE \037canale\037 [\037cosa\037]\002"
|
||||
@@ -1,88 +0,0 @@
|
||||
# Dutch translations for cs_enforce
|
||||
# Engelse vertalingen voor het cs_enforce
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as the 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 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"
|
||||
"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"
|
||||
|
||||
#: cs_enforce.cpp:215
|
||||
msgid " ENFORCE Enforce various channel modes and set options"
|
||||
msgstr " ENFORCE Forceer enkele kanaalmodes en set-opties"
|
||||
|
||||
#: 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"
|
||||
"on. The what option indicates what modes and options to\n"
|
||||
"enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n"
|
||||
"or +R. When left out, it defaults to SET.\n"
|
||||
" \n"
|
||||
"If what is SET, it will enforce SECUREOPS and RESTRICTED\n"
|
||||
"on the users currently in the channel, if they are set. Give\n"
|
||||
"SECUREOPS to enforce the SECUREOPS option, even if it is not\n"
|
||||
"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n"
|
||||
"if it's not enabled."
|
||||
msgstr ""
|
||||
"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 \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 \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 \037wat\037 zal die optie\n"
|
||||
"altijd geforceerd worden, ook als die niet is aangezet."
|
||||
|
||||
#: 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: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 \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 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: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"
|
||||
"specified for what, an equalivant of channelmode +R on\n"
|
||||
"other ircds will be enforced. All users that are in the channel\n"
|
||||
"but have not identified for their nickname will be kicked and\n"
|
||||
"banned from the channel."
|
||||
msgstr ""
|
||||
"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 \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:178 cs_enforce.cpp:210
|
||||
msgid "Syntax: ENFORCE channel [what]"
|
||||
msgstr "Syntax: \002ENFORCE \037kanaal\037 [\037wat\037]\002"
|
||||
@@ -1,64 +0,0 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \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"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: cs_enforce.cpp:215
|
||||
msgid " ENFORCE Enforce various channel modes and set options"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
"on. The what option indicates what modes and options to\n"
|
||||
"enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n"
|
||||
"or +R. When left out, it defaults to SET.\n"
|
||||
" \n"
|
||||
"If what is SET, it will enforce SECUREOPS and RESTRICTED\n"
|
||||
"on the users currently in the channel, if they are set. Give\n"
|
||||
"SECUREOPS to enforce the SECUREOPS option, even if it is not\n"
|
||||
"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n"
|
||||
"if it's not enabled."
|
||||
msgstr ""
|
||||
|
||||
#: 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: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 ""
|
||||
|
||||
#: 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"
|
||||
"specified for what, an equalivant of channelmode +R on\n"
|
||||
"other ircds will be enforced. All users that are in the channel\n"
|
||||
"but have not identified for their nickname will be kicked and\n"
|
||||
"banned from the channel."
|
||||
msgstr ""
|
||||
|
||||
#: cs_enforce.cpp:178 cs_enforce.cpp:210
|
||||
msgid "Syntax: ENFORCE channel [what]"
|
||||
msgstr ""
|
||||
@@ -1,84 +0,0 @@
|
||||
# Portuguese translations for cs_enforce
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as the 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 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"
|
||||
"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"
|
||||
|
||||
#: 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"
|
||||
|
||||
#: 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"
|
||||
"on. The what option indicates what modes and options to\n"
|
||||
"enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n"
|
||||
"or +R. When left out, it defaults to SET.\n"
|
||||
" \n"
|
||||
"If what is SET, it will enforce SECUREOPS and RESTRICTED\n"
|
||||
"on the users currently in the channel, if they are set. Give\n"
|
||||
"SECUREOPS to enforce the SECUREOPS option, even if it is not\n"
|
||||
"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n"
|
||||
"if it's not enabled."
|
||||
msgstr ""
|
||||
"Verifica o cumprimento de vários modos de canal e opções ajustadas.\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 \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"
|
||||
"Use RESTRICTED para verificar a opção RESTRICTED, mesmo que ela não esteja\n"
|
||||
"ativada."
|
||||
|
||||
#: 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: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 \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: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"
|
||||
"specified for what, an equalivant of channelmode +R on\n"
|
||||
"other ircds will be enforced. All users that are in the channel\n"
|
||||
"but have not identified for their nickname will be kicked and\n"
|
||||
"banned from the channel."
|
||||
msgstr ""
|
||||
"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 \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:178 cs_enforce.cpp:210
|
||||
msgid "Syntax: ENFORCE channel [what]"
|
||||
msgstr "Sintaxe: \002ENFORCE \037canal\037 [\037opção\037]\002"
|
||||
@@ -1,85 +0,0 @@
|
||||
# Russian translations for cs_enforce
|
||||
# ?????????? ???????? ??? ?????? cs_enforce
|
||||
# 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 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"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=ISO-8859-1\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"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:215
|
||||
msgid " ENFORCE Enforce various channel modes and set options"
|
||||
msgstr " ENFORCE Ïåðåïðîâåðêà è óñòàíîâêà ðàçëè÷íûõ ðåæèìîâ è îïöèé êàíàëà"
|
||||
|
||||
#: 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"
|
||||
"on. The what option indicates what modes and options to\n"
|
||||
"enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n"
|
||||
"or +R. When left out, it defaults to SET.\n"
|
||||
" \n"
|
||||
"If what is SET, it will enforce SECUREOPS and RESTRICTED\n"
|
||||
"on the users currently in the channel, if they are set. Give\n"
|
||||
"SECUREOPS to enforce the SECUREOPS option, even if it is not\n"
|
||||
"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n"
|
||||
"if it's not enabled."
|
||||
msgstr ""
|
||||
"Ïåðåïðîâåðêà è óñòàíîâêà ðàçëè÷íûõ ðåæèìîâ è îïöèé êàíàëà.\n"
|
||||
"\037Ïàðàìåòð\037 óêàçûâàåò êàêèå îïöèè èëè ðåæèìû êàíàëà äîëæíû áûòü\n"
|
||||
"ïåðåïðîâåðåíû.  êà÷åñòâå ïàðàìåòðà ìîãóò áûòü óêàçàíû: SET, SECUREOPS,\n"
|
||||
"RESTRICTED, MODES, èëè +R. Åñëè ïàðàìåòð íå óêàçàí, ïî-óìîë÷àíèþ áóäåò SET.\n"
|
||||
" \n"
|
||||
"Åñëè â êà÷åñòâå \037ïàðàìåòðà\037 óêàçàíî SET, áóäóò ïåðåïðîâåðåíû îïöèè\n"
|
||||
"SECUREOPS è RESTRICTED îòíîñèòåëüíî ïîëüçîâàòåëåé íà óêàçàííîì êàíàëå\n"
|
||||
"(ïðè óñëîâèè, ÷òî îïöèè âêëþ÷åíû). Îòäåëüíî óêàçàííûé ïàðàìåòð SECUREOPS\n"
|
||||
"ïðèìåíèò îïöèþ SECUREOPS (äàæå åñëè îíà \037ÍÅ\037 óñòàíîâëåíà). Ïàðàìåòð\n"
|
||||
"RESTRICTED ïðèìåíèò îïöèþ RESTRICTED (äàæå åñëè îíà \037ÍÅ\037 óñòàíîâëåíà)"
|
||||
|
||||
#: 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: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 ""
|
||||
"Åñëè â êà÷åñòâå \037ïàðàìåòðà\037 óêàçàíî MODES, áóäåò ïåðåïðîâåðåí ðåæèì +R\n"
|
||||
"(åñëè îí óñòàíîâëåí). Îòäåëüíî óêàçàííûé ïàðàìåòð \037+R\037 ïðèìåíèò\n"
|
||||
"êàíàëüíûé ðåæèì +R, äàæå åñëè îí íå óñòàíîâëåí, è çàáàíèò âñåõ ïîëüçîâàòåëåé,\n"
|
||||
"êîòîðûå íå èäåíòèôèöèðîâàëèñü ê ñâîåìó íèêó èëè íå èìåþò çàðåãèñòðèðîâàííîãî íèêà."
|
||||
|
||||
#: 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"
|
||||
"specified for what, an equalivant of channelmode +R on\n"
|
||||
"other ircds will be enforced. All users that are in the channel\n"
|
||||
"but have not identified for their nickname will be kicked and\n"
|
||||
"banned from the channel."
|
||||
msgstr ""
|
||||
"Åñëè â êà÷åñòâå \037ïàðàìåòðà\037 óêàçàíî MODES, ïåðåïðîâåðêà îñóùåñòâëåíà\n"
|
||||
"ÍÅ ÁÓÄÅÒ, òàê êàê òåêóùèé IRCD íå ïîääåðæèâàåò íåîáõîäèìûå ðåæèìû.\n"
|
||||
"Îòäåëüíî óêàçàííûé ïàðàìåòð \037+R\037 ïðèìåíèò êàíàëüíûé ðåæèì, ýêâèâàëåíòíûé\n"
|
||||
"ðåæèìó +R è çàáàíèò âñåõ ïîëüçîâàòåëåé, êîòîðûå íå èäåíòèôèöèðîâàëèñü ê ñâîåìó\n"
|
||||
"íèêó èëè íå èìåþò çàðåãèñòðèðîâàííîãî íèêà."
|
||||
|
||||
#: cs_enforce.cpp:178 cs_enforce.cpp:210
|
||||
msgid "Syntax: ENFORCE channel [what]"
|
||||
msgstr "Ñèíòàêñèñ: \002ENFORCE \037#êàíàë\037 \037ïàðàìåòð\037\002"
|
||||
@@ -1,39 +0,0 @@
|
||||
# German translations for cs_tban
|
||||
# German messages for cs_tban
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as the 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-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"
|
||||
"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"
|
||||
|
||||
#: 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: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: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 ""
|
||||
"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:99
|
||||
msgid "Syntax: TBAN channel nick time"
|
||||
msgstr "Syntax: TBAN Channel Nickname Zeit"
|
||||
@@ -1,39 +0,0 @@
|
||||
# Italian translations for cs_tban
|
||||
# Traduzioni italiane per il cs_tban
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as the 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-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"
|
||||
"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"
|
||||
|
||||
#: 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: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: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."
|
||||
|
||||
#: cs_tban.cpp:99
|
||||
msgid "Syntax: TBAN channel nick time"
|
||||
msgstr "Sintassi: TBAN canale nick tempo"
|
||||
@@ -1,40 +0,0 @@
|
||||
# Dutch translations for cs_tban
|
||||
# Engelse vertalingen voor het cs_tban
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as the 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-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"
|
||||
"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"
|
||||
|
||||
#: 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: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: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 ""
|
||||
"Verbant de gegeven gebruiken van het gegeven kanaal voor de\n"
|
||||
"gegeven tijdsduur. Als de verbanning eerder wordt verwijderd,\n"
|
||||
"zal deze NIET worden vervangen."
|
||||
|
||||
#: cs_tban.cpp:99
|
||||
msgid "Syntax: TBAN channel nick time"
|
||||
msgstr "Syntax: TBAN kanaal nick tijd"
|
||||
@@ -1,36 +0,0 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \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"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: cs_tban.cpp:104
|
||||
msgid " TBAN Bans the user for a given length of time"
|
||||
msgstr ""
|
||||
|
||||
#: cs_tban.cpp:81
|
||||
#, c-format
|
||||
msgid "%s banned from %s, will auto-expire in %s"
|
||||
msgstr ""
|
||||
|
||||
#: 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:99
|
||||
msgid "Syntax: TBAN channel nick time"
|
||||
msgstr ""
|
||||
@@ -1,38 +0,0 @@
|
||||
# Portuguese translations for cs_tban
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as the 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-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"
|
||||
"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"
|
||||
|
||||
#: 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: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: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."
|
||||
|
||||
#: cs_tban.cpp:99
|
||||
msgid "Syntax: TBAN channel nick time"
|
||||
msgstr "Sintaxe: TBAN canal nick tempo"
|
||||
@@ -1,41 +0,0 @@
|
||||
# Russian translations for cs_tban
|
||||
# ?????????? ???????? ??? ?????? cs_tban
|
||||
# Copyright (C) 2010 Anope Team
|
||||
# This file is distributed under the same license as the 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-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"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=ISO-8859-1\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"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:104
|
||||
msgid " TBAN Bans the user for a given length of time"
|
||||
msgstr " TBAN Áàíèò ïîëüçîâàòåëÿ íà óêàçàííûé ïðîìåæóòîê âðåìåíè"
|
||||
|
||||
#: cs_tban.cpp:81
|
||||
#, c-format
|
||||
msgid "%s banned from %s, will auto-expire in %s"
|
||||
msgstr "Óñòàíîâëåííûé áàí %s íà êàíàëå %s èñòå÷åò ÷åðåç %s ñåêóíä"
|
||||
|
||||
#: 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 ""
|
||||
"Áàíèò ïîëüçîâàòåëÿ íà óêàçàííûé ïðîìåæóòîê âðåìåíè â ñåêóíäàõ\n"
|
||||
"Ïðèìå÷àíèå: óäàëåííûé âðó÷íóþ (äî ñâîåãî èñòå÷åíèÿ) áàí ÍÅ ÁÓÄÅÒ\n"
|
||||
"ïåðåóñòàíîâëåí ñåðâèñàìè àâòîìàòè÷åñêè!"
|
||||
|
||||
#: cs_tban.cpp:99
|
||||
msgid "Syntax: TBAN channel nick time"
|
||||
msgstr "Ñèíòàêñèñ: TBAN #êàíàë íèê âðåìÿ"
|
||||
@@ -1,121 +0,0 @@
|
||||
# Italian translations for hs_request
|
||||
# Traduzioni italiane per il hs_request
|
||||
# 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 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"
|
||||
"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"
|
||||
|
||||
#: 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 ""
|
||||
" ACTIVATE Approva il vHost richiesto di un utente\n"
|
||||
" REJECT Rifiuta il vHost richiesto di un utente\n"
|
||||
" WAITING Comando per LIST +req"
|
||||
|
||||
#: hs_request.cpp:137
|
||||
msgid " REQUEST Request a vHost for your nick"
|
||||
msgstr " REQUEST Richiede un vHost per il tuo nick"
|
||||
|
||||
#: 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:181
|
||||
msgid "Activate the requested vHost for the given nick."
|
||||
msgstr "Attiva il vHost richiesto per il nick specificato."
|
||||
|
||||
#: 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: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
|
||||
msgid "Reject the requested vHost for the given nick."
|
||||
msgstr "Rifiuta il vHost richiesto per il nick specificato."
|
||||
|
||||
#: 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 ""
|
||||
"Richiede l'attivazione del vHost specificato per il tuo nick da parte\n"
|
||||
"degli amministratori di rete. Sei pregato di pazientare finchè la tua\n"
|
||||
"richiesta viene elaborata."
|
||||
|
||||
#: hs_request.cpp:179 hs_request.cpp:190
|
||||
msgid "Syntax: ACTIVATE nick"
|
||||
msgstr "Sintassi: \002ACTIVATE \037nick\037\002"
|
||||
|
||||
#: hs_request.cpp:241 hs_request.cpp:252
|
||||
msgid "Syntax: REJECT nick"
|
||||
msgstr "Sintassi: \002REJECT \037nick\037\002"
|
||||
|
||||
#: hs_request.cpp:65 hs_request.cpp:122 hs_request.cpp:132
|
||||
msgid "Syntax: REQUEST vhost"
|
||||
msgstr "Sintassi: \002REQUEST \037vhost\037\002"
|
||||
|
||||
#: hs_request.cpp:307
|
||||
msgid "Syntax: WAITING"
|
||||
msgstr "Sintassi: \002WAITING\002"
|
||||
|
||||
#: hs_request.cpp:309
|
||||
msgid ""
|
||||
"This command is provided for convenience. It is essentially\n"
|
||||
"the same as performing a LIST +req ."
|
||||
msgstr ""
|
||||
"Questo comando è per comodità. Praticamente è la stessa cosa che\n"
|
||||
"eseguire un LIST +req ."
|
||||
|
||||
#: hs_request.cpp:110
|
||||
msgid "Your vHost has been requested"
|
||||
msgstr "Il tuo vHost è stato richiesto"
|
||||
|
||||
#: 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
|
||||
#, 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
|
||||
#, 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:646
|
||||
#, c-format
|
||||
msgid "[auto memo] vHost %s has been requested."
|
||||
msgstr "[auto memo] è stato richiesto il vHost \002%s\002."
|
||||
|
||||
#: hs_request.cpp:163
|
||||
#, c-format
|
||||
msgid "vHost for %s has been activated"
|
||||
msgstr "Il vHost per %s è stato attivato"
|
||||
|
||||
#: hs_request.cpp:230
|
||||
#, c-format
|
||||
msgid "vHost for %s has been rejected"
|
||||
msgstr "Il vHost per %s è stato rifiutato"
|
||||
@@ -1,121 +0,0 @@
|
||||
# Dutch translations for hs_request
|
||||
# Engelse vertalingen voor het hs_request
|
||||
# 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 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"
|
||||
"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"
|
||||
|
||||
#: 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 ""
|
||||
" ACTIVATE Activeer de aangevraagde vHost voor een gebruiker\n"
|
||||
" REJECT Keur de aangevraagde vHost voor een gebruiker af\n"
|
||||
" WAITING Snelkoppeling naar LIST +req"
|
||||
|
||||
#: hs_request.cpp:137
|
||||
msgid " REQUEST Request a vHost for your nick"
|
||||
msgstr " REQUEST Vraag een vHost aan voor je nick"
|
||||
|
||||
#: 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."
|
||||
|
||||
#: 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:169 hs_request.cpp:234
|
||||
#, c-format
|
||||
msgid "No request for nick %s found."
|
||||
msgstr "Geen aanvraag voor nick %s gevonden."
|
||||
|
||||
#: 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
|
||||
msgid "Reject the requested vHost for the given nick."
|
||||
msgstr "Keur de aangevraagde vHost voor de gegeven nick af."
|
||||
|
||||
#: 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 ""
|
||||
"Verzoek de gegeven vHost te activeren voor jouw nick bij de\n"
|
||||
"netwerk beheerders. Het kan even duren voordat je aanvraag\n"
|
||||
"afgehandeld wordt."
|
||||
|
||||
#: hs_request.cpp:179 hs_request.cpp:190
|
||||
msgid "Syntax: ACTIVATE nick"
|
||||
msgstr "Gebruik: \002ACTIVATE \037nick\037\002"
|
||||
|
||||
#: hs_request.cpp:241 hs_request.cpp:252
|
||||
msgid "Syntax: REJECT nick"
|
||||
msgstr "Gebruik: \002REJECT \037nick\037\002"
|
||||
|
||||
#: hs_request.cpp:65 hs_request.cpp:122 hs_request.cpp:132
|
||||
msgid "Syntax: REQUEST vhost"
|
||||
msgstr "Gebruik: \002REQUEST \037vhost\037\002"
|
||||
|
||||
#: hs_request.cpp:307
|
||||
msgid "Syntax: WAITING"
|
||||
msgstr "Gebruik: \002WAITING\002"
|
||||
|
||||
#: hs_request.cpp:309
|
||||
msgid ""
|
||||
"This command is provided for convenience. It is essentially\n"
|
||||
"the same as performing a LIST +req ."
|
||||
msgstr ""
|
||||
"Dit commando is beschikbaar als handigheid. Het is simpelweg\n"
|
||||
"hetzelfde als LIST +req ."
|
||||
|
||||
#: hs_request.cpp:110
|
||||
msgid "Your vHost has been requested"
|
||||
msgstr "Je vHost is aangevraagd"
|
||||
|
||||
#: 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
|
||||
#, c-format
|
||||
msgid "[auto memo] Your requested vHost has been rejected."
|
||||
msgstr "[auto memo] Je aangevraagde vHost is afgekeurd."
|
||||
|
||||
#: 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:646
|
||||
#, c-format
|
||||
msgid "[auto memo] vHost %s has been requested."
|
||||
msgstr "[auto memo] vHost \002%s\002 is aangevraagd."
|
||||
|
||||
#: hs_request.cpp:163
|
||||
#, c-format
|
||||
msgid "vHost for %s has been activated"
|
||||
msgstr "vHost voor %s is geactiveerd"
|
||||
|
||||
#: hs_request.cpp:230
|
||||
#, c-format
|
||||
msgid "vHost for %s has been rejected"
|
||||
msgstr "vHost voor %s is afgekeurd"
|
||||
@@ -1,112 +0,0 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \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"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: 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:137
|
||||
msgid " REQUEST Request a vHost for your nick"
|
||||
msgstr ""
|
||||
|
||||
#: hs_request.cpp:183 hs_request.cpp:245
|
||||
msgid "A memo informing the user will also be sent."
|
||||
msgstr ""
|
||||
|
||||
#: hs_request.cpp:181
|
||||
msgid "Activate the requested vHost for the given nick."
|
||||
msgstr ""
|
||||
|
||||
#: hs_request.cpp:169 hs_request.cpp:234
|
||||
#, c-format
|
||||
msgid "No request for nick %s found."
|
||||
msgstr ""
|
||||
|
||||
#: hs_request.cpp:104
|
||||
#, c-format
|
||||
msgid "Please wait %d seconds before requesting a new vHost"
|
||||
msgstr ""
|
||||
|
||||
#: hs_request.cpp:243
|
||||
msgid "Reject the requested vHost for the given nick."
|
||||
msgstr ""
|
||||
|
||||
#: 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:179 hs_request.cpp:190
|
||||
msgid "Syntax: ACTIVATE nick"
|
||||
msgstr ""
|
||||
|
||||
#: hs_request.cpp:241 hs_request.cpp:252
|
||||
msgid "Syntax: REJECT nick"
|
||||
msgstr ""
|
||||
|
||||
#: hs_request.cpp:65 hs_request.cpp:122 hs_request.cpp:132
|
||||
msgid "Syntax: REQUEST vhost"
|
||||
msgstr ""
|
||||
|
||||
#: hs_request.cpp:307
|
||||
msgid "Syntax: WAITING"
|
||||
msgstr ""
|
||||
|
||||
#: 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:110
|
||||
msgid "Your vHost has been requested"
|
||||
msgstr ""
|
||||
|
||||
#: hs_request.cpp:161
|
||||
msgid "[auto memo] Your requested vHost has been approved."
|
||||
msgstr ""
|
||||
|
||||
#: hs_request.cpp:225
|
||||
#, c-format
|
||||
msgid "[auto memo] Your requested vHost has been rejected."
|
||||
msgstr ""
|
||||
|
||||
#: hs_request.cpp:223
|
||||
#, c-format
|
||||
msgid "[auto memo] Your requested vHost has been rejected. Reason: %s"
|
||||
msgstr ""
|
||||
|
||||
#: hs_request.cpp:646
|
||||
#, c-format
|
||||
msgid "[auto memo] vHost %s has been requested."
|
||||
msgstr ""
|
||||
|
||||
#: hs_request.cpp:163
|
||||
#, c-format
|
||||
msgid "vHost for %s has been activated"
|
||||
msgstr ""
|
||||
|
||||
#: hs_request.cpp:230
|
||||
#, c-format
|
||||
msgid "vHost for %s has been rejected"
|
||||
msgstr ""
|
||||
@@ -1,120 +0,0 @@
|
||||
# Portuguese translations for hs_request
|
||||
# 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 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"
|
||||
"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"
|
||||
|
||||
#: 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 ""
|
||||
" ACTIVATE Aprova o pedido de vHost de um usuário\n"
|
||||
" REJECT Recusa o pedido de vHost de um usuário\n"
|
||||
" WAITING Comando para LISTAR +req"
|
||||
|
||||
#: hs_request.cpp:137
|
||||
msgid " REQUEST Request a vHost for your nick"
|
||||
msgstr " REQUEST Request a vHost for your nick"
|
||||
|
||||
#: 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:181
|
||||
msgid "Activate the requested vHost for the given nick."
|
||||
msgstr "Ativa o vHost solicitado para o nick fornecido."
|
||||
|
||||
#: 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: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
|
||||
msgid "Reject the requested vHost for the given nick."
|
||||
msgstr "Recusa o pedido de vHost para o nick fornecido."
|
||||
|
||||
#: 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 ""
|
||||
"Solicita a ativação do vHost fornecido em seu nick pelos\n"
|
||||
"administradores da rede. Por favor, tenha paciência\n"
|
||||
"enquanto seu pedido é analisado."
|
||||
|
||||
#: hs_request.cpp:179 hs_request.cpp:190
|
||||
msgid "Syntax: ACTIVATE nick"
|
||||
msgstr "Sintaxe: \002ACTIVATE \037nick\037\002"
|
||||
|
||||
#: hs_request.cpp:241 hs_request.cpp:252
|
||||
msgid "Syntax: REJECT nick"
|
||||
msgstr "Sintaxe: \002REJECT \037nick\037\002"
|
||||
|
||||
#: hs_request.cpp:65 hs_request.cpp:122 hs_request.cpp:132
|
||||
msgid "Syntax: REQUEST vhost"
|
||||
msgstr "Sintaxe: \002REQUEST \037vhost\037\002"
|
||||
|
||||
#: hs_request.cpp:307
|
||||
msgid "Syntax: WAITING"
|
||||
msgstr "Sintaxe: \002WAITING\002"
|
||||
|
||||
#: hs_request.cpp:309
|
||||
msgid ""
|
||||
"This command is provided for convenience. It is essentially\n"
|
||||
"the same as performing a LIST +req ."
|
||||
msgstr ""
|
||||
"Este comando é usado por conveniência. É essencialmente\n"
|
||||
"o mesmo que fazer um LIST +req"
|
||||
|
||||
#: hs_request.cpp:110
|
||||
msgid "Your vHost has been requested"
|
||||
msgstr "Seu pedido de vHost foi encaminhado"
|
||||
|
||||
#: 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
|
||||
#, c-format
|
||||
msgid "[auto memo] Your requested vHost has been rejected."
|
||||
msgstr "[Auto Memo] Seu pedido de vHost foi recusado."
|
||||
|
||||
#: 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:646
|
||||
#, c-format
|
||||
msgid "[auto memo] vHost %s has been requested."
|
||||
msgstr "[Auto Memo] O vHost \002%s\002 foi solicitado."
|
||||
|
||||
#: hs_request.cpp:163
|
||||
#, c-format
|
||||
msgid "vHost for %s has been activated"
|
||||
msgstr "O vHost para %s foi ativado"
|
||||
|
||||
#: hs_request.cpp:230
|
||||
#, c-format
|
||||
msgid "vHost for %s has been rejected"
|
||||
msgstr "O vHost de %s foi recusado"
|
||||
@@ -1,122 +0,0 @@
|
||||
# Russian translations for hs_request
|
||||
# ?????????? ???????? ??? ?????? PACKAGE.
|
||||
# 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 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"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=ISO-8859-1\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"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: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 ""
|
||||
" ACTIVATE Óòâåðäèòü çàïðàøèâàåìûé ïîëüçîâàòåëåì vHost\n"
|
||||
" REJECT Îòêëîíèòü çàïðàøèâàåìûé ïîëüçîâàòåëåì vHost\n"
|
||||
" WAITING Ñïèñîê çàïðîñîâ îæèäàþùèõ îáðàáîòêè (àíàëîã LIST +req)"
|
||||
|
||||
#: hs_request.cpp:137
|
||||
msgid " REQUEST Request a vHost for your nick"
|
||||
msgstr " REQUEST Çàïðîñ íà vHost äëÿ âàøåãî òåêóùåãî íèêà"
|
||||
|
||||
#: hs_request.cpp:183 hs_request.cpp:245
|
||||
msgid "A memo informing the user will also be sent."
|
||||
msgstr "Ïîëüçîâàòåëþ áóäåò ïîñëàíî àâòî-óâåäîìëåíèå îá àêòèâàöèè åãî çàïðîñà."
|
||||
|
||||
#: hs_request.cpp:181
|
||||
msgid "Activate the requested vHost for the given nick."
|
||||
msgstr "Óòâåðäèòü çàïðàøèâàåìûé vHost äëÿ óêàçàííîãî íèêà."
|
||||
|
||||
#: hs_request.cpp:169 hs_request.cpp:234
|
||||
#, c-format
|
||||
msgid "No request for nick %s found."
|
||||
msgstr "Çàïðîñ íà vHost äëÿ íèêà %s íå íàéäåí."
|
||||
|
||||
#: hs_request.cpp:104
|
||||
#, c-format
|
||||
msgid "Please wait %d seconds before requesting a new vHost"
|
||||
msgstr "Ïîæàëóéñòà, ïîäîæäèòå %d ñåêóíä, ïðåæäå ÷åì çàïðàøèâàòü íîâûé vHost"
|
||||
|
||||
#: hs_request.cpp:243
|
||||
msgid "Reject the requested vHost for the given nick."
|
||||
msgstr "Îòêëîíèòü çàïðàøèâàåìûé vHost äëÿ óêàçàííîãî íèêà."
|
||||
|
||||
#: 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 ""
|
||||
"Îòïðàâëÿåò çàïðîñ íà àêòèâàöèþ vHost, êîòîðûé áóäåò ðàññìîòðåí îäíèì èç\n"
|
||||
"àäìèíèñòðàòîðîâ ñåòè. Ïðîñüáà ïðîÿâèòü òåðïåíèå, ïîêà çàïðîñ\n"
|
||||
"ðàññìàòðèâàåòñÿ àäìèíèñòðàöèåé."
|
||||
|
||||
#: hs_request.cpp:179 hs_request.cpp:190
|
||||
msgid "Syntax: ACTIVATE nick"
|
||||
msgstr "Ñèíòàêñèñ: \002ACTIVATE \037íèê\037\002"
|
||||
|
||||
#: hs_request.cpp:241 hs_request.cpp:252
|
||||
msgid "Syntax: REJECT nick"
|
||||
msgstr "Ñèíòàêñèñ: \002REJECT \037íèê\037\002"
|
||||
|
||||
#: hs_request.cpp:65 hs_request.cpp:122 hs_request.cpp:132
|
||||
msgid "Syntax: REQUEST vhost"
|
||||
msgstr "Ñèíòàêñèñ: \002REQUEST \037vHost\037\002"
|
||||
|
||||
#: hs_request.cpp:307
|
||||
msgid "Syntax: WAITING"
|
||||
msgstr "Ñèíòàêñèñ: \002WAITING\002"
|
||||
|
||||
#: hs_request.cpp:309
|
||||
msgid ""
|
||||
"This command is provided for convenience. It is essentially\n"
|
||||
"the same as performing a LIST +req ."
|
||||
msgstr ""
|
||||
"Äàííàÿ êîìàíäà ñîçäàíà äëÿ óäîáñòâà èñïîëüçîâàíèÿ è âûâîäèò ñïèñîê çàïðîñîâ,\n"
|
||||
"îæèäàþùèõ îáðàáîòêè. Àíàëîãè÷íàÿ êîìàíäà: LIST +req ."
|
||||
|
||||
#: hs_request.cpp:110
|
||||
msgid "Your vHost has been requested"
|
||||
msgstr "Âàø çàïðîñ íà vHost îòïðàâëåí."
|
||||
|
||||
#: hs_request.cpp:161
|
||||
msgid "[auto memo] Your requested vHost has been approved."
|
||||
msgstr "[àâòî-ñîîáùåíèå] Çàïðàøèâàåìûé âàìè vHost óòâåðæäåí è àêòèâèðîâàí."
|
||||
|
||||
#: hs_request.cpp:225
|
||||
#, c-format
|
||||
msgid "[auto memo] Your requested vHost has been rejected."
|
||||
msgstr "[àâòî-ñîîáùåíèå] Çàïðàøèâàåìûé âàìè vHost îòêëîíåí."
|
||||
|
||||
#: hs_request.cpp:223
|
||||
#, c-format
|
||||
msgid "[auto memo] Your requested vHost has been rejected. Reason: %s"
|
||||
msgstr "[àâòî-ñîîáùåíèå] Çàïðàøèâàåìûé âàìè vHost îòêëîíåí. Ïðè÷èíà: %s"
|
||||
|
||||
#: hs_request.cpp:646
|
||||
#, c-format
|
||||
msgid "[auto memo] vHost %s has been requested."
|
||||
msgstr "[àâòî-ñîîáùåíèå] Áûë çàïðîøåí vHost \002%s\002"
|
||||
|
||||
#: hs_request.cpp:163
|
||||
#, c-format
|
||||
msgid "vHost for %s has been activated"
|
||||
msgstr "vHost äëÿ %s óñïåøíî àêòèâèðîâàí"
|
||||
|
||||
#: hs_request.cpp:230
|
||||
#, c-format
|
||||
msgid "vHost for %s has been rejected"
|
||||
msgstr "vHost äëÿ %s îòêëîíåí."
|
||||
@@ -1,6 +0,0 @@
|
||||
#!/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,27 +0,0 @@
|
||||
# German translations for ns_maxemail
|
||||
# German messages for 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:03-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: German\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 "Die angegebene eMail hat die limit Begrenzung von %d User erreicht."
|
||||
|
||||
#: 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."
|
||||
@@ -1,27 +0,0 @@
|
||||
# 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,27 +0,0 @@
|
||||
# Dutch translations for ns_maxemail
|
||||
# Engelse vertalingen voor het 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-25 23:57-0400\n"
|
||||
"Last-Translator: Adam <adam@anope.org>\n"
|
||||
"Language-Team: Dutch\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 "Het gegeven email adres heeft de limiet van %d gebruikers bereikt."
|
||||
|
||||
#: 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."
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user