1
0
mirror of https://github.com/anope/anope.git synced 2026-07-08 02:23:13 +02:00

Update as many messages as possible for automatic line wrapping.

This commit is contained in:
Sadie Powell
2025-04-16 00:04:30 +01:00
parent a883b616a1
commit ce362854a3
106 changed files with 2799 additions and 3202 deletions
+10 -10
View File
@@ -100,7 +100,7 @@ namespace Language
} // namespace Language
/* Commonly used language strings */
#define CONFIRM_DROP _("Please confirm that you want to drop \002%s\002 with \002%s %s %s\002")
#define CONFIRM_DROP _("Please confirm that you want to drop \002%s\002 with \002%s\032%s\032%s\002")
#define SERVICE_UNAVAILABLE _("Sorry, %s is temporarily unavailable.")
#define MORE_INFO _("\002%s\002 for more information.")
#define BAD_USERHOST_MASK _("Mask must be in the form \037user\037@\037host\037.")
@@ -109,9 +109,9 @@ namespace Language
#define READ_ONLY_MODE _("Services are temporarily in read-only mode.")
#define PASSWORD_INCORRECT _("Password incorrect.")
#define ACCESS_DENIED _("Access denied.")
#define MORE_OBSCURE_PASSWORD _("Please try again with a more obscure password. Passwords should not be\n" \
"something that could be easily guessed (e.g. your real name or your nick) and\n" \
"cannot contain the space or tab characters.\n")
#define MORE_OBSCURE_PASSWORD _("Please try again with a more obscure password. Passwords should not be " \
"something that could be easily guessed (e.g. your real name or your nick) and " \
"cannot contain the space or tab characters.")
#define PASSWORD_TOO_SHORT _("Your password is too short. It must be longer than %u characters.")
#define PASSWORD_TOO_LONG _("Your password is too long. It must be shorter than %u characters.")
#define NICK_NOT_REGISTERED _("Your nick isn't registered.")
@@ -127,8 +127,8 @@ namespace Language
#define UNKNOWN _("<unknown>")
#define NO_EXPIRE _("does not expire")
#define LIST_INCORRECT_RANGE _("Incorrect range specified. The correct syntax is \002#\037from\037-\037to\037\002.")
#define NICK_IS_SECURE _("This nickname is registered and protected. If it is your\n" \
"nick, type \002%s \037password\037\002. Otherwise,\n" \
#define NICK_IS_SECURE _("This nickname is registered and protected. If it is your " \
"nick, type \002%s\032\037password\037\002. Otherwise, " \
"please choose a different nick.")
#define FORCENICKCHANGE_NOW _("This nickname has been registered; you may not use it.")
#define NICK_CANNOT_BE_REGISTERED _("Nickname \002%s\002 may not be registered.")
@@ -145,10 +145,10 @@ namespace Language
#define CHAN_ACCESS_LEVEL_RANGE _("Access level must be between %d and %d inclusive.")
#define CHAN_INFO_HEADER _("Information about channel \002%s\002:")
#define CHAN_EXCEPTED _("\002%s\002 matches an except on %s and cannot be banned until the except has been removed.")
#define MEMO_NEW_X_MEMO_ARRIVED _("There is a new memo on channel %s.\n" \
"Type \002%s %s %zu\002 to read it.")
#define MEMO_NEW_MEMO_ARRIVED _("You have a new memo from %s.\n" \
"Type \002%s %zu\002 to read it.")
#define MEMO_NEW_X_MEMO_ARRIVED _("There is a new memo on channel %s. " \
"Type \002%s\032%s\032%zu\002 to read it.")
#define MEMO_NEW_MEMO_ARRIVED _("You have a new memo from %s. " \
"Type \002%s\032%zu\002 to read it.")
#define MEMO_HAVE_NO_MEMOS _("You have no memos.")
#define MEMO_X_HAS_NO_MEMOS _("%s has no memos.")
#define MEMO_HAVE_NO_NEW_MEMOS _("You have no new memos.")
+657 -1665
View File
File diff suppressed because it is too large Load Diff
+41 -23
View File
@@ -135,29 +135,41 @@ public:
if (source.c)
{
source.Reply(_("\002%s\002 allows you to execute \"fantasy\" commands in the channel.\n"
"Fantasy commands are commands that can be executed from messaging a\n"
"channel, and provide a more convenient way to execute commands. Commands that\n"
"require a channel as a parameter will automatically have that parameter\n"
"given.\n"), source.service->nick.c_str());
source.Reply(_(
"\002%s\002 allows you to execute \"fantasy\" commands in the channel. "
"Fantasy commands are commands that can be executed from messaging a "
"channel, and provide a more convenient way to execute commands. Commands that "
"require a channel as a parameter will automatically have that parameter "
"given."
),
source.service->nick.c_str());
const Anope::string &fantasycharacters = Config->GetModule("fantasy").Get<const Anope::string>("fantasycharacter", "!");
if (!fantasycharacters.empty())
source.Reply(_(" \n"
"Fantasy commands may be prefixed with one of the following characters: %s\n"), fantasycharacters.c_str());
source.Reply(_(" \n"
"Available commands are:"));
{
source.Reply(" ");
source.Reply(_("Fantasy commands may be prefixed with one of the following characters: %s"),
fantasycharacters.c_str());
}
source.Reply(" ");
source.Reply(_("Available commands are:"));
}
else if (*source.service == BotServ)
{
source.Reply(_("\002%s\002 allows you to have a bot on your own channel.\n"
"It has been created for users that can't host or\n"
"configure a bot, or for use on networks that don't\n"
"allow user bots. Available commands are listed\n"
"below; to use them, type \002%s \037command\037\002. For\n"
"more information on a specific command, type\n"
"\002%s \037command\037\002.\n"),
BotServ->nick.c_str(), BotServ->GetQueryCommand().c_str(),
source.Reply(_(
"\002%s\002 allows you to have a bot on your own channel. "
"It has been created for users that can't host or "
"configure a bot, or for use on networks that don't "
"allow user bots. Available commands are listed "
"below; to use them, type \002%s\032\037command\037\002. For "
"more information on a specific command, type "
"\002%s\032\037command\037\002."
),
BotServ->nick.c_str(),
BotServ->GetQueryCommand().c_str(),
BotServ->GetQueryCommand({}, source.command).c_str());
source.Reply(" ");
}
return EVENT_CONTINUE;
@@ -168,14 +180,20 @@ public:
if (!params.empty() || source.c || source.service != *BotServ)
return;
source.Reply(_(" \n"
"Bot will join a channel whenever there is at least\n"
"\002%d\002 user(s) on it."), Config->GetModule(this).Get<unsigned>("minusers"));
source.Reply(" ");
source.Reply(_("Bot will join a channel whenever there is at least \002%d\002 user(s) on it."),
Config->GetModule(this).Get<unsigned>("minusers"));
const Anope::string &fantasycharacters = Config->GetModule("fantasy").Get<const Anope::string>("fantasycharacter", "!");
if (!fantasycharacters.empty())
source.Reply(_("Additionally, if fantasy is enabled fantasy commands\n"
"can be executed by prefixing the command name with\n"
"one of the following characters: %s"), fantasycharacters.c_str());
{
source.Reply(_(
"Additionally, if fantasy is enabled fantasy commands "
"can be executed by prefixing the command name with "
"one of the following characters: %s"
),
fantasycharacters.c_str());
}
}
EventReturn OnChannelModeSet(Channel *c, MessageSource &source, ChannelMode *mode, const Anope::string &param) override
+18 -12
View File
@@ -76,9 +76,11 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Assigns the specified bot to a channel. You\n"
"can then configure the bot for the channel so it fits\n"
"your needs."));
source.Reply(_(
"Assigns the specified bot to a channel. You "
"can then configure the bot for the channel so it fits "
"your needs."
));
return true;
}
};
@@ -138,11 +140,13 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Unassigns a bot from a channel. When you use this command,\n"
"the bot won't join the channel anymore. However, bot\n"
"configuration for the channel is kept, so you will always\n"
"be able to reassign a bot later without having to reconfigure\n"
"it entirely."));
source.Reply(_(
"Unassigns a bot from a channel. When you use this command, "
"the bot won't join the channel anymore. However, bot "
"configuration for the channel is kept, so you will always "
"be able to reassign a bot later without having to reconfigure "
"it entirely."
));
return true;
}
};
@@ -197,10 +201,12 @@ public:
bool OnHelp(CommandSource &source, const Anope::string &) override
{
this->SendSyntax(source);
source.Reply(_(" \n"
"This option makes a channel unassignable. If a bot\n"
"is already assigned to the channel, it is unassigned\n"
"automatically when you enable it."));
source.Reply(" ");
source.Reply(_(
"This option makes a channel unassignable. If a bot "
"is already assigned to the channel, it is unassigned "
"automatically when you enable it."
));
return true;
}
};
+30 -27
View File
@@ -435,35 +435,38 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Maintains the \002bad words list\002 for a channel. The bad\n"
"words list determines which words are to be kicked\n"
"when the bad words kicker is enabled. For more information,\n"
"type \002%s KICK %s\002.\n"
" \n"
"The \002ADD\002 command adds the given word to the\n"
"bad words list. If SINGLE is specified, a kick will be\n"
"done only if a user says the entire word. If START is\n"
"specified, a kick will be done if a user says a word\n"
"that starts with \037word\037. If END is specified, a kick\n"
"will be done if a user says a word that ends with\n"
"\037word\037. If you don't specify anything, a kick will\n"
"be issued every time \037word\037 is said by a user.\n"
" \n"), source.service->GetQueryCommand("generic/help").c_str(), source.command.c_str());
source.Reply(_("The \002DEL\002 command removes the given word from the\n"
"bad words list. If a list of entry numbers is given, those\n"
"entries are deleted. (See the example for LIST below.)\n"
" \n"
"The \002LIST\002 command displays the bad words list. If\n"
"a wildcard mask is given, only those entries matching the\n"
"mask are displayed. If a list of entry numbers is given,\n"
source.Reply(_(
"Maintains the \002bad words list\002 for a channel. The bad "
"words list determines which words are to be kicked "
"when the bad words kicker is enabled. For more information, "
"type \002%s\032KICK\032%s\002."
"\n\n"
"The \002ADD\002 command adds the given word to the "
"bad words list. If SINGLE is specified, a kick will be "
"done only if a user says the entire word. If START is "
"specified, a kick will be done if a user says a word "
"that starts with \037word\037. If END is specified, a kick "
"will be done if a user says a word that ends with "
"\037word\037. If you don't specify anything, a kick will "
"be issued every time \037word\037 is said by a user."
"\n\n"
"The \002DEL\002 command removes the given word from the "
"bad words list. If a list of entry numbers is given, those "
"entries are deleted. (See the example for LIST below.)"
"\n\n"
"The \002LIST\002 command displays the bad words list. If "
"a wildcard mask is given, only those entries matching the "
"mask are displayed. If a list of entry numbers is given, "
"only those entries are shown; for example:\n"
" \002#channel LIST 2-5,7-9\002\n"
" \002#channel\032LIST\0322-5,7-9\002\n"
" Lists bad words entries numbered 2 through 5 and\n"
" 7 through 9.\n"
" \n"
"The \002CLEAR\002 command clears all entries from the\n"
"bad words list."));
" 7 through 9."
"\n\n"
"The \002CLEAR\002 command clears all entries from the "
"bad words list."
),
source.service->GetQueryCommand("generic/help").c_str(),
source.command.c_str());
return true;
}
};
+19 -17
View File
@@ -347,23 +347,25 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Allows Services Operators to create, modify, and delete\n"
"bots that users will be able to use on their own\n"
"channels.\n"
" \n"
"\002BOT ADD\002 adds a bot with the given nickname, username,\n"
"hostname and realname. Since no integrity checks are done\n"
"for these settings, be really careful.\n"
" \n"
"\002BOT CHANGE\002 allows you to change the nickname, username, hostname\n"
"or realname of a bot without deleting it (and\n"
"all the data associated with it).\n"
" \n"
"\002BOT DEL\002 removes the given bot from the bot list.\n"
" \n"
"\002Note\002: You cannot create a bot with a nick that is\n"
"currently registered. If an unregistered user is currently\n"
"using the nick, they will be killed."));
source.Reply(_(
"Allows Services Operators to create, modify, and delete "
"bots that users will be able to use on their own "
"channels."
"\n\n"
"\002BOT\032ADD\002 adds a bot with the given nickname, username, "
"hostname and realname. Since no integrity checks are done "
"for these settings, be really careful."
"\n\n"
"\002BOT\032CHANGE\002 allows you to change the nickname, username, hostname "
"or realname of a bot without deleting it (and "
"all the data associated with it)."
"\n\n"
"\002BOT\032DEL\002 removes the given bot from the bot list."
"\n\n"
"\002Note\002: You cannot create a bot with a nick that is "
"currently registered. If an unregistered user is currently "
"using the nick, they will be killed."
));
return true;
}
};
+17 -11
View File
@@ -70,8 +70,12 @@ public:
list.Process(replies);
if (!count)
source.Reply(_("There are no bots available at this time.\n"
"Ask a Services Operator to create one!"));
{
source.Reply(_(
"There are no bots available at this time. "
"Ask a Services Operator to create one!"
));
}
else
{
source.Reply(_("Bot list:"));
@@ -87,15 +91,17 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Lists all available bots on this network.\n"
"\n"
"If the OPERONLY, UNUSED or VANITY options are given only\n"
"bots which, respectively, are oper-only, unused or were\n"
"added at runtime will be displayed. If multiple options are\n"
"given, all nicks matching at least one option will be\n"
"displayed.\n"
"\n"
"Note that these options are limited to \037Services Operators\037."));
source.Reply(_(
"Lists all available bots on this network."
"\n\n"
"If the OPERONLY, UNUSED or VANITY options are given only "
"bots which, respectively, are oper-only, unused or were "
"added at runtime will be displayed. If multiple options are "
"given, all nicks matching at least one option will be "
"displayed."
"\n\n"
"Note that these options are limited to \037Services Operators\037."
));
return true;
}
};
+4 -2
View File
@@ -122,8 +122,10 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Makes the bot do the equivalent of a \"/me\" command\n"
"on the specified channel using the specified text."));
source.Reply(_(
"Makes the bot do the equivalent of a \"/me\" command "
"on the specified channel using the specified text."
));
return true;
}
};
+7 -5
View File
@@ -104,11 +104,13 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Allows you to see %s information about a channel or a bot.\n"
"If the parameter is a channel, then you'll get information\n"
"such as enabled kickers. If the parameter is a nick,\n"
"you'll get information about a bot, such as creation\n"
"time or number of channels it is on."), source.service->nick.c_str());
source.Reply(_(
"Allows you to see %s information about a channel or a bot. "
"If the parameter is a channel, then you'll get information "
"such as enabled kickers. If the parameter is a nick, "
"you'll get information about a bot, such as creation "
"time or number of channels it is on."
), source.service->nick.c_str());
return true;
}
+174 -107
View File
@@ -153,13 +153,14 @@ public:
}
}
source.Reply(_("Type \002%s \037option\037\002 for more information\n"
"on a specific option.\n"
" \n"
"Note: access to this command is controlled by the\n"
"level SET."),
source.Reply(_(
"Type \002%s\032\037option\037\002 for more information "
"on a specific option."
"\n\n"
"Note: access to this command is controlled by the "
"level SET."
),
source.service->GetQueryCommand("generic/help", this_name).c_str());
return true;
}
};
@@ -221,8 +222,10 @@ protected:
val = true;
if (kd->ttb[ttb_idx])
source.Reply(_("Bot will now kick for \002%s\002, and will place a ban\n"
"after %d kicks for the same user."), optname.c_str(), kd->ttb[ttb_idx]);
{
source.Reply(_("Bot will now kick for \002%s\002, and will place a ban after %d kicks for the same user."),
optname.c_str(), kd->ttb[ttb_idx]);
}
else
source.Reply(_("Bot will now kick for \002%s\002."), optname.c_str());
@@ -268,13 +271,16 @@ public:
this->SendSyntax(source);
source.Reply(" ");
BotInfo *bi = Config->GetClient("BotServ");
source.Reply(_("Sets the AMSG kicker on or off. When enabled, the bot will\n"
"kick users who send the same message to multiple channels\n"
"where %s bots are.\n"
" \n"
"\037ttb\037 is the number of times a user can be kicked\n"
"before they get banned. Don't give ttb to disable\n"
"the ban system once activated."), bi ? bi->nick.c_str() : "BotServ");
source.Reply(_(
"Sets the AMSG kicker on or off. When enabled, the bot will "
"kick users who send the same message to multiple channels "
"where %s bots are."
"\n\n"
"\037ttb\037 is the number of times a user can be kicked "
"before they get banned. Don't give ttb to disable "
"the ban system once activated."
),
bi ? bi->nick.c_str() : "BotServ");
return true;
}
};
@@ -305,16 +311,19 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Sets the bad words kicker on or off. When enabled, this\n"
"option tells the bot to kick users who say certain words\n"
"on the channels.\n"
"You can define bad words for your channel using the\n"
"\002BADWORDS\002 command. Type \002%s BADWORDS\002 for\n"
"more information.\n"
" \n"
"\037ttb\037 is the number of times a user can be kicked\n"
"before it gets banned. Don't give ttb to disable\n"
"the ban system once activated."),
source.Reply(_(
"Sets the bad words kicker on or off. When enabled, this "
"option tells the bot to kick users who say certain words "
"on the channels."
"\n\n"
"You can define bad words for your channel using the "
"\002BADWORDS\002 command. Type \002%s\032BADWORDS\002 for "
"more information."
"\n\n"
"\037ttb\037 is the number of times a user can be kicked "
"before it gets banned. Don't give ttb to disable "
"the ban system once activated."
),
source.service->GetQueryCommand("generic/help").c_str());
return true;
}
@@ -345,12 +354,14 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Sets the bolds kicker on or off. When enabled, this\n"
"option tells the bot to kick users who use bolds.\n"
" \n"
"\037ttb\037 is the number of times a user can be kicked\n"
"before it gets banned. Don't give ttb to disable\n"
"the ban system once activated."));
source.Reply(_(
"Sets the bolds kicker on or off. When enabled, this "
"option tells the bot to kick users who use bolds."
"\n\n"
"\037ttb\037 is the number of times a user can be kicked "
"before it gets banned. Don't give ttb to disable "
"the ban system once activated."
));
return true;
}
};
@@ -402,12 +413,23 @@ public:
kd->caps = true;
if (kd->ttb[TTB_CAPS])
source.Reply(_("Bot will now kick for \002caps\002 (they must constitute at least\n"
"%d characters and %d%% of the entire message), and will\n"
"place a ban after %d kicks for the same user."), kd->capsmin, kd->capspercent, kd->ttb[TTB_CAPS]);
{
source.Reply(_(
"Bot will now kick for \002caps\002 (they must constitute at least "
"%d characters and %d%% of the entire message), and will "
"place a ban after %d kicks for the same user."
),
kd->capsmin,
kd->capspercent,
kd->ttb[TTB_CAPS]);
}
else
source.Reply(_("Bot will now kick for \002caps\002 (they must constitute at least\n"
"%d characters and %d%% of the entire message)."), kd->capsmin, kd->capspercent);
source.Reply(_(
"Bot will now kick for \002caps\002 (they must constitute at least "
"%d characters and %d%% of the entire message)."
),
kd->capsmin,
kd->capspercent);
}
else
{
@@ -422,17 +444,20 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Sets the caps kicker on or off. When enabled, this\n"
"option tells the bot to kick users who are talking in\n"
"CAPS.\n"
"The bot kicks only if there are at least \002min\002 caps\n"
"and they constitute at least \002percent\002%% of the total\n"
"text line (if not given, it defaults to 10 characters\n"
"and 25%%).\n"
" \n"
"\037ttb\037 is the number of times a user can be kicked\n"
"before it gets banned. Don't give ttb to disable\n"
"the ban system once activated."));
source.Reply(_(
"Sets the caps kicker on or off. When enabled, this "
"option tells the bot to kick users who are talking in "
"CAPS."
"\n\n"
"The bot kicks only if there are at least \002min\002 caps "
"and they constitute at least \002percent\002%% of the total "
"text line (if not given, it defaults to 10 characters "
"and 25%%)."
"\n\n"
"\037ttb\037 is the number of times a user can be kicked "
"before it gets banned. Don't give ttb to disable "
"the ban system once activated."
));
return true;
}
};
@@ -462,12 +487,14 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Sets the colors kicker on or off. When enabled, this\n"
"option tells the bot to kick users who use colors.\n"
" \n"
"\037ttb\037 is the number of times a user can be kicked\n"
"before it gets banned. Don't give ttb to disable\n"
"the ban system once activated."));
source.Reply(_(
"Sets the colors kicker on or off. When enabled, this "
"option tells the bot to kick users who use colors."
"\n\n"
"\037ttb\037 is the number of times a user can be kicked "
"before it gets banned. Don't give ttb to disable "
"the ban system once activated."
));
return true;
}
};
@@ -522,8 +549,15 @@ public:
kd->flood = true;
if (kd->ttb[TTB_FLOOD])
source.Reply(_("Bot will now kick for \002flood\002 (%d lines in %d seconds\n"
"and will place a ban after %d kicks for the same user."), kd->floodlines, kd->floodsecs, kd->ttb[TTB_FLOOD]);
{
source.Reply(_(
"Bot will now kick for \002flood\002 (%d lines in %d seconds "
"and will place a ban after %d kicks for the same user."
),
kd->floodlines,
kd->floodsecs,
kd->ttb[TTB_FLOOD]);
}
else
source.Reply(_("Bot will now kick for \002flood\002 (%d lines in %d seconds)."), kd->floodlines, kd->floodsecs);
}
@@ -542,14 +576,15 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Sets the flood kicker on or off. When enabled, this\n"
"option tells the bot to kick users who are flooding\n"
"the channel using at least \002ln\002 lines in \002secs\002 seconds\n"
"(if not given, it defaults to 6 lines in 10 seconds).\n"
" \n"
"\037ttb\037 is the number of times a user can be kicked\n"
"before it gets banned. Don't give ttb to disable\n"
"the ban system once activated."));
source.Reply(_(
"Sets the flood kicker on or off. When enabled, this "
"option tells the bot to kick users who are flooding "
"the channel using at least \002ln\002 lines in \002secs\002 seconds "
"(if not given, it defaults to 6 lines in 10 seconds). "
"\n\n"
"\037ttb\037 is the number of times a user can be kicked "
"before it gets banned. Don't give ttb to disable "
"the ban system once activated."));
return true;
}
};
@@ -579,12 +614,14 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Sets the italics kicker on or off. When enabled, this\n"
"option tells the bot to kick users who use italics.\n"
" \n"
"\037ttb\037 is the number of times a user can be kicked\n"
"before it gets banned. Don't give ttb to disable\n"
"the ban system once activated."));
source.Reply(_(
"Sets the italics kicker on or off. When enabled, this "
"option tells the bot to kick users who use italics. "
"\n\n"
"\037ttb\037 is the number of times a user can be kicked "
"before it gets banned. Don't give ttb to disable "
"the ban system once activated."
));
return true;
}
};
@@ -633,22 +670,42 @@ public:
if (kd->ttb[TTB_REPEAT])
{
if (kd->repeattimes != 1)
source.Reply(_("Bot will now kick for \002repeats\002 (users that repeat the\n"
"same message %d times), and will place a ban after %d\n"
"kicks for the same user."), kd->repeattimes, kd->ttb[TTB_REPEAT]);
{
source.Reply(_(
"Bot will now kick for \002repeats\002 (users that repeat the "
"same message %d times), and will place a ban after %d "
"kicks for the same user."
),
kd->repeattimes,
kd->ttb[TTB_REPEAT]);
}
else
source.Reply(_("Bot will now kick for \002repeats\002 (users that repeat the\n"
"same message %d time), and will place a ban after %d\n"
"kicks for the same user."), kd->repeattimes, kd->ttb[TTB_REPEAT]);
source.Reply(_(
"Bot will now kick for \002repeats\002 (users that repeat the "
"same message %d time), and will place a ban after %d "
"kicks for the same user."
),
kd->repeattimes,
kd->ttb[TTB_REPEAT]);
}
else
{
if (kd->repeattimes != 1)
source.Reply(_("Bot will now kick for \002repeats\002 (users that repeat the\n"
"same message %d times)."), kd->repeattimes);
{
source.Reply(_(
"Bot will now kick for \002repeats\002 (users that repeat the "
"same message %d times)."
),
kd->repeattimes);
}
else
source.Reply(_("Bot will now kick for \002repeats\002 (users that repeat the\n"
"same message %d time)."), kd->repeattimes);
{
source.Reply(_(
"Bot will now kick for \002repeats\002 (users that repeat the "
"same message %d time)."
),
kd->repeattimes);
}
}
}
else if (params[1].equals_ci("OFF"))
@@ -666,14 +723,16 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Sets the repeat kicker on or off. When enabled, this\n"
"option tells the bot to kick users who are repeating\n"
"themselves \002num\002 times (if num is not given, it\n"
"defaults to 3).\n"
" \n"
"\037ttb\037 is the number of times a user can be kicked\n"
"before it gets banned. Don't give ttb to disable\n"
"the ban system once activated."));
source.Reply(_(
"Sets the repeat kicker on or off. When enabled, this "
"option tells the bot to kick users who are repeating "
"themselves \002num\002 times (if num is not given, it "
"defaults to 3)."
"\n\n"
"\037ttb\037 is the number of times a user can be kicked "
"before it gets banned. Don't give ttb to disable "
"the ban system once activated."
));
return true;
}
};
@@ -703,12 +762,14 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Sets the reverses kicker on or off. When enabled, this\n"
"option tells the bot to kick users who use reverses.\n"
" \n"
"\037ttb\037 is the number of times a user can be kicked\n"
"before it gets banned. Don't give ttb to disable\n"
"the ban system once activated."));
source.Reply(_(
"Sets the reverses kicker on or off. When enabled, this "
"option tells the bot to kick users who use reverses. "
"\n\n"
"\037ttb\037 is the number of times a user can be kicked "
"before it gets banned. Don't give ttb to disable "
"the ban system once activated."
));
return true;
}
};
@@ -738,12 +799,14 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Sets the underlines kicker on or off. When enabled, this\n"
"option tells the bot to kick users who use underlines.\n"
" \n"
"\037ttb\037 is the number of times a user can be kicked\n"
"before it gets banned. Don't give ttb to disable\n"
"the ban system once activated."));
source.Reply(_(
"Sets the underlines kicker on or off. When enabled, this "
"option tells the bot to kick users who use underlines. "
"\n\n"
"\037ttb\037 is the number of times a user can be kicked "
"before it gets banned. Don't give ttb to disable "
"the ban system once activated."
));
return true;
}
};
@@ -806,10 +869,12 @@ public:
bool OnHelp(CommandSource &source, const Anope::string &) override
{
this->SendSyntax(source);
source.Reply(_(" \n"
"Enables or disables \002ops protection\002 mode on a channel.\n"
"When it is enabled, ops won't be kicked by the bot\n"
"even if they don't match the NOKICK level."));
source.Reply(" ");
source.Reply(_(
"Enables or disables \002ops protection\002 mode on a channel. "
"When it is enabled, ops won't be kicked by the bot "
"even if they don't match the NOKICK level."
));
return true;
}
};
@@ -872,10 +937,12 @@ public:
bool OnHelp(CommandSource &source, const Anope::string &) override
{
this->SendSyntax(source);
source.Reply(_(" \n"
"Enables or disables \002voices protection\002 mode on a channel.\n"
"When it is enabled, voices won't be kicked by the bot\n"
"even if they don't match the NOKICK level."));
source.Reply(" ");
source.Reply(_(
"Enables or disables \002voices protection\002 mode on a channel. "
"When it is enabled, voices won't be kicked by the bot "
"even if they don't match the NOKICK level."
));
return true;
}
};
+18 -13
View File
@@ -30,9 +30,11 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Configures bot options.\n"
" \n"
"Available options:"));
source.Reply(_(
"Configures bot options."
"\n\n"
"Available options:"
));
bool hide_privileged_commands = Config->GetBlock("options").Get<bool>("hideprivilegedcommands"),
hide_registered_commands = Config->GetBlock("options").Get<bool>("hideregisteredcommands");
Anope::string this_name = source.command;
@@ -58,8 +60,7 @@ public:
}
}
}
source.Reply(_("Type \002%s \037option\037\002 for more information on a\n"
"particular option."),
source.Reply(_("Type \002%s\032\037option\037\002 for more information on a particular option."),
source.service->GetQueryCommand("generic/help", this_name).c_str());
return true;
@@ -151,11 +152,13 @@ public:
bool OnHelp(CommandSource &source, const Anope::string &) override
{
this->SendSyntax(source);
source.Reply(_(" \n"
"Sets the time bot bans expire in. If enabled, any bans placed by\n"
"bots, such as flood kicker, badwords kicker, etc. will automatically\n"
"be removed after the given time. Set to 0 to disable bans from\n"
"automatically expiring."));
source.Reply(" ");
source.Reply(_(
"Sets the time bot bans expire in. If enabled, any bans placed by "
"bots, such as flood kicker, badwords kicker, etc. will automatically "
"be removed after the given time. Set to 0 to disable bans from "
"automatically expiring."
));
return true;
}
};
@@ -204,9 +207,11 @@ public:
bool OnHelp(CommandSource &source, const Anope::string &) override
{
this->SendSyntax(source);
source.Reply(_(" \n"
"This option prevents a bot from being assigned to a\n"
"channel by users that aren't IRC Operators."));
source.Reply(" ");
source.Reply(_(
"This option prevents a bot from being assigned to a "
"channel by users that aren't IRC Operators."
));
return true;
}
};
+30 -17
View File
@@ -260,15 +260,19 @@ public:
{
if (!params.empty() || source.c || source.service != *ChanServ)
return EVENT_CONTINUE;
source.Reply(_("\002%s\002 allows you to register and control various\n"
"aspects of channels. %s can often prevent\n"
"malicious users from \"taking over\" channels by limiting\n"
"who is allowed channel operator privileges. Available\n"
"commands are listed below; to use them, type\n"
"\002%s \037command\037\002. For more information on a\n"
"specific command, type \002%s \037command\037\002.\n"),
ChanServ->nick.c_str(), ChanServ->nick.c_str(),
ChanServ->GetQueryCommand().c_str(), ChanServ->GetQueryCommand("generic/help").c_str());
source.Reply(_(
"\002%s\002 allows you to register and control various "
"aspects of channels. %s can often prevent "
"malicious users from \"taking over\" channels by limiting "
"who is allowed channel operator privileges. Available "
"commands are listed below; to use them, type "
"\002%s\032\037command\037\002. For more information on a "
"specific command, type \002%s\032\037command\037\002."
),
ChanServ->nick.c_str(),
ChanServ->nick.c_str(),
ChanServ->GetQueryCommand().c_str(),
ChanServ->GetQueryCommand("generic/help").c_str());
return EVENT_CONTINUE;
}
@@ -278,15 +282,24 @@ public:
return;
time_t chanserv_expire = Config->GetModule(this).Get<time_t>("expire", "30d");
if (chanserv_expire >= 86400)
source.Reply(_(" \n"
"Note that any channel which is not used for %lu days\n"
"(i.e. which no user on the channel's access list enters\n"
"for that period of time) will be automatically dropped."), (unsigned long)chanserv_expire / 86400);
{
source.Reply(" ");
source.Reply(_(
"Note that any channel which is not used for %lu days "
"(i.e. which no user on the channel's access list enters "
"for that period of time) will be automatically dropped."
),
(unsigned long)chanserv_expire / 86400);
}
if (source.IsServicesOper())
source.Reply(_(" \n"
"Services Operators can also, depending on their access drop\n"
"any channel, view (and modify) the access, levels and akick\n"
"lists and settings for any channel."));
{
source.Reply(" ");
source.Reply(_(
"Services Operators can also, depending on their access drop "
"any channel, view (and modify) the access, levels and akick "
"lists and settings for any channel."
));
}
}
void OnCheckModes(Reference<Channel> &c) override
+79 -62
View File
@@ -582,54 +582,68 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Maintains the \002access list\002 for a channel. The access\n"
"list specifies which users are allowed chanop status or\n"
"access to %s commands on the channel. Different\n"
"user levels allow for access to different subsets of\n"
"privileges. Any registered user not on the access list has\n"
"a user level of 0, and any unregistered user has a user level\n"
"of -1."), source.service->nick.c_str());
source.Reply(" ");
source.Reply(_("The \002ACCESS ADD\002 command adds the given mask to the\n"
"access list with the given user level; if the mask is\n"
"already present on the list, its access level is changed to\n"
"the level specified in the command. The \037level\037 specified\n"
"may be a numerical level or the name of a privilege (eg AUTOOP).\n"
"When a user joins the channel the access they receive is from the\n"
"highest level entry in the access list."));
source.Reply(_(
"Maintains the \002access list\002 for a channel. The access "
"list specifies which users are allowed chanop status or "
"access to %s commands on the channel. Different "
"user levels allow for access to different subsets of "
"privileges. Any registered user not on the access list has "
"a user level of 0, and any unregistered user has a user level "
"of -1."
"\n\n"
"The \002ACCESS\032ADD\002 command adds the given mask to the "
"access list with the given user level; if the mask is "
"already present on the list, its access level is changed to "
"the level specified in the command. The \037level\037 specified "
"may be a numerical level or the name of a privilege (eg AUTOOP). "
"When a user joins the channel the access they receive is from the "
"highest level entry in the access list."
),
source.service->nick.c_str());
if (!Config->GetModule("chanserv").Get<bool>("disallow_channel_access"))
source.Reply(_("The given mask may also be a channel, which will use the\n"
"access list from the other channel up to the given \037level\037."));
source.Reply(" ");
source.Reply(_("The \002ACCESS DEL\002 command removes the given nick from the\n"
"access list. If a list of entry numbers is given, those\n"
"entries are deleted. (See the example for LIST below.)\n"
"You may remove yourself from an access list, even if you\n"
"do not have access to modify that list otherwise."));
source.Reply(" ");
source.Reply(_("The \002ACCESS LIST\002 command displays the access list. If\n"
"a wildcard mask is given, only those entries matching the\n"
"mask are displayed. If a list of entry numbers is given,\n"
"only those entries are shown; for example:\n"
" \002ACCESS #channel LIST 2-5,7-9\002\n"
" Lists access entries numbered 2 through 5 and\n"
" 7 through 9.\n"
" \n"
"The \002ACCESS VIEW\002 command displays the access list similar\n"
"to \002ACCESS LIST\002 but shows the creator and last used time.\n"
" \n"
"The \002ACCESS CLEAR\002 command clears all entries of the\n"
"access list."));
{
source.Reply(_(
"The given mask may also be a channel, which will use the "
"access list from the other channel up to the given \037level\037."
));
}
source.Reply(" ");
source.Reply(_(
"The \002ACCESS\032DEL\002 command removes the given nick from the "
"access list. If a list of entry numbers is given, those "
"entries are deleted. (See the example for LIST below.) "
"You may remove yourself from an access list, even if you "
"do not have access to modify that list otherwise."
"\n\n"
"The \002ACCESS\032LIST\002 command displays the access list. If "
"a wildcard mask is given, only those entries matching the "
"mask are displayed. If a list of entry numbers is given, "
"only those entries are shown; for example:\n"
" \002ACCESS\032#channel\032LIST\0322-5,7-9\002\n"
" Lists access entries numbered 2 through 5 and\n"
" 7 through 9."
"\n\n"
"The \002ACCESS\032VIEW\002 command displays the access list similar "
"to \002ACCESS\032LIST\002 but shows the creator and last used time."
"\n\n"
"The \002ACCESS\032CLEAR\002 command clears all entries of the "
"access list."
));
BotInfo *bi;
Anope::string cmd;
if (Command::FindCommandFromService("chanserv/levels", bi, cmd))
{
source.Reply(_("\002User access levels\002 can be seen by using the\n"
"\002%s\002 command; type \002%s LEVELS\002 for\n"
"information."),
cmd.c_str(), bi->GetQueryCommand("generic/help").c_str());
source.Reply(" ");
source.Reply(_(
"\002User access levels\002 can be seen by using the "
"\002%s\002 command; type \002%s\032LEVELS\002 for "
"information."
),
cmd.c_str(),
bi->GetQueryCommand("generic/help").c_str());
}
return true;
}
@@ -665,7 +679,7 @@ class CommandCSLevels final
Privilege *p = PrivilegeManager::FindPrivilege(what);
if (p == NULL)
{
source.Reply(_("Setting \002%s\002 not known. Type \002%s LEVELS\002 for a list of valid settings."),
source.Reply(_("Setting \002%s\002 not known. Type \002%s\032LEVELS\002 for a list of valid settings."),
what.c_str(), source.service->GetQueryCommand("generic/help").c_str());
}
else
@@ -708,7 +722,7 @@ class CommandCSLevels final
return;
}
source.Reply(_("Setting \002%s\002 not known. Type \002%s LEVELS\002 for a list of valid settings."),
source.Reply(_("Setting \002%s\002 not known. Type \002%s\032LEVELS\002 for a list of valid settings."),
what.c_str(), source.service->GetQueryCommand("generic/help").c_str());
}
@@ -838,25 +852,28 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("The \002LEVELS\002 command allows fine control over the meaning of\n"
"the numeric access levels used for channels. With this\n"
"command, you can define the access level required for most\n"
"of %s's functions. (The \002SET FOUNDER\002 and this command\n"
"are always restricted to the channel founder.)\n"
" \n"
"\002LEVELS SET\002 allows the access level for a function or group of\n"
"functions to be changed. \002LEVELS DISABLE\002 (or \002DIS\002 for short)\n"
"disables an automatic feature or disallows access to a\n"
"function by anyone, INCLUDING the founder (although, the founder\n"
"can always re-enable it). Use \002LEVELS SET founder\002 to make a level\n"
"founder only.\n"
" \n"
"\002LEVELS LIST\002 shows the current levels for each function or\n"
"group of functions. \002LEVELS RESET\002 resets the levels to the\n"
"default levels of a newly-created channel.\n"
" \n"
"For a list of the features and functions whose levels can be\n"
"set, see \002HELP LEVELS DESC\002."), source.service->nick.c_str());
source.Reply(_(
"The \002LEVELS\002 command allows fine control over the meaning of "
"the numeric access levels used for channels. With this "
"command, you can define the access level required for most "
"of %s's functions. (The \002SET\032FOUNDER\002 and this command "
"are always restricted to the channel founder)."
"\n\n"
"\002LEVELS\032SET\002 allows the access level for a function or group of "
"functions to be changed. \002LEVELS\032DISABLE\002 (or \002DIS\002 for short) "
"disables an automatic feature or disallows access to a "
"function by anyone, INCLUDING the founder (although, the founder "
"can always re-enable it). Use \002LEVELS\032SET founder\002 to make a level "
"founder only."
"\n\n"
"\002LEVELS\032LIST\002 shows the current levels for each function or "
"group of functions. \002LEVELS\032RESET\002 resets the levels to the "
"default levels of a newly-created channel."
"\n\n"
"For a list of the features and functions whose levels can be "
"set, see \002HELP\032LEVELS\032DESC\002."
),
source.service->nick.c_str());
}
return true;
}
+37 -33
View File
@@ -488,40 +488,44 @@ public:
BotInfo *bi = Config->GetClient("NickServ");
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Maintains the \002AutoKick list\002 for a channel. If a user\n"
"on the AutoKick list attempts to join the channel,\n"
"%s will ban that user from the channel, then kick\n"
"the user.\n"
" \n"
"The \002AKICK ADD\002 command adds the given nick or usermask\n"
"to the AutoKick list. If a \037reason\037 is given with\n"
"the command, that reason will be used when the user is\n"
"kicked; if not, the default reason is \"User has been\n"
"banned from the channel\".\n"
"When akicking a \037registered nick\037 the %s account\n"
"will be added to the akick list instead of the mask.\n"
"All users within that nickgroup will then be akicked.\n"),
source.service->nick.c_str(), bi ? bi->nick.c_str() : "NickServ");
source.Reply(_(
" \n"
"The \002AKICK DEL\002 command removes the given nick or mask\n"
"from the AutoKick list. It does not, however, remove any\n"
"bans placed by an AutoKick; those must be removed\n"
"manually.\n"
" \n"
"The \002AKICK LIST\002 command displays the AutoKick list, or\n"
"optionally only those AutoKick entries which match the\n"
"given mask.\n"
" \n"
"The \002AKICK VIEW\002 command is a more verbose version of the\n"
"\002AKICK LIST\002 command.\n"
" \n"
"The \002AKICK ENFORCE\002 command causes %s to enforce the\n"
"current AKICK list by removing those users who match an\n"
"AKICK mask.\n"
" \n"
"The \002AKICK CLEAR\002 command clears all entries of the\n"
"akick list."), source.service->nick.c_str());
"Maintains the \002AutoKick list\002 for a channel. If a user "
"on the AutoKick list attempts to join the channel, "
"%s will ban that user from the channel, then kick "
"the user."
"\n\n"
"The \002AKICK\032ADD\002 command adds the given nick or usermask "
"to the AutoKick list. If a \037reason\037 is given with "
"the command, that reason will be used when the user is "
"kicked; if not, the default reason is \"User has been "
"banned from the channel\". "
"When akicking a \037registered nick\037 the %s account "
"will be added to the akick list instead of the mask. "
"All users within that nickgroup will then be akicked. "
"\n\n"
"The \002AKICK\032DEL\002 command removes the given nick or mask "
"from the AutoKick list. It does not, however, remove any "
"bans placed by an AutoKick; those must be removed "
"manually."
"\n\n"
"The \002AKICK\032LIST\002 command displays the AutoKick list, or "
"optionally only those AutoKick entries which match the "
"given mask."
"\n\n"
"The \002AKICK\032VIEW\002 command is a more verbose version of the "
"\002AKICK\032LIST\002 command."
"\n\n"
"The \002AKICK\032ENFORCE\002 command causes %s to enforce the "
"current AKICK list by removing those users who match an "
"AKICK mask."
"\n\n"
"The \002AKICK\032CLEAR\002 command clears all entries of the "
"akick list."
),
source.service->nick.c_str(),
source.service->nick.c_str(),
bi ? bi->nick.c_str() : "NickServ");
return true;
}
};
+8 -6
View File
@@ -240,12 +240,14 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Bans a given nick or mask on a channel. An optional expiry may\n"
"be given to cause services to remove the ban after a set amount\n"
"of time.\n"
" \n"
"By default, limited to AOPs or those with level 5 access\n"
"and above on the channel. Channel founders may ban masks."));
source.Reply(_(
"Bans a given nick or mask on a channel. An optional expiry may "
"be given to cause services to remove the ban after a set amount "
"of time."
"\n\n"
"By default, limited to AOPs or those with level 5 access "
"and above on the channel. Channel founders may ban masks."
));
return true;
}
};
+6 -4
View File
@@ -239,10 +239,12 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Copies all settings, access, akicks, etc from \002channel\002 to the\n"
"\002target\002 channel. If \037what\037 is \002ACCESS\002, \002AKICK\002, \002BADWORDS\002,\n"
"or \002LEVELS\002 then only the respective settings are cloned.\n"
"You must be the founder of \037channel\037 and \037target\037."));
source.Reply(_(
"Copies all settings, access, akicks, etc from \002channel\002 to the "
"\002target\002 channel. If \037what\037 is \002ACCESS\002, \002AKICK\002, \002BADWORDS\002, "
"or \002LEVELS\002 then only the respective settings are cloned. "
"You must be the founder of \037channel\037 and \037target\037."
));
return true;
}
};
+18 -6
View File
@@ -88,16 +88,28 @@ public:
this->SendSyntax(source);
source.Reply(" ");
if (source.IsServicesOper())
source.Reply(_("Unregisters the specified channel. Only \002Services Operators\002\n"
"can drop a channel of which they are not the founder of."));
{
source.Reply(_(
"Unregisters the specified channel. Only \002Services Operators\002 "
"can drop a channel of which they are not the founder of."
));
}
else
source.Reply(_("Unregisters the named channel. Can only be used by\n"
"the \002channel founder\002."));
{
source.Reply(_(
"Unregisters the named channel. Can only be used by "
"the \002channel founder\002."
));
}
source.Reply(" ");
if (source.HasPriv("chanserv/drop/override"))
source.Reply(_("Additionally, Services Operators with the \037chanserv/drop/override\037 permission can\n"
"replace \037code\037 with \002OVERRIDE\002 to drop without a confirmation code."));
{
source.Reply(_(
"Additionally, Services Operators with the \037chanserv/drop/override\037 permission can "
"replace \037code\037 with \002OVERRIDE\002 to drop without a confirmation code."
));
}
return true;
}
};
+15 -13
View File
@@ -240,19 +240,21 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Enforce various channel modes and set options. The \037channel\037\n"
"option indicates what channel to enforce the modes and options\n"
"on. The \037what\037 option indicates what modes and options to\n"
"enforce, and can be any of \002SECUREOPS\002, \002RESTRICTED\002, \002REGONLY\002, \002SSLONLY\002,\n"
"\002BANS\002, or \002LIMIT\002.\n"
" \n"
"Use \002SECUREOPS\002 to enforce the SECUREOPS option, even if it is not\n"
"enabled. Use \002RESTRICTED\002 to enforce the RESTRICTED option, also\n"
"if it's not enabled. Use \002REGONLY\002 to kick all unregistered users\n"
"from the channel. Use \002SSLONLY\002 to kick all users not using a secure\n"
"connection from the channel. \002BANS\002 will enforce bans on the channel by\n"
"kicking users affected by them, and \002LIMIT\002 will kick users until the\n"
"user count drops below the channel limit, if one is set."));
source.Reply(_(
"Enforce various channel modes and set options. The \037channel\037 "
"option indicates what channel to enforce the modes and options "
"on. The \037what\037 option indicates what modes and options to "
"enforce, and can be any of \002SECUREOPS\002, \002RESTRICTED\002, \002REGONLY\002, \002SSLONLY\002, "
"\002BANS\002, or \002LIMIT\002."
"\n\n"
"Use \002SECUREOPS\002 to enforce the SECUREOPS option, even if it is not "
"enabled. Use \002RESTRICTED\002 to enforce the RESTRICTED option, also "
"if it's not enabled. Use \002REGONLY\002 to kick all unregistered users "
"from the channel. Use \002SSLONLY\002 to kick all users not using a secure "
"connection from the channel. \002BANS\002 will enforce bans on the channel by "
"kicking users affected by them, and \002LIMIT\002 will kick users until the "
"user count drops below the channel limit, if one is set."
));
return true;
}
};
+22 -20
View File
@@ -245,26 +245,28 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Controls what messages will be sent to users when they join the channel."));
source.Reply(" ");
source.Reply(_("The \002ENTRYMSG ADD\002 command adds the given message to\n"
"the list of messages shown to users when they join\n"
"the channel."));
source.Reply(" ");
source.Reply(_("The \002ENTRYMSG DEL\002 command removes the specified message from\n"
"the list of messages shown to users when they join\n"
"the channel. You can remove a message by specifying its number\n"
"which you can get by listing the messages as explained below."));
source.Reply(" ");
source.Reply(_("The \002ENTRYMSG LIST\002 command displays a listing of messages\n"
"shown to users when they join the channel."));
source.Reply(" ");
source.Reply(_("The \002ENTRYMSG CLEAR\002 command clears all entries from\n"
"the list of messages shown to users when they join\n"
"the channel, effectively disabling entry messages."));
source.Reply(" ");
source.Reply(_("Adding, deleting, or clearing entry messages requires the\n"
"SET permission."));
source.Reply(_(
"Controls what messages will be sent to users when they join the channel."
"\n\n"
"The \002ENTRYMSG\032ADD\002 command adds the given message to "
"the list of messages shown to users when they join "
"the channel."
"\n\n"
"The \002ENTRYMSG\032DEL\002 command removes the specified message from "
"the list of messages shown to users when they join "
"the channel. You can remove a message by specifying its number "
"which you can get by listing the messages as explained below."
"\n\n"
"The \002ENTRYMSG\032LIST\002 command displays a listing of messages "
"shown to users when they join the channel."
"\n\n"
"The \002ENTRYMSG\032CLEAR\002 command clears all entries from "
"the list of messages shown to users when they join "
"the channel, effectively disabling entry messages."
"\n\n"
"Adding, deleting, or clearing entry messages requires the "
"SET permission."
));
return true;
}
};
+21 -18
View File
@@ -444,24 +444,27 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("%s is another way to modify the channel access list, similar to\n"
"the XOP and ACCESS methods."), source.command.c_str());
source.Reply(" ");
source.Reply(_("The \002MODIFY\002 command allows you to modify the access list. If the mask is\n"
"not already on the access list it is added, then the changes are applied.\n"
"If the mask has no more flags, then the mask is removed from the access list.\n"
"Additionally, you may use +* or -* to add or remove all flags, respectively. You are\n"
"only able to modify the access list if you have the proper permission on the channel,\n"
"and even then you can only give other people access to the equivalent of what your access is."));
source.Reply(" ");
source.Reply(_("The \002LIST\002 command allows you to list existing entries on the channel access list.\n"
"If a mask is given, the mask is wildcard matched against all existing entries on the\n"
"access list, and only those entries are returned. If a set of flags is given, only those\n"
"on the access list with the specified flags are returned."));
source.Reply(" ");
source.Reply(_("The \002CLEAR\002 command clears the channel access list. This requires channel founder access."));
source.Reply(" ");
source.Reply(_("The available flags are:"));
source.Reply(_(
"%s is another way to modify the channel access list, similar to "
"the XOP and ACCESS methods."
"\n\n"
"The \002MODIFY\002 command allows you to modify the access list. If the mask is "
"not already on the access list it is added, then the changes are applied. "
"If the mask has no more flags, then the mask is removed from the access list. "
"Additionally, you may use +* or -* to add or remove all flags, respectively. You are "
"only able to modify the access list if you have the proper permission on the channel, "
"and even then you can only give other people access to the equivalent of what your access is."
"\n\n"
"The \002LIST\002 command allows you to list existing entries on the channel access list. "
"If a mask is given, the mask is wildcard matched against all existing entries on the "
"access list, and only those entries are returned. If a set of flags is given, only those "
"on the access list with the specified flags are returned."
"\n\n"
"The \002CLEAR\002 command clears the channel access list. This requires channel founder access."
"\n\n"
"The available flags are:"
),
source.command.c_str());
typedef std::multimap<char, Anope::string, ci::less> reverse_map;
reverse_map reverse;
+8 -6
View File
@@ -74,12 +74,14 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Lists information about the specified registered channel,\n"
"including its founder, time of registration, last\n"
"time used, and description. If the user issuing the\n"
"command has the appropriate access for it, then the\n"
"successor, last topic set, settings and expiration\n"
"time will also be displayed when applicable."));
source.Reply(_(
"Lists information about the specified registered channel, "
"including its founder, time of registration, last "
"time used, and description. If the user issuing the "
"command has the appropriate access for it, then the "
"successor, last topic set, settings and expiration "
"time will also be displayed when applicable."
));
return true;
}
};
+8 -5
View File
@@ -89,11 +89,14 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Tells %s to invite you or an optionally specified\n"
"nick into the given channel.\n"
" \n"
"By default, limited to AOPs or those with level 5 access and above\n"
"on the channel."), source.service->nick.c_str());
source.Reply(_(
"Tells %s to invite you or an optionally specified "
"nick into the given channel."
"\n\n"
"By default, limited to AOPs or those with level 5 access and above "
"on the channel."
),
source.service->nick.c_str());
return true;
}
};
+6 -4
View File
@@ -131,10 +131,12 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Kicks a specified nick from a channel.\n"
" \n"
"By default, limited to AOPs or those with level 5 access\n"
"and above on the channel. Channel founders can also specify masks."));
source.Reply(_(
"Kicks a specified nick from a channel."
"\n\n"
"By default, limited to AOPs or those with level 5 access "
"and above on the channel. Channel founders can also specify masks."
));
return true;
}
};
+41 -32
View File
@@ -42,8 +42,10 @@ public:
if (!num1.has_value() || !num2.has_value())
{
source.Reply(LIST_INCORRECT_RANGE);
source.Reply(_("To search for channels starting with #, search for the channel\n"
"name without the #-sign prepended (\002anope\002 instead of \002#anope\002)."));
source.Reply(_(
"To search for channels starting with #, search for the channel "
"name without the #-sign prepended (\002anope\002 instead of \002#anope\002)."
));
return;
}
@@ -133,38 +135,43 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Lists all registered channels matching the given pattern.\n"
"Channels with the \002PRIVATE\002 option set will only be\n"
"displayed to Services Operators with the proper access.\n"
"Channels with the \002NOEXPIRE\002 option set will have\n"
"a \002!\002 prefixed to the channel for Services Operators to see.\n"
" \n"
"Note that a preceding '#' specifies a range, channel names\n"
"are to be written without '#'.\n"
" \n"
"If the SUSPENDED or NOEXPIRE options are given, only channels\n"
"which, respectively, are SUSPENDED or have the NOEXPIRE\n"
"flag set will be displayed. If multiple options are given,\n"
"all channels matching at least one option will be displayed.\n"
"Note that these options are limited to \037Services Operators\037.\n"
" \n"
"Examples:\n"
" \n"
" \002LIST *anope*\002\n"
" Lists all registered channels with \002anope\002 in their\n"
" names (case insensitive).\n"
" \n"
" \002LIST * NOEXPIRE\002\n"
" Lists all registered channels which have been set to not expire.\n"
" \n"
" \002LIST #51-100\002\n"
" Lists all registered channels within the given range (51-100)."));
source.Reply(_(
"Lists all registered channels matching the given pattern. "
"Channels with the \002PRIVATE\002 option set will only be "
"displayed to Services Operators with the proper access. "
"Channels with the \002NOEXPIRE\002 option set will have "
"a \002!\002 prefixed to the channel for Services Operators to see."
"\n\n"
"Note that a preceding '#' specifies a range, channel names "
"are to be written without '#'."
"\n\n"
"If the SUSPENDED or NOEXPIRE options are given, only channels "
"which, respectively, are SUSPENDED or have the NOEXPIRE "
"flag set will be displayed. If multiple options are given, "
"all channels matching at least one option will be displayed. "
"Note that these options are limited to \037Services Operators\037."
"\n\n"
"Examples:"
"\n\n"
" \002LIST\032*anope*\002\n"
" Lists all registered channels with \002anope\002 in their\n"
" names (case insensitive)."
"\n\n"
" \002LIST\032*\032NOEXPIRE\002\n"
" Lists all registered channels which have been set to not expire."
"\n\n"
" \002LIST #51-100\002\n"
" Lists all registered channels within the given range (51-100)."
));
if (!Config->GetBlock("options").Get<const Anope::string>("regexengine").empty())
{
source.Reply(" ");
source.Reply(_("Regex matches are also supported using the %s engine.\n"
"Enclose your pattern in // if this is desired."), Config->GetBlock("options").Get<const Anope::string>("regexengine").c_str());
source.Reply(_(
"Regex matches are also supported using the %s engine. "
"Enclose your pattern in // if this is desired."
),
Config->GetBlock("options").Get<const Anope::string>("regexengine").c_str());
}
return true;
@@ -234,8 +241,10 @@ public:
BotInfo *bi;
Anope::string cmd;
if (Command::FindCommandFromService("chanserv/list", bi, cmd))
source.Reply(_("When \002private\002 is set, the channel will not appear in\n"
"%s's %s command."), bi->nick.c_str(), cmd.c_str());
{
source.Reply(_("When \002private\002 is set, the channel will not appear in %s's %s command."),
bi->nick.c_str(), cmd.c_str());
}
return true;
}
};
+23 -19
View File
@@ -271,26 +271,30 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("The %s command allows users to configure logging settings\n"
"for their channel. If no parameters are given this command\n"
"lists the current logging methods in place for this channel.\n"
" \n"
"Otherwise, \037command\037 must be a command name, and \037method\037\n"
"is one of the following logging methods:\n"
" \n"
" MESSAGE [status], NOTICE [status], MEMO\n"
" \n"
"Which are used to message, notice, and memo the channel respectively.\n"
"With MESSAGE or NOTICE you must have a service bot assigned to and joined\n"
"to your channel. Status may be a channel status such as @ or +.\n"
" \n"
"To remove a logging method use the same syntax as you would to add it.\n"
" \n"
source.Reply(_(
"The %s command allows users to configure logging settings "
"for their channel. If no parameters are given this command "
"lists the current logging methods in place for this channel."
"\n\n"
"Otherwise, \037command\037 must be a command name, and \037method\037 "
"is one of the following logging methods:"
"\n\n"
" MESSAGE\032[status], NOTICE\032[status], MEMO"
"\n\n"
"Which are used to message, notice, and memo the channel respectively. "
"With MESSAGE or NOTICE you must have a service bot assigned to and joined "
"to your channel. Status may be a channel status such as @ or +."
"\n\n"
"To remove a logging method use the same syntax as you would to add it."
"\n\n"
"Example:\n"
" %s #anope chanserv/access MESSAGE @\n"
" Would message any channel operators whenever someone used the\n"
" ACCESS command on ChanServ on the channel."),
source.command.upper().c_str(), source.command.upper().c_str());
" %s\032#anope\032chanserv/access\032MESSAGE\032@\n"
" Would message any channel operators whenever someone used the "
"ACCESS command on ChanServ on the channel."
),
source.command.upper().c_str(),
source.command.upper().c_str());
return true;
}
};
+37 -29
View File
@@ -774,29 +774,35 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Mainly controls mode locks and mode access (which is different from channel access)\n"
"on a channel.\n"
" \n"
"The \002%s LOCK\002 command allows you to add, delete, and view mode locks on a channel.\n"
"If a mode is locked on or off, services will not allow that mode to be changed. The \002SET\002\n"
"command will clear all existing mode locks and set the new one given, while \002ADD\002 and \002DEL\002\n"
"modify the existing mode lock.\n"
"Example:\n"
" \002MODE #channel LOCK ADD +bmnt *!*@*aol*\002\n"
" \n"
"The \002%s SET\002 command allows you to set modes through services. Wildcards * and ? may\n"
"be given as parameters for list and status modes.\n"
"Example:\n"
" \002MODE #channel SET +v *\002\n"
" Sets voice status to all users in the channel.\n"
" \n"
" \002MODE #channel SET -b ~c:*\n"
" Clears all extended bans that start with ~c:\n"
" \n"
"The \002%s CLEAR\002 command is an easy way to clear modes on a channel. \037what\037 may be\n"
"any mode name. Examples include bans, excepts, inviteoverrides, ops, halfops, and voices. If \037what\037\n"
"is not given then all basic modes are removed."),
source.command.upper().c_str(), source.command.upper().c_str(), source.command.upper().c_str());
source.Reply(_(
"Mainly controls mode locks and mode access (which is different from channel access) "
"on a channel."
"\n\n"
"The \002%s\032LOCK\002 command allows you to add, delete, and view mode locks on a channel. "
"If a mode is locked on or off, services will not allow that mode to be changed. The \002SET\002 "
"command will clear all existing mode locks and set the new one given, while \002ADD\002 and \002DEL\002 "
"modify the existing mode lock."
"\n\n"
"Example:\n"
" \002MODE\032#channel\032LOCK\032ADD\032+bmnt\032*!*@*aol*\002\n"
"\n\n"
"The \002%s\032SET\002 command allows you to set modes through services. Wildcards * and ? may "
"be given as parameters for list and status modes."
"\n\n"
"Example:\n"
" \002MODE\032#channel\032SET\032+v\032*\002\n"
" Sets voice status to all users in the channel."
"\n\n"
" \002MODE\032#channel\032SET\032-b\032~c:*\n"
" Clears all extended bans that start with ~c:"
"\n\n"
"The \002%s\032CLEAR\002 command is an easy way to clear modes on a channel. \037what\037 may be "
"any mode name. Examples include bans, excepts, inviteoverrides, ops, halfops, and voices. If \037what\037 "
"is not given then all basic modes are removed."
),
source.command.upper().c_str(),
source.command.upper().c_str(),
source.command.upper().c_str());
return true;
}
};
@@ -924,13 +930,15 @@ public:
this->SendSyntax(source);
source.Reply(" ");
if (m.first)
source.Reply(_("Gives %s status to the selected nicks on a channel. If \037nick\037 is\n"
"not given, it will %s you."),
m.second.upper().c_str(), m.second.lower().c_str());
{
source.Reply(_("Gives %s status to the selected nicks on a channel. If \037nick\037 is not given, it will %s you."),
m.second.upper().c_str(), m.second.lower().c_str());
}
else
source.Reply(_("Removes %s status from the selected nicks on a channel. If \037nick\037 is\n"
"not given, it will de%s you."),
m.second.upper().c_str(), m.second.lower().c_str());
{
source.Reply(_("Removes %s status from the selected nicks on a channel. If \037nick\037 is not given, it will de%s you."),
m.second.upper().c_str(), m.second.lower().c_str());
}
source.Reply(" ");
source.Reply(_("You must have the %s(ME) privilege on the channel to use this command."), m.second.upper().c_str());
+31 -19
View File
@@ -84,29 +84,41 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Registers a channel in the %s database. In order\n"
"to use this command, you must first be a channel operator\n"
"on the channel you're trying to register.\n"
"The description, which is optional, is a\n"
"general description of the channel's purpose.\n"
" \n"
"When you register a channel, you are recorded as the\n"
"\"founder\" of the channel. The channel founder is allowed\n"
"to change all of the channel settings for the channel;\n"
"%s will also automatically give the founder\n"
"channel operator privileges when they enter the channel."),
source.service->nick.c_str(), source.service->nick.c_str());
source.Reply(_(
"Registers a channel in the %s database. In order "
"to use this command, you must first be a channel operator "
"on the channel you're trying to register. "
"The description, which is optional, is a "
"general description of the channel's purpose. "
"\n\n"
"When you register a channel, you are recorded as the "
"\"founder\" of the channel. The channel founder is allowed "
"to change all of the channel settings for the channel; "
"%s will also automatically give the founder "
"channel operator privileges when they enter the channel."
),
source.service->nick.c_str(),
source.service->nick.c_str());
BotInfo *bi;
Anope::string cmd;
if (Command::FindCommandFromService("chanserv/access", bi, cmd))
source.Reply(_(" \n"
"See the \002%s\002 command (\002%s ACCESS\002) for\n"
"information on giving a subset of these privileges to\n"
"other channel users.\n"),
cmd.c_str(), bi->GetQueryCommand("generic/help").c_str());
source.Reply(_(" \n"
"NOTICE: In order to register a channel, you must have\n"
{
source.Reply(" ");
source.Reply(_(
"See the \002%s\002 command (\002%s\032ACCESS\002) for "
"information on giving a subset of these privileges to "
"other channel users."
),
cmd.c_str(),
bi->GetQueryCommand("generic/help").c_str());
}
source.Reply(" ");
source.Reply(_(
"NOTICE: In order to register a channel, you must have "
"first registered your nickname."));
return true;
}
};
+15 -9
View File
@@ -181,13 +181,17 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("The \002STATS\002 command prints out statistics about stored nicks and memory usage."));
source.Reply(_("The \002CLEAR\002 command lets you clean the database by removing all entries from the\n"
"database that were added within \037time\037.\n"
" \n"
source.Reply(_(
"The \002STATS\002 command prints out statistics about stored nicks and memory usage."
"\n\n"
"The \002CLEAR\002 command lets you clean the database by removing all entries from the "
"database that were added within \037time\037."
"\n\n"
"Example:\n"
" %s CLEAR 30m\n"
" Will remove all entries that were added within the last 30 minutes."), source.command.c_str());
" %s\032CLEAR\03230m\n"
" Will remove all entries that were added within the last 30 minutes."
),
source.command.c_str());
return true;
}
};
@@ -374,9 +378,11 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Checks for the last time \037nick\037 was seen joining, leaving,\n"
"or changing nick on the network and tells you when and, depending\n"
"on channel or user settings, where it was."));
source.Reply(_(
"Checks for the last time \037nick\037 was seen joining, leaving, "
"or changing nick on the network and tells you when and, depending "
"on channel or user settings, where it was."
));
return true;
}
};
+117 -83
View File
@@ -31,9 +31,10 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Allows the channel founder to set various channel options\n"
"and other information.\n"
" \n"
source.Reply(_(
"Allows the channel founder to set various channel options "
"and other information."
"\n\n"
"Available options:"));
Anope::string this_name = source.command;
bool hide_privileged_commands = Config->GetBlock("options").Get<bool>("hideprivilegedcommands"),
@@ -59,8 +60,7 @@ public:
c->OnServHelp(source);
}
}
source.Reply(_("Type \002%s \037option\037\002 for more information on a\n"
"particular option."),
source.Reply(_("Type \002%s\032\037option\037\002 for more information on a particular option."),
source.service->GetQueryCommand("generic/help", this_name).c_str());
return true;
}
@@ -122,9 +122,12 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Enables or disables %s's autoop feature for a\n"
"channel. When disabled, users who join the channel will\n"
"not automatically gain any status from %s."), source.service->nick.c_str(),
source.Reply(_(
"Enables or disables %s's autoop feature for a "
"channel. When disabled, users who join the channel will "
"not automatically gain any status from %s."
),
source.service->nick.c_str(),
source.service->nick.c_str());
return true;
}
@@ -182,15 +185,17 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Sets the ban type that will be used by services whenever\n"
"they need to ban someone from your channel.\n"
" \n"
"Bantype is a number between 0 and 3 that means:\n"
" \n"
"0: ban in the form *!user@host\n"
"1: ban in the form *!*user@host\n"
"2: ban in the form *!*@host\n"
"3: ban in the form *!*user@*.domain"));
source.Reply(_(
"Sets the ban type that will be used by services whenever "
"they need to ban someone from your channel."
"\n\n"
"Bantype is a number between 0 and 3 that means:"
"\n\n"
"0: ban in the form *!user@host\n"
"1: ban in the form *!*user@host\n"
"2: ban in the form *!*@host\n"
"3: ban in the form *!*user@*.domain"
));
return true;
}
};
@@ -252,8 +257,10 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Sets the description for the channel, which shows up with\n"
"the \002LIST\002 and \002INFO\002 commands."));
source.Reply(_(
"Sets the description for the channel, which shows up with "
"the \002LIST\002 and \002INFO\002 commands."
));
return true;
}
};
@@ -322,8 +329,10 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Changes the founder of a channel. The new nickname must\n"
"be a registered one."));
source.Reply(_(
"Changes the founder of a channel. The new nickname must "
"be a registered one."
));
return true;
}
};
@@ -387,9 +396,11 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Enables or disables keepmodes for the given channel. If keep\n"
"modes is enabled, services will remember modes set on the channel\n"
"and attempt to re-set them the next time the channel is created."));
source.Reply(_(
"Enables or disables keepmodes for the given channel. If keep "
"modes is enabled, services will remember modes set on the channel "
"and attempt to re-set them the next time the channel is created."
));
return true;
}
};
@@ -452,10 +463,13 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Enables or disables the \002peace\002 option for a channel.\n"
"When \002peace\002 is set, a user won't be able to kick,\n"
"ban or remove a channel status of a user that has\n"
"a level superior or equal to theirs via %s commands."), source.service->nick.c_str());
source.Reply(_(
"Enables or disables the \002peace\002 option for a channel. "
"When \002peace\002 is set, a user won't be able to kick, "
"ban or remove a channel status of a user that has "
"a level superior or equal to theirs via %s commands."
),
source.service->nick.c_str());
return true;
}
};
@@ -595,26 +609,30 @@ public:
BotInfo *ChanServ = Config->GetClient("ChanServ");
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Enables or disables the persistent channel setting.\n"
"When persistent is set, the service bot will remain\n"
"in the channel when it has emptied of users.\n"
" \n"
"If your IRCd does not have a permanent (persistent) channel\n"
"mode you must have a service bot in your channel to\n"
"set persist on, and it can not be unassigned while persist\n"
"is on.\n"
" \n"
"If this network does not have %s enabled and does\n"
"not have a permanent channel mode, %s will\n"
"join your channel when you set persist on (and leave when\n"
"it has been set off).\n"
" \n"
"If your IRCd has a permanent (persistent) channel mode\n"
"and it is set or unset (for any reason, including MODE LOCK),\n"
"persist is automatically set and unset for the channel as well.\n"
"Additionally, services will set or unset this mode when you\n"
"set persist on or off."), BotServ ? BotServ->nick.c_str() : "BotServ",
ChanServ ? ChanServ->nick.c_str() : "ChanServ");
source.Reply(_(
"Enables or disables the persistent channel setting. "
"When persistent is set, the service bot will remain "
"in the channel when it has emptied of users. "
"\n\n"
"If your IRCd does not have a permanent (persistent) channel "
"mode you must have a service bot in your channel to "
"set persist on, and it can not be unassigned while persist "
"is on."
"\n\n"
"If this network does not have %s enabled and does "
"not have a permanent channel mode, %s will "
"join your channel when you set persist on (and leave when "
"it has been set off)."
"\n\n"
"If your IRCd has a permanent (persistent) channel mode "
"and it is set or unset (for any reason, including MODE LOCK), "
"persist is automatically set and unset for the channel as well. "
"Additionally, services will set or unset this mode when you "
"set persist on or off."
),
BotServ ? BotServ->nick.c_str() : "BotServ",
ChanServ ? ChanServ->nick.c_str() : "ChanServ"
);
return true;
}
};
@@ -675,9 +693,11 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Enables or disables the \002restricted access\002 option for a\n"
"channel. When \002restricted access\002 is set, users not on the access list will\n"
"instead be kicked and banned from the channel."));
source.Reply(_(
"Enables or disables the \002restricted access\002 option for a "
"channel. When \002restricted access\002 is set, users not on the access list will "
"instead be kicked and banned from the channel."
));
return true;
}
};
@@ -738,11 +758,13 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Enables or disables the \002secure founder\002 option for a channel.\n"
"When \002secure founder\002 is set, only the real founder will be\n"
"able to drop the channel, change its founder and its successor,\n"
"and not those who have founder level access through\n"
"the access/qop command."));
source.Reply(_(
"Enables or disables the \002secure founder\002 option for a channel. "
"When \002secure founder\002 is set, only the real founder will be "
"able to drop the channel, change its founder and its successor, "
"and not those who have founder level access through "
"the access/qop command."
));
return true;
}
};
@@ -803,9 +825,11 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Enables or disables the \002secure ops\002 option for a channel.\n"
"When \002secure ops\002 is set, users who are not on the access list\n"
"will not be allowed channel operator status."));
source.Reply(_(
"Enables or disables the \002secure ops\002 option for a channel. "
"When \002secure ops\002 is set, users who are not on the access list "
"will not be allowed channel operator status."
));
return true;
}
};
@@ -857,8 +881,8 @@ public:
{
ci->Extend<bool>("SIGNKICK_LEVEL");
ci->Shrink<bool>("SIGNKICK");
source.Reply(_("Signed kick option for %s is now \002on\002, but depends of the\n"
"level of the user that is using the command."), ci->name.c_str());
source.Reply(_("Signed kick option for %s is now \002on\002, but depends of the level of the user that is using the command."),
ci->name.c_str());
Log(source.AccessFor(ci).HasPriv("SET") ? LOG_COMMAND : LOG_OVERRIDE, source, this, ci) << "to enable sign kick level";
}
else if (params[1].equals_ci("OFF"))
@@ -876,14 +900,16 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Enables or disables signed kicks for a\n"
"channel. When \002SIGNKICK\002 is set, kicks issued with\n"
"the \002KICK\002 command will have the nick that used the\n"
"command in their reason.\n"
" \n"
"If you use \002LEVEL\002, those who have a level that is superior\n"
"or equal to the SIGNKICK level on the channel won't have their\n"
"kicks signed."));
source.Reply(_(
"Enables or disables signed kicks for a "
"channel. When \002SIGNKICK\002 is set, kicks issued with "
"the \002KICK\002 command will have the nick that used the "
"command in their reason."
"\n\n"
"If you use \002LEVEL\002, those who have a level that is superior "
"or equal to the SIGNKICK level on the channel won't have their "
"kicks signed."
));
return true;
}
};
@@ -962,22 +988,28 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Changes the successor of a channel. If the founder's\n"
"nickname expires or is dropped while the channel is still\n"
"registered, the successor will become the new founder of the\n"
"channel. The successor's nickname must be a registered one.\n"
"If there's no successor set, then the first nickname on the\n"
"access list (with the highest access, if applicable) will\n"
"become the new founder, but if the access list is empty, the\n"
"channel will be dropped."));
source.Reply(_(
"Changes the successor of a channel. If the founder's "
"nickname expires or is dropped while the channel is still "
"registered, the successor will become the new founder of the "
"channel. The successor's nickname must be a registered one. "
"If there's no successor set, then the first nickname on the "
"access list (with the highest access, if applicable) will "
"become the new founder, but if the access list is empty, the "
"channel will be dropped."
));
unsigned max_reg = Config->GetModule("chanserv").Get<unsigned>("maxregistered");
if (max_reg)
{
source.Reply(" ");
source.Reply(_("Note, however, if the successor already has too many\n"
"channels registered (%d), they will not be able to\n"
"become the new founder and it will be as if the\n"
"channel had no successor set."), max_reg);
source.Reply(_(
"Note, however, if the successor already has too many "
"channels registered (%u), they will not be able to "
"become the new founder and it will be as if the "
"channel had no successor set."
),
max_reg);
}
return true;
}
@@ -1036,8 +1068,10 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Sets whether the given channel will expire. Setting this\n"
"to ON prevents the channel from expiring."));
source.Reply(_(
"Sets whether the given channel will expire. Setting this "
"to ON prevents the channel from expiring."
));
return true;
}
};
+7 -5
View File
@@ -102,11 +102,13 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("This command tells you what a users access is on a channel\n"
"and what access entries, if any, they match. Additionally it\n"
"will tell you of any auto kick entries they match. Usage of\n"
"this command is limited to users who have the ability to modify\n"
"access entries on the channel."));
source.Reply(_(
"This command tells you what a users access is on a channel "
"and what access entries, if any, they match. Additionally it "
"will tell you of any auto kick entries they match. Usage of "
"this command is limited to users who have the ability to modify "
"access entries on the channel."
));
return true;
}
};
+14 -10
View File
@@ -143,14 +143,16 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Disallows anyone from using the given channel.\n"
"May be cancelled by using the \002UNSUSPEND\002\n"
"command to preserve all previous channel data/settings.\n"
"If an expiry is given the channel will be unsuspended after\n"
"that period of time, else the default expiry from the\n"
"configuration is used.\n"
" \n"
"Reason may be required on certain networks."));
source.Reply(_(
"Disallows anyone from using the given channel. "
"May be cancelled by using the \002UNSUSPEND\002 "
"command to preserve all previous channel data/settings. "
"If an expiry is given the channel will be unsuspended after "
"that period of time, else the default expiry from the "
"configuration is used."
"\n\n"
"Reason may be required on certain networks."
));
return true;
}
};
@@ -201,8 +203,10 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Releases a suspended channel. All data and settings\n"
"are preserved from before the suspension."));
source.Reply(_(
"Releases a suspended channel. All data and settings "
"are preserved from before the suspension."
));
return true;
}
};
+4 -2
View File
@@ -47,8 +47,10 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Syncs all modes set on users on the channel with the modes\n"
"they should have based on their access."));
source.Reply(_(
"Syncs all modes set on users on the channel with the modes "
"they should have based on their access."
));
return true;
}
};
+19 -13
View File
@@ -68,11 +68,15 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Enables or disables the \002topic retention\002 option for a\n"
"channel. When \002%s\002 is set, the topic for the\n"
"channel will be remembered by %s even after the\n"
"last user leaves the channel, and will be restored the\n"
"next time the channel is created."), source.command.c_str(), source.service->nick.c_str());
source.Reply(_(
"Enables or disables the \002topic retention\002 option for a "
"channel. When \002%s\002 is set, the topic for the "
"channel will be remembered by %s even after the "
"last user leaves the channel, and will be restored the "
"next time the channel is created."
),
source.command.c_str(),
source.service->nick.c_str());
return true;
}
};
@@ -192,14 +196,16 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Allows manipulating the topic of the specified channel.\n"
"The \002SET\002 command changes the topic of the channel to the given topic\n"
"or unsets the topic if no topic is given. The \002APPEND\002 command appends\n"
"the given topic to the existing topic.\n"
" \n"
"\002LOCK\002 and \002UNLOCK\002 may be used to enable and disable topic lock. When\n"
"topic lock is set, the channel topic will be unchangeable by users who do not have\n"
"the \002TOPIC\002 privilege."));
source.Reply(_(
"Allows manipulating the topic of the specified channel. "
"The \002SET\002 command changes the topic of the channel to the given topic "
"or unsets the topic if no topic is given. The \002APPEND\002 command appends "
"the given topic to the existing topic. "
"\n\n"
"\002LOCK\002 and \002UNLOCK\002 may be used to enable and disable topic lock. When "
"topic lock is set, the channel topic will be unchangeable by users who do not have "
"the \002TOPIC\002 privilege."
));
return true;
}
};
+10 -7
View File
@@ -120,13 +120,16 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Tells %s to remove all bans preventing you or the given\n"
"user from entering the given channel. If no channel is\n"
"given, all bans affecting you in channels you have access\n"
"in are removed.\n"
" \n"
"By default, limited to AOPs or those with level 5 access and above\n"
"on the channel."), source.service->nick.c_str());
source.Reply(_(
"Tells %s to remove all bans preventing you or the given "
"user from entering the given channel. If no channel is "
"given, all bans affecting you in channels you have access "
"in are removed."
"\n\n"
"By default, limited to AOPs or those with level 5 access and above "
"on the channel."
),
source.service->nick.c_str());
return true;
}
};
+10 -6
View File
@@ -123,9 +123,11 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Updates a selected nicks status modes on a channel. If \037nick\037 is\n"
"omitted then your status is updated. If \037channel\037 is omitted then\n"
"your channel status is updated on every channel you are in."));
source.Reply(_(
"Updates a selected nicks status modes on a channel. If \037nick\037 is "
"omitted then your status is updated. If \037channel\037 is omitted then "
"your channel status is updated on every channel you are in."
));
return true;
}
};
@@ -221,9 +223,11 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Removes a selected nicks status modes on a channel. If \037nick\037 is\n"
"omitted then your status is removed. If \037channel\037 is omitted then\n"
"your channel status is removed on every channel you are in."));
source.Reply(_(
"Removes a selected nicks status modes on a channel. If \037nick\037 is "
"omitted then your status is removed. If \037channel\037 is omitted then "
"your channel status is removed on every channel you are in."
));
return true;
}
};
+47 -28
View File
@@ -542,59 +542,78 @@ public:
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Maintains the \002%s list\002 for a channel. Users who match an access entry\n"
"on the %s list receive the following privileges:\n"
" "), cmd.c_str(), cmd.c_str());
source.Reply(_(
"Maintains the \002%s list\002 for a channel. Users who match an access entry "
"on the %s list receive the following privileges:"
),
cmd.c_str(),
cmd.c_str());
source.Reply(" ");
Anope::string buf;
for (const auto &permission : permissions[cmd])
{
buf += ", " + permission;
if (buf.length() > 75)
{
source.Reply(" %s\n", buf.substr(2).c_str());
source.Reply(" %s", buf.substr(2).c_str());
buf.clear();
}
}
if (!buf.empty())
{
source.Reply(" %s\n", buf.substr(2).c_str());
source.Reply(" %s", buf.substr(2).c_str());
buf.clear();
}
source.Reply(_(" \n"
"The \002%s ADD\002 command adds the given nickname to the\n"
"%s list.\n"
" \n"
"The \002%s DEL\002 command removes the given nick from the\n"
"%s list. If a list of entry numbers is given, those\n"
"entries are deleted. (See the example for LIST below.)\n"
" \n"
"The \002%s LIST\002 command displays the %s list. If\n"
"a wildcard mask is given, only those entries matching the\n"
"mask are displayed. If a list of entry numbers is given,\n"
source.Reply(" ");
source.Reply(_(
"The \002%s\032ADD\002 command adds the given nickname to the "
"%s list."
"\n\n"
"The \002%s\032DEL\002 command removes the given nick from the "
"%s list. If a list of entry numbers is given, those "
"entries are deleted. (See the example for LIST below.)"
"\n\n"
"The \002%s\032LIST\002 command displays the %s list. If "
"a wildcard mask is given, only those entries matching the "
"mask are displayed. If a list of entry numbers is given, "
"only those entries are shown; for example:\n"
" \002%s #channel LIST 2-5,7-9\002\n"
" \002%s\032#channel\032LIST\0322-5,7-9\002\n"
" Lists %s entries numbered 2 through 5 and\n"
" 7 through 9.\n"
" \n"
"The \002%s CLEAR\002 command clears all entries of the\n"
"%s list."), cmd.c_str(), cmd.c_str(), cmd.c_str(), cmd.c_str(),
cmd.c_str(), cmd.c_str(), cmd.c_str(), cmd.c_str(), cmd.c_str(), cmd.c_str());
" 7 through 9."
"\n\n"
"The \002%s\032CLEAR\002 command clears all entries of the "
"%s list."
),
cmd.c_str(),
cmd.c_str(),
cmd.c_str(),
cmd.c_str(),
cmd.c_str(),
cmd.c_str(),
cmd.c_str(),
cmd.c_str(),
cmd.c_str(),
cmd.c_str());
BotInfo *access_bi, *flags_bi;
Anope::string access_cmd, flags_cmd;
Command::FindCommandFromService("chanserv/access", access_bi, access_cmd);
Command::FindCommandFromService("chanserv/flags", flags_bi, flags_cmd);
if (!access_cmd.empty() || !flags_cmd.empty())
{
source.Reply(_("Alternative methods of modifying channel access lists are\n"
"available."));
source.Reply(_("Alternative methods of modifying channel access lists are available."));
if (!access_cmd.empty())
source.Reply(_("See \002%s\002 for more information\n"
"about the access list."), access_bi->GetQueryCommand("generic/help", access_cmd).c_str());
{
source.Reply(_("See \002%s\002 for more information about the access list."),
access_bi->GetQueryCommand("generic/help", access_cmd).c_str());
}
if (!flags_cmd.empty())
source.Reply(_("See \002%s\002 for more information\n"
"about the flags system."), flags_bi->GetQueryCommand("generic/help", flags_cmd).c_str());
{
source.Reply(_("See \002%s\002 for more information about the flags system."),
flags_bi->GetQueryCommand("generic/help", flags_cmd).c_str());
}
}
return true;
}
+12 -10
View File
@@ -67,16 +67,18 @@ public:
bool OnHelp(CommandSource &source, const Anope::string &) override
{
this->SendSyntax(source);
source.Reply(_(" \n"
"Enables or disables \002fantasy\002 mode on a channel.\n"
"When it is enabled, users will be able to use\n"
"fantasy commands on a channel when prefixed\n"
"with one of the following fantasy characters: \002%s\002\n"
" \n"
"Note that users wanting to use fantasy commands\n"
"MUST have enough access for both the FANTASY\n"
"privilege and the command they are executing."),
Config->GetModule(this->owner).Get<const Anope::string>("fantasycharacter", "!").c_str());
source.Reply(" ");
source.Reply(_(
"Enables or disables \002fantasy\002 mode on a channel. "
"When it is enabled, users will be able to use "
"fantasy commands on a channel when prefixed "
"with one of the following fantasy characters: \002%s\002"
"\n\n"
"Note that users wanting to use fantasy commands "
"MUST have enough access for both the FANTASY "
"privilege and the command they are executing."
),
Config->GetModule(this->owner).Get<const Anope::string>("fantasycharacter", "!").c_str());
return true;
}
};
+7 -6
View File
@@ -77,12 +77,13 @@ public:
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_(
"Allows sending messages to all users on the network. The message will be sent\n"
"from \002%s\002.\n"
"\n"
"You can either send a message by specifying it as a parameter or provide no\n"
"parameters to send a previously queued message.\n"
), GetSender(source)->nick.c_str());
"Allows sending messages to all users on the network. The message will be sent "
"from \002%s\002."
"\n\n"
"You can either send a message by specifying it as a parameter or provide no "
"parameters to send a previously queued message."
),
GetSender(source)->nick.c_str());
return true;
}
};
+10 -10
View File
@@ -167,16 +167,16 @@ public:
this->SendSyntax(source);
source.Reply("");
source.Reply(_(
"Allows queueing messages to send to users on the network.\n"
"\n"
"The \002QUEUE ADD\002 command adds the given message to the message queue."
"\n"
"The \002QUEUE CLEAR\002 command clears the message queue."
"\n"
"The \002QUEUE DEL\002 command removes the specified message from the message queue. The\n"
"message number can be obtained from the output of the \002QUEUE LIST\002 command."
"\n"
"The \002QUEUE LIST\002 command lists all messages that are currently in the message queue."
"Allows queueing messages to send to users on the network."
"\n\n"
"The \002QUEUE\032ADD\002 command adds the given message to the message queue."
"\n\n"
"The \002QUEUE\032CLEAR\002 command clears the message queue."
"\n\n"
"The \002QUEUE\032DEL\002 command removes the specified message from the message queue. The "
"message number can be obtained from the output of the \002QUEUE\032LIST\002 command."
"\n\n"
"The \002QUEUE\032LIST\002 command lists all messages that are currently in the message queue."
));
return true;
}
+7 -6
View File
@@ -84,12 +84,13 @@ public:
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_(
"Allows sending messages to all users on a server. The message will be sent\n"
"from \002%s\002.\n"
"\n"
"You can either send a message by specifying it as a parameter or provide no\n"
"parameters to send a previously queued message.\n"
), GetSender(source)->nick.c_str());
"Allows sending messages to all users on a server. The message will be sent "
"from \002%s\002."
"\n\n"
"You can either send a message by specifying it as a parameter or provide no "
"parameters to send a previously queued message."
),
GetSender(source)->nick.c_str());
return true;
}
};
+20 -14
View File
@@ -67,12 +67,14 @@ public:
bool OnHelp(CommandSource &source, const Anope::string &) override
{
this->SendSyntax(source);
source.Reply(_(" \n"
"Enables or disables \002greet\002 mode on a channel.\n"
"When it is enabled, the bot will display greet\n"
"messages of users joining the channel, provided\n"
"they have enough access to the channel."));
return true;
source.Reply(" ");
source.Reply(_(
"Enables or disables \002greet\002 mode on a channel. "
"When it is enabled, the bot will display greet "
"messages of users joining the channel, provided "
"they have enough access to the channel."
));
return true;
}
};
@@ -130,10 +132,12 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Makes the given message the greet of your nickname, that\n"
"will be displayed when joining a channel that has GREET\n"
"option enabled, provided that you have the necessary\n"
"access on it."));
source.Reply(_(
"Makes the given message the greet of your nickname, that "
"will be displayed when joining a channel that has GREET "
"option enabled, provided that you have the necessary "
"access on it."
));
return true;
}
};
@@ -157,10 +161,12 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Makes the given message the greet of the nickname, that\n"
"will be displayed when joining a channel that has GREET\n"
"option enabled, provided that the user has the necessary\n"
"access on it."));
source.Reply(_(
"Makes the given message the greet of the nickname, that "
"will be displayed when joining a channel that has GREET "
"option enabled, provided that the user has the necessary "
"access on it."
));
return true;
}
};
+1 -1
View File
@@ -117,7 +117,7 @@ public:
if (!groups.empty())
{
source.Reply(" ");
source.Reply(_("Use the \002%s ALL\002 command to list all commands and their descriptions."), source_command.c_str());
source.Reply(_("Use the \002%s\032ALL\002 command to list all commands and their descriptions."), source_command.c_str());
}
}
else
+2 -4
View File
@@ -46,8 +46,7 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Deletes the vhost assigned to the given nick from the\n"
"database."));
source.Reply(_("Deletes the vhost assigned to the given nick from the database."));
return true;
}
};
@@ -92,8 +91,7 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Deletes the vhost for all nicks in the same group as\n"
"that of the given nick."));
source.Reply(_("Deletes the vhost for all nicks in the same group as that of the given nick."));
return true;
}
};
+5 -3
View File
@@ -67,9 +67,11 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("This command allows users to set the vhost of their\n"
"CURRENT nick to be the vhost for all nicks in the same\n"
"group."));
source.Reply(_(
"This command allows users to set the vhost of their "
"CURRENT nick to be the vhost for all nicks in the same "
"group."
));
return true;
}
};
+9 -7
View File
@@ -123,13 +123,15 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("This command lists registered vhosts to the operator.\n"
"If a \037key\037 is specified, only entries whose nick or vhost match\n"
"the pattern given in \037key\037 are displayed e.g. Rob* for all\n"
"entries beginning with \"Rob\"\n"
"If a \037#X-Y\037 style is used, only entries between the range of \002X\002\n"
"and \002Y\002 will be displayed, e.g. \002#1-3\002 will display the first 3\n"
"nick/vhost entries."));
source.Reply(_(
"This command lists registered vhosts to the operator. "
"If a \037key\037 is specified, only entries whose nick or vhost match "
"the pattern given in \037key\037 are displayed e.g. Rob* for all "
"entries beginning with \"Rob\". "
"If a \037#X-Y\037 style is used, only entries between the range of \002X\002 "
"and \002Y\002 will be displayed, e.g. \002#1-3\002 will display the first 3 "
"nick/vhost entries."
));
return true;
}
};
+5 -3
View File
@@ -47,9 +47,11 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Deactivates the vhost currently assigned to the nick in use.\n"
"When you use this command any user who performs a /whois\n"
"on you will see your real host/IP address."));
source.Reply(_(
"Deactivates the vhost currently assigned to the nick in use. "
"When you use this command any user who performs a /whois "
"on you will see your real host/IP address."
));
return true;
}
};
+5 -3
View File
@@ -50,9 +50,11 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Activates the vhost currently assigned to the nick in use.\n"
"When you use this command any user who performs a /whois\n"
"on you will see the vhost instead of your real host/IP address."));
source.Reply(_(
"Activates the vhost currently assigned to the nick in use. "
"When you use this command any user who performs a /whois "
"on you will see the vhost instead of your real host/IP address."
));
return true;
}
};
+5 -3
View File
@@ -189,9 +189,11 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Request the given vhost to be activated for your nick by the\n"
"network administrators. Please be patient while your request\n"
"is being considered."));
source.Reply(_(
"Request the given vhost to be activated for your nick by the "
"network administrators. Please be patient while your request "
"is being considered."
));
return true;
}
};
+15 -10
View File
@@ -94,10 +94,12 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Sets the vhost for the given nick to that of the given\n"
"hostmask. If your IRCD supports vidents, then using\n"
"SET <nick> <ident>@<hostmask> set idents for users as\n"
"well as vhosts."));
source.Reply(_(
"Sets the vhost for the given nick to that of the given "
"hostmask. If your IRCD supports vidents, then using "
"SET <nick> <ident>@<hostmask> set idents for users as "
"well as vhosts."
));
return true;
}
};
@@ -198,12 +200,15 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Sets the vhost for all nicks in the same group as that\n"
"of the given nick. If your IRCD supports vidents, then\n"
"using SETALL <nick> <ident>@<hostmask> will set idents\n"
"for users as well as vhosts.\n"
"* NOTE, this will not update the vhost for any nicks\n"
"added to the group after this command was used."));
source.Reply(_(
"Sets the vhost for all nicks in the same group as that "
"of the given nick. If your IRCD supports vidents, then "
"using SETALL <nick> <ident>@<hostmask> will set idents "
"for users as well as vhosts."
"\n\n"
"* NOTE, this will not update the vhost for any nicks "
"added to the group after this command was used."
));
return true;
}
};
+14 -9
View File
@@ -214,12 +214,17 @@ public:
{
if (!params.empty() || source.c || source.service != *MemoServ)
return EVENT_CONTINUE;
source.Reply(_("\002%s\002 is a utility allowing IRC users to send short\n"
"messages to other IRC users, whether they are online at\n"
"the time or not, or to channels(*). Both the sender's\n"
"nickname and the target nickname or channel must be\n"
"registered in order to send a memo.\n"
"%s's commands include:"), MemoServ->nick.c_str(), MemoServ->nick.c_str());
source.Reply(_(
"\002%s\002 is a utility allowing IRC users to send short "
"messages to other IRC users, whether they are online at "
"the time or not, or to channels(*). Both the sender's "
"nickname and the target nickname or channel must be "
"registered in order to send a memo."
"\n\n"
"%s's commands include:"
),
MemoServ->nick.c_str(),
MemoServ->nick.c_str());
return EVENT_CONTINUE;
}
@@ -227,9 +232,9 @@ public:
{
if (!params.empty() || source.c || source.service != *MemoServ)
return;
source.Reply(_(" \n"
"Type \002%s \037command\037\002 for help on any of the\n"
"above commands."),
source.Reply(" ");
source.Reply(_("Type \002%s\032\037command\037\002 for help on any of the above commands."),
MemoServ->GetQueryCommand("generic/help").c_str());
}
};
+4 -2
View File
@@ -82,8 +82,10 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Cancels the last memo you sent to the given nick or channel,\n"
"provided it has not been read at the time you use the command."));
source.Reply(_(
"Cancels the last memo you sent to the given nick or channel, "
"provided it has not been read at the time you use the command."
));
return true;
}
};
+4 -2
View File
@@ -67,8 +67,10 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Checks whether the _last_ memo you sent to \037nick\037 has been read\n"
"or not. Note that this only works with nicks, not with channels."));
source.Reply(_(
"Checks whether the _last_ memo you sent to \037nick\037 has been read "
"or not. Note that this only works with nicks, not with channels."
));
return true;
}
};
+17 -14
View File
@@ -128,20 +128,23 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Deletes the specified memo or memos. You can supply\n"
"multiple memo numbers or ranges of numbers instead of a\n"
"single number, as in the second example below.\n"
" \n"
"If \002LAST\002 is given, the last memo will be deleted.\n"
"If \002ALL\002 is given, deletes all of your memos.\n"
" \n"
"Examples:\n"
" \n"
" \002DEL 1\002\n"
" Deletes your first memo.\n"
" \n"
" \002DEL 2-5,7-9\002\n"
" Deletes memos numbered 2 through 5 and 7 through 9."));
source.Reply(_(
"Deletes the specified memo or memos. You can supply "
"multiple memo numbers or ranges of numbers instead of a "
"single number, as in the second example below."
"\n\n"
"If \002LAST\002 is given, the last memo will be deleted."
"\n\n"
"If \002ALL\002 is given, deletes all of your memos."
"\n\n"
"Examples:"
"\n\n"
" \002DEL\0321\002\n"
" Deletes your first memo."
"\n\n"
" \002DEL\0322-5,7-9\002\n"
" Deletes memos numbered 2 through 5 and 7 through 9."
));
return true;
}
};
+6 -4
View File
@@ -103,10 +103,12 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Allows you to ignore users by nick or host from memoing\n"
"you or a channel. If someone on the memo ignore list tries\n"
"to memo you or a channel, they will not be told that you have\n"
"them ignored."));
source.Reply(_(
"Allows you to ignore users by nick or host from memoing "
"you or a channel. If someone on the memo ignore list tries "
"to memo you or a channel, they will not be told that you have "
"them ignored."
));
return true;
}
};
+12 -10
View File
@@ -204,16 +204,18 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Without a parameter, displays information on the number of\n"
"memos you have, how many of them are unread, and how many\n"
"total memos you can receive.\n"
" \n"
"With a channel parameter, displays the same information for\n"
"the given channel.\n"
" \n"
"With a nickname parameter, displays the same information\n"
"for the given nickname. This is limited to \002Services\002\n"
"\002Operators\002."));
source.Reply(_(
"Without a parameter, displays information on the number of "
"memos you have, how many of them are unread, and how many "
"total memos you can receive."
"\n\n"
"With a channel parameter, displays the same information for "
"the given channel."
"\n\n"
"With a nickname parameter, displays the same information "
"for the given nickname. This is limited to \002Services "
"Operators\002."
));
return true;
}
+8 -6
View File
@@ -141,12 +141,14 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Lists any memos you currently have. With \002NEW\002, lists only\n"
"new (unread) memos. Unread memos are marked with a \"*\"\n"
"to the left of the memo number. You can also specify a list\n"
"of numbers, as in the example below:\n"
" \002LIST 2-5,7-9\002\n"
" Lists memos numbered 2 through 5 and 7 through 9."));
source.Reply(_(
"Lists any memos you currently have. With \002NEW\002, lists only "
"new (unread) memos. Unread memos are marked with a \"*\" "
"to the left of the memo number. You can also specify a list "
"of numbers, as in the example below:\n"
" \002LIST 2-5,7-9\002\n"
" Lists memos numbered 2 through 5 and 7 through 9."
));
return true;
}
};
+13 -11
View File
@@ -39,8 +39,8 @@ static void rsend_notify(CommandSource &source, MemoInfo *mi, Memo *m, const Ano
/* Notify recipient of the memo that a notification has
been sent to the sender */
source.Reply(_("A notification memo has been sent to %s informing them you have\n"
"read their memo."), nc->display.c_str());
source.Reply(_("A notification memo has been sent to %s informing them you have read their memo."),
nc->display.c_str());
}
/* Remove receipt flag from the original memo */
@@ -198,15 +198,17 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Sends you the text of the memos specified. If LAST is\n"
"given, sends you the memo you most recently received. If\n"
"NEW is given, sends you all of your new memos. If ALL is\n"
"given, sends you all of your memos. Otherwise, sends you\n"
"memo number \037num\037. You can also give a list of numbers,\n"
"as in this example:\n"
" \n"
" \002READ 2-5,7-9\002\n"
" Displays memos numbered 2 through 5 and 7 through 9."));
source.Reply(_(
"Sends you the text of the memos specified. If LAST is "
"given, sends you the memo you most recently received. If "
"NEW is given, sends you all of your new memos. If ALL is "
"given, sends you all of your memos. Otherwise, sends you "
"memo number \037num\037. You can also give a list of numbers, "
"as in this example:"
"\n\n"
" \002READ 2-5,7-9\002\n"
" Displays memos numbered 2 through 5 and 7 through 9."
));
return true;
}
};
+9 -7
View File
@@ -82,13 +82,15 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Sends the named \037nick\037 or \037channel\037 a memo containing\n"
"\037memo-text\037. When sending to a nickname, the recipient will\n"
"receive a notice that they have a new memo. The target\n"
"nickname/channel must be registered.\n"
"Once the memo is read by its recipient, an automatic notification\n"
"memo will be sent to the sender informing them that the memo\n"
"has been read."));
source.Reply(_(
"Sends the named \037nick\037 or \037channel\037 a memo containing "
"\037memo-text\037. When sending to a nickname, the recipient will "
"receive a notice that they have a new memo. The target "
"nickname/channel must be registered. "
"Once the memo is read by its recipient, an automatic notification "
"memo will be sent to the sender informing them that the memo "
"has been read."
));
return true;
}
};
+6 -4
View File
@@ -68,10 +68,12 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Sends the named \037nick\037 or \037channel\037 a memo containing\n"
"\037memo-text\037. When sending to a nickname, the recipient will\n"
"receive a notice that they have a new memo. The target\n"
"nickname/channel must be registered."));
source.Reply(_(
"Sends the named \037nick\037 or \037channel\037 a memo containing "
"\037memo-text\037. When sending to a nickname, the recipient will "
"receive a notice that they have a new memo. The target "
"nickname/channel must be registered."
));
return true;
}
};
+69 -49
View File
@@ -225,65 +225,85 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Sets various memo options. \037option\037 can be one of:\n"
" \n"
source.Reply(_(
"Sets various memo options. \037option\037 can be one of:"
"\n\n"
" NOTIFY Changes when you will be notified about\n"
" new memos (only for nicknames)\n"
" new memos (only for nicknames)"
"\n\n"
" LIMIT Sets the maximum number of memos you can\n"
" receive\n"
" \n"
"Type \002%s \037option\037\002 for more information\n"
"on a specific option."),
" receive"
"\n\n"
"Type \002%s\032\037option\037\002 for more information "
"on a specific option."
),
source.service->GetQueryCommand("generic/help", source.command).c_str());
}
else if (subcommand.equals_ci("NOTIFY"))
source.Reply(_("Syntax: \002NOTIFY {ON | LOGON | NEW | MAIL | NOMAIL | OFF}\002\n"
" \n"
"Changes when you will be notified about new memos:\n"
" \n"
" ON You will be notified of memos when you log on,\n"
" when you unset /AWAY, and when they are sent\n"
" to you.\n"
" LOGON You will only be notified of memos when you log\n"
" on or when you unset /AWAY.\n"
" NEW You will only be notified of memos when they\n"
" are sent to you.\n"
" MAIL You will be notified of memos by email as well as\n"
" any other settings you have.\n"
" NOMAIL You will not be notified of memos by email.\n"
" OFF You will not receive any notification of memos.\n"
" \n"
"\002ON\002 is essentially \002LOGON\002 and \002NEW\002 combined."));
{
source.Reply(_(
"Syntax: \002NOTIFY {ON | LOGON | NEW | MAIL | NOMAIL | OFF}\002"
"\n\n"
"Changes when you will be notified about new memos:"
"\n\n"
" ON You will be notified of memos when you log on,\n"
" when you unset /AWAY, and when they are sent\n"
" to you."
"\n\n"
" LOGON You will only be notified of memos when you log\n"
" on or when you unset /AWAY."
"\n\n"
" NEW You will only be notified of memos when they\n"
" are sent to you."
"\n\n"
" MAIL You will be notified of memos by email as well as\n"
" any other settings you have."
"\n\n"
" NOMAIL You will not be notified of memos by email."
"\n\n"
" OFF You will not receive any notification of memos."
"\n\n"
"\002ON\002 is essentially \002LOGON\002 and \002NEW\002 combined."
));
}
else if (subcommand.equals_ci("LIMIT"))
{
int max_memos = Config->GetModule("memoserv").Get<int>("maxmemos");
if (source.IsServicesOper())
source.Reply(_("Syntax: \002LIMIT [\037user\037 | \037channel\037] {\037limit\037 | NONE} [HARD]\002\n"
" \n"
"Sets the maximum number of memos a user or channel is\n"
"allowed to have. Setting the limit to 0 prevents the user\n"
"from receiving any memos; setting it to \002NONE\002 allows the\n"
"user to receive and keep as many memos as they want. If\n"
"you do not give a nickname or channel, your own limit is\n"
"set.\n"
" \n"
"Adding \002HARD\002 prevents the user from changing the limit. Not\n"
"adding \002HARD\002 has the opposite effect, allowing the user to\n"
"change the limit (even if a previous limit was set with\n"
"\002HARD\002).\n"
" \n"
"This use of the \002SET LIMIT\002 command is limited to \002Services\002\n"
"\002Operators\002. Other users may only enter a limit for themselves\n"
"or a channel on which they have such privileges, may not\n"
"remove their limit, may not set a limit above %d, and may\n"
"not set a hard limit."), max_memos);
{
source.Reply(_(
"Syntax: \002LIMIT [\037user\037 | \037channel\037] {\037limit\037 | NONE} [HARD]\002"
"\n\n"
"Sets the maximum number of memos a user or channel is "
"allowed to have. Setting the limit to 0 prevents the user "
"from receiving any memos; setting it to \002NONE\002 allows the "
"user to receive and keep as many memos as they want. If "
"you do not give a nickname or channel, your own limit is "
"set."
"\n\n"
"Adding \002HARD\002 prevents the user from changing the limit. Not "
"adding \002HARD\002 has the opposite effect, allowing the user to "
"change the limit (even if a previous limit was set with "
"\002HARD\002)."
"\n\n"
"This use of the \002SET\032LIMIT\002 command is limited to \002Services "
"Operators\002. Other users may only enter a limit for themselves "
"or a channel on which they have such privileges, may not "
"remove their limit, may not set a limit above %d, and may "
"not set a hard limit."
),
max_memos);
}
else
source.Reply(_("Syntax: \002LIMIT [\037channel\037] \037limit\037\002\n"
" \n"
"Sets the maximum number of memos you (or the given channel)\n"
"are allowed to have. If you set this to 0, no one will be\n"
"able to send any memos to you. However, you cannot set\n"
"this any higher than %d."), max_memos);
source.Reply(_(
"Syntax: \002LIMIT [\037channel\037] \037limit\037\002"
"\n\n"
"Sets the maximum number of memos you (or the given channel) "
"are allowed to have. If you set this to 0, no one will be "
"able to send any memos to you. However, you cannot set "
"this any higher than %d."
),
max_memos);
}
else
return false;
+51 -24
View File
@@ -390,10 +390,12 @@ public:
if (block.Get<bool>("forceemail", "yes") && u->Account()->email.empty())
{
u->SendMessage(NickServ, _("You must now supply an email for your nick.\n"
"This email will allow you to retrieve your password in\n"
"case you forget it."));
u->SendMessage(NickServ, _("Type \002%s \037email\037\002 in order to set your email."),
u->SendMessage(NickServ, _(
"You must now supply an email for your nick. "
"This email will allow you to retrieve your password in "
"case you forget it. "
"Type \002%s\032\037email\037\002 in order to set your email."
),
NickServ->GetQueryCommand("nickserv/set/email").c_str());
}
@@ -497,20 +499,34 @@ public:
{
if (!params.empty() || source.c || source.service != *NickServ)
return EVENT_CONTINUE;
if (!Config->GetModule("nickserv").Get<bool>("nonicknameownership"))
source.Reply(_("\002%s\002 allows you to register a nickname and\n"
"prevent others from using it. The following\n"
"commands allow for registration and maintenance of\n"
"nicknames; to use them, type \002%s \037command\037\002.\n"
"For more information on a specific command, type\n"
"\002%s \037command\037\002.\n"), NickServ->nick.c_str(), NickServ->GetQueryCommand().c_str(), NickServ->GetQueryCommand({}, source.command).c_str());
{
source.Reply(_(
"\002%s\002 allows you to register a nickname and "
"prevent others from using it. The following "
"commands allow for registration and maintenance of "
"nicknames; to use them, type \002%s\032\037command\037\002. "
"For more information on a specific command, type "
"\002%s\032\037command\037\002."
),
NickServ->nick.c_str(),
NickServ->GetQueryCommand().c_str(),
NickServ->GetQueryCommand({}, source.command).c_str());
}
else
source.Reply(_("\002%s\002 allows you to register an account.\n"
"The following commands allow for registration and maintenance of\n"
"accounts; to use them, type \002%s \037command\037\002.\n"
"For more information on a specific command, type\n"
"\002%s \037command\037\002.\n"),
NickServ->nick.c_str(), NickServ->GetQueryCommand().c_str(), NickServ->GetQueryCommand({}, source.command.c_str()).c_str());
{
source.Reply(_(
"\002%s\002 allows you to register an account. "
"The following commands allow for registration and maintenance of "
"accounts; to use them, type \002%s\032\037command\037\002. "
"For more information on a specific command, type "
"\002%s\032\037command\037\002."
),
NickServ->nick.c_str(),
NickServ->GetQueryCommand().c_str(),
NickServ->GetQueryCommand({}, source.command.c_str()).c_str());
}
return EVENT_CONTINUE;
}
@@ -518,17 +534,28 @@ public:
{
if (!params.empty() || source.c || source.service != *NickServ)
return;
if (source.IsServicesOper())
source.Reply(_(" \n"
"Services Operators can also drop any nickname without needing\n"
"to identify for the nick, and may view the access list for\n"
"any nickname."));
{
source.Reply(" ");
source.Reply(_(
"Services Operators can also drop any nickname without needing "
"to identify for the nick, and may view the access list for "
"any nickname."
));
}
time_t nickserv_expire = Config->GetModule(this).Get<time_t>("expire", "1y");
if (nickserv_expire >= 86400)
source.Reply(_(" \n"
"Accounts that are not used anymore are subject to\n"
"the automatic expiration, i.e. they will be deleted\n"
"after %lu days if not used."), (unsigned long)nickserv_expire / 86400);
{
source.Reply(" ");
source.Reply(_(
"Accounts that are not used anymore are subject to "
"the automatic expiration, i.e. they will be deleted "
"after %lu days if not used."
),
(unsigned long)nickserv_expire / 86400);
}
}
void OnNickCoreCreate(NickCore *nc) override
+6 -4
View File
@@ -304,10 +304,12 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("This command manages your auto join list. When you identify\n"
"you will automatically join the channels on your auto join list.\n"
"Services Operators may provide a nick to modify other users'\n"
"auto join lists."));
source.Reply(_(
"This command manages your auto join list. When you identify "
"you will automatically join the channels on your auto join list. "
"Services Operators may provide a nick to modify other users' "
"auto join lists."
));
return true;
}
};
+7 -5
View File
@@ -119,11 +119,13 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Lists all channels you have access on.\n"
" \n"
"Channels that have the \037NOEXPIRE\037 option set will be\n"
"prefixed by an exclamation mark. The nickname parameter is\n"
"limited to Services Operators"));
source.Reply(_(
"Lists all channels you have access on."
"\n\n"
"Channels that have the \037NOEXPIRE\037 option set will be "
"prefixed by an exclamation mark. The nickname parameter is "
"limited to Services Operators."
));
return true;
}
+20 -18
View File
@@ -354,24 +354,26 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Modifies or displays the certificate list for your nick.\n"
"If you connect to IRC and provide a client certificate with a\n"
"matching fingerprint in the cert list, you will be\n"
"automatically identified to services. Services Operators\n"
"may provide a nick to modify other users' certificate lists.\n"
" \n"));
source.Reply(_("Examples:\n"
" \n"
" \002CERT ADD\002\n"
" Adds your current fingerprint to the certificate list and\n"
" automatically identifies you when you connect to IRC\n"
" using this fingerprint.\n"
" \n"
" \002CERT DEL <fingerprint>\002\n"
" Removes the fingerprint <fingerprint> from your certificate list.\n"
" \n"
" \002CERT LIST\002\n"
" Displays the current certificate list."));
source.Reply(_(
"Modifies or displays the certificate list for your nick. "
"If you connect to IRC and provide a client certificate with a "
"matching fingerprint in the cert list, you will be "
"automatically identified to services. Services Operators "
"may provide a nick to modify other users' certificate lists."
"\n\n"
"Examples:"
"\n\n"
" \002CERT\032ADD\002\n"
" Adds your current fingerprint to the certificate list and\n"
" automatically identifies you when you connect to IRC\n"
" using this fingerprint."
"\n\n"
" \002CERT\032DEL\032<fingerprint>\002\n"
" Removes the fingerprint <fingerprint> from your certificate list."
"\n\n"
" \002CERT\032LIST\002\n"
" Displays the current certificate list."
));
return true;
}
};
+12 -6
View File
@@ -89,10 +89,12 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Drops the given nick from the database. Once your nickname\n"
"is dropped you may lose all of your access and channels that\n"
"you may own. Any other user will be able to gain control of\n"
"this nick."));
source.Reply(_(
"Drops the given nick from the database. Once your nickname "
"is dropped you may lose all of your access and channels that "
"you may own. Any other user will be able to gain control of "
"this nick."
));
source.Reply(" ");
if (!source.HasPriv("nickserv/drop"))
@@ -102,8 +104,12 @@ public:
source.Reply(" ");
if (source.HasPriv("nickserv/drop/override"))
source.Reply(_("Additionally, Services Operators with the \037nickserv/drop/override\037 permission can\n"
"replace \037code\037 with \002OVERRIDE\002 to drop without a confirmation code."));
{
source.Reply(_(
"Additionally, Services Operators with the \037nickserv/drop/override\037 permission can "
"replace \037code\037 with \002OVERRIDE\002 to drop without a confirmation code."
));
}
return true;
}
};
+57 -43
View File
@@ -207,32 +207,34 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("This command makes your nickname join the \037target\037 nickname's\n"
"group. \037password\037 is the password of the target nickname.\n"
" \n"
"Joining a group will allow you to share your configuration,\n"
"memos, and channel privileges with all the nicknames in the\n"
"group, and much more!\n"
" \n"
"A group exists as long as it is useful. This means that even\n"
"if a nick of the group is dropped, you won't lose the\n"
"shared things described above, as long as there is at\n"
"least one nick remaining in the group.\n"
" \n"
"You may be able to use this command even if you have not registered\n"
"your nick yet. If your nick is already registered, you'll\n"
"need to identify yourself before using this command.\n"
" \n"
"It is recommended to use this command with a non-registered\n"
"nick because it will be registered automatically when\n"
"using this command. You may use it with a registered nick (to\n"
"change your group) only if your network administrators allowed\n"
"it.\n"
" \n"
"You can only be in one group at a time. Group merging is\n"
"not possible.\n"
" \n"
"\037Note\037: all the nicknames of a group have the same password."));
source.Reply(_(
"This command makes your nickname join the \037target\037 nickname's "
"group. \037password\037 is the password of the target nickname. "
"\n\n"
"Joining a group will allow you to share your configuration, "
"memos, and channel privileges with all the nicknames in the "
"group, and much more!"
"\n\n"
"A group exists as long as it is useful. This means that even "
"if a nick of the group is dropped, you won't lose the "
"shared things described above, as long as there is at "
"least one nick remaining in the group."
"\n\n"
"You may be able to use this command even if you have not registered "
"your nick yet. If your nick is already registered, you'll "
"need to identify yourself before using this command. "
"\n\n"
"It is recommended to use this command with a non-registered "
"nick because it will be registered automatically when "
"using this command. You may use it with a registered nick (to "
"change your group) only if your network administrators allowed "
"it."
"\n\n"
"You can only be in one group at a time. Group merging is "
"not possible. "
"\n\n"
"\037Note\037: all the nicknames of a group have the same password."
));
return true;
}
};
@@ -292,11 +294,13 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("This command ungroups your nick, or if given, the specified nick,\n"
"from the group it is in. The ungrouped nick keeps its registration\n"
"time, password, email, greet, language, and url. Everything else\n"
"is reset. You may not ungroup yourself if there is only one nick in\n"
"your group."));
source.Reply(_(
"This command ungroups your nick, or if given, the specified nick, "
"from the group it is in. The ungrouped nick keeps its registration "
"time, password, email, greet, language, and url. Everything else "
"is reset. You may not ungroup yourself if there is only one nick in "
"your group."
));
return true;
}
};
@@ -369,19 +373,29 @@ public:
bool OnHelp(CommandSource &source, const Anope::string &subcommand) override
{
if (source.IsServicesOper())
source.Reply(_("Syntax: \002%s [\037nickname\037]\002\n"
" \n"
"Without a parameter, lists all nicknames that are in\n"
"your group.\n"
" \n"
"With a parameter, lists all nicknames that are in the\n"
"group of the given nick.\n"
"Specifying a nick is limited to \002Services Operators\002."),
source.command.c_str());
{
source.Reply(_(
"Syntax: \002%s [\037nickname\037]\002"
"\n\n"
"Without a parameter, lists all nicknames that are in "
"your group."
"\n\n"
"With a parameter, lists all nicknames that are in the "
"group of the given nick."
"\n\n"
"Specifying a nick is limited to \002Services Operators\002."
),
source.command.c_str());
}
else
source.Reply(_("Syntax: \002%s\002\n"
" \n"
"Lists all nicks in your group."), source.command.c_str());
{
source.Reply(_(
"Syntax: \002%s\002"
"\n\n"
"Lists all nicks in your group."
),
source.command.c_str());
}
return true;
}
+8 -5
View File
@@ -111,11 +111,14 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Tells %s that you are really the owner of this\n"
"nick. Many commands require you to authenticate yourself\n"
"with this command before you use them. The password\n"
"should be the same one you sent with the \002REGISTER\002\n"
"command."), source.service->nick.c_str());
source.Reply(_(
"Tells %s that you are really the owner of this "
"nick. Many commands require you to authenticate yourself "
"with this command before you use them. The password "
"should be the same one you sent with the \002REGISTER\002 "
"command."
),
source.service->nick.c_str());
return true;
}
};
+27 -20
View File
@@ -148,12 +148,13 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Displays information about the given nickname, such as\n"
"the nick's owner, last seen address and time, and nick\n"
"options. If no nick is given, and you are identified,\n"
"your account name is used, else your current nickname is\n"
"used."));
source.Reply(_(
"Displays information about the given nickname, such as "
"the nick's owner, last seen address and time, and nick "
"options. If no nick is given, and you are identified, "
"your account name is used, else your current nickname is "
"used."
));
return true;
}
};
@@ -247,13 +248,16 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Allows you to prevent certain pieces of information from\n"
"being displayed when someone does a %s \002INFO\002 on your\n"
"nick. You can hide your email address (\002EMAIL\002), last seen\n"
"user@host mask (\002USERMASK\002), your services access status\n"
"(\002STATUS\002) and last quit message (\002QUIT\002).\n"
"The second parameter specifies whether the information should\n"
"be displayed (\002OFF\002) or hidden (\002ON\002)."), source.service->nick.c_str());
source.Reply(_(
"Allows you to prevent certain pieces of information from "
"being displayed when someone does a %s\032\002INFO\002 on your "
"nick. You can hide your email address\032(\002EMAIL\002), last seen "
"user@host mask (\002USERMASK\002), your services access status "
"(\002STATUS\002) and last quit message (\002QUIT\002). "
"The second parameter specifies whether the information should "
"be displayed (\002OFF\002) or hidden (\002ON\002)."
),
source.service->nick.c_str());
return true;
}
};
@@ -277,13 +281,16 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Allows you to prevent certain pieces of information from\n"
"being displayed when someone does a %s \002INFO\002 on the\n"
"nick. You can hide the email address (\002EMAIL\002), last seen\n"
"user@host mask (\002USERMASK\002), the services access status\n"
"(\002STATUS\002) and last quit message (\002QUIT\002).\n"
"The second parameter specifies whether the information should\n"
"be displayed (\002OFF\002) or hidden (\002ON\002)."), source.service->nick.c_str());
source.Reply(_(
"Allows you to prevent certain pieces of information from "
"being displayed when someone does a %s\032\002INFO\002 on the "
"nick. You can hide the email address (\002EMAIL\002), last seen "
"user@host mask (\002USERMASK\002), the services access status "
"(\002STATUS\002) and last quit message (\002QUIT\002). "
"The second parameter specifies whether the information should "
"be displayed (\002OFF\002) or hidden (\002ON\002)."
),
source.service->nick.c_str());
return true;
}
};
+53 -42
View File
@@ -135,41 +135,46 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Lists all registered nicknames which match the given\n"
"pattern, in \037nick!user@host\037 format. Nicks with the \002PRIVATE\002\n"
"option set will only be displayed to Services Operators with the\n"
"proper access. Nicks with the \002NOEXPIRE\002 option set will have\n"
"a \002!\002 prefixed to the nickname for Services Operators to see.\n"
" \n"
"Note that a preceding '#' specifies a range.\n"
" \n"
"If the SUSPENDED, UNCONFIRMED or NOEXPIRE options are given, only\n"
"nicks which, respectively, are SUSPENDED, UNCONFIRMED or have the\n"
"NOEXPIRE flag set will be displayed. If multiple options are\n"
"given, all nicks matching at least one option will be displayed.\n"
"Note that these options are limited to \037Services Operators\037.\n"
" \n"
"Examples:\n"
" \n"
" \002LIST *!joeuser@foo.com\002\n"
" Lists all registered nicks owned by joeuser@foo.com.\n"
" \n"
" \002LIST *Bot*!*@*\002\n"
" Lists all registered nicks with \002Bot\002 in their\n"
" names (case insensitive).\n"
" \n"
" \002LIST * NOEXPIRE\002\n"
" Lists all registered nicks which have been set to not expire.\n"
" \n"
" \002LIST #51-100\002\n"
" Lists all registered nicks within the given range (51-100)."));
source.Reply(_(
"Lists all registered nicknames which match the given "
"pattern, in \037nick!user@host\037 format. Nicks with the \002PRIVATE\002 "
"option set will only be displayed to Services Operators with the "
"proper access. Nicks with the \002NOEXPIRE\002 option set will have "
"a \002!\002 prefixed to the nickname for Services Operators to see."
"\n\n"
"Note that a preceding '#' specifies a range."
"\n\n"
"If the SUSPENDED, UNCONFIRMED or NOEXPIRE options are given, only "
"nicks which, respectively, are SUSPENDED, UNCONFIRMED or have the "
"NOEXPIRE flag set will be displayed. If multiple options are "
"given, all nicks matching at least one option will be displayed. "
"Note that these options are limited to \037Services Operators\037."
"\n\n"
"Examples:"
"\n\n"
" \002LIST *!joeuser@foo.com\002\n"
" Lists all registered nicks owned by joeuser@foo.com."
"\n\n"
" \002LIST *Bot*!*@*\002\n"
" Lists all registered nicks with \002Bot\002 in their\n"
" names (case insensitive)."
"\n\n"
" \002LIST * NOEXPIRE\002\n"
" Lists all registered nicks which have been set to not expire."
"\n\n"
" \002LIST #51-100\002\n"
" Lists all registered nicks within the given range (51-100)."
));
const Anope::string &regexengine = Config->GetBlock("options").Get<const Anope::string>("regexengine");
if (!regexengine.empty())
{
source.Reply(" ");
source.Reply(_("Regex matches are also supported using the %s engine.\n"
"Enclose your pattern in // if this is desired."), regexengine.c_str());
source.Reply(_(
"Regex matches are also supported using the %s engine. "
"Enclose your pattern in // if this is desired."
),
regexengine.c_str());
}
return true;
@@ -233,12 +238,15 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Turns %s's privacy option on or off for your nick.\n"
"With \002PRIVATE\002 set, your nickname will not appear in\n"
"nickname lists generated with %s's \002LIST\002 command.\n"
"(However, anyone who knows your nickname can still get\n"
"information on it using the \002INFO\002 command.)"),
source.service->nick.c_str(), source.service->nick.c_str());
source.Reply(_(
"Turns %s's privacy option on or off for your nick. "
"With \002PRIVATE\002 set, your nickname will not appear in "
"nickname lists generated with %s's \002LIST\002 command. "
"(However, anyone who knows your nickname can still get "
"information on it using the \002INFO\002 command.)"
),
source.service->nick.c_str(),
source.service->nick.c_str());
return true;
}
};
@@ -262,12 +270,15 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Turns %s's privacy option on or off for the nick.\n"
"With \002PRIVATE\002 set, the nickname will not appear in\n"
"nickname lists generated with %s's \002LIST\002 command.\n"
"(However, anyone who knows the nickname can still get\n"
"information on it using the \002INFO\002 command.)"),
source.service->nick.c_str(), source.service->nick.c_str());
source.Reply(_(
"Turns %s's privacy option on or off for the nick. "
"With \002PRIVATE\002 set, the nickname will not appear in "
"nickname lists generated with %s's \002LIST\002 command. "
"(However, anyone who knows the nickname can still get "
"information on it using the \002INFO\002 command.)"
),
source.service->nick.c_str(),
source.service->nick.c_str());
return true;
}
};
+10 -8
View File
@@ -64,14 +64,16 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Without a parameter, reverses the effect of the \002IDENTIFY\002\n"
"command, i.e. make you not recognized as the real owner of the nick\n"
"anymore. Note, however, that you won't be asked to reidentify\n"
"yourself.\n"
" \n"
"With a parameter, does the same for the given nick. If you\n"
"specify \002REVALIDATE\002 as well, services will ask the given nick\n"
"to re-identify. This is limited to \002Services Operators\002."));
source.Reply(_(
"Without a parameter, reverses the effect of the \002IDENTIFY\002 "
"command, i.e. make you not recognized as the real owner of the nick "
"anymore. Note, however, that you won't be asked to reidentify "
"yourself."
"\n\n"
"With a parameter, does the same for the given nick. If you "
"specify \002REVALIDATE\002 as well, services will ask the given nick "
"to re-identify. This is limited to \002Services Operators\002."
));
return true;
}
+15 -11
View File
@@ -81,9 +81,12 @@ public:
}
}
u->SendMessage(source.service, _("This nickname has been recovered by %s. If you did not do\n"
"this then %s may have your password, and you should change it."),
source.GetNick().c_str(), source.GetNick().c_str());
u->SendMessage(source.service, _(
"This nickname has been recovered by %s. If you did not do "
"this then %s may have your password, and you should change it."
),
source.GetNick().c_str(),
source.GetNick().c_str());
Anope::string buf = source.command.upper() + " command used by " + source.GetNick();
u->Kill(*source.service, buf);
@@ -125,8 +128,7 @@ public:
}
else
{
source.Reply(_("The user with your nick has been removed. Use this command again\n"
"to release services's hold on your nick."));
source.Reply(_("The user with your nick has been removed. Use this command again to release services's hold on your nick."));
}
}
}
@@ -217,12 +219,14 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Recovers your nick from another user or from services.\n"
"If services are currently holding your nick, the hold\n"
"will be released. If another user is holding your nick\n"
"and is identified they will be killed (similar to the old\n"
"GHOST command). If they are not identified they will be\n"
"forced off of the nick."));
source.Reply(_(
"Recovers your nick from another user or from services. "
"If services are currently holding your nick, the hold "
"will be released. If another user is holding your nick "
"and is identified they will be killed (similar to the old "
"GHOST command). If they are not identified they will be "
"forced off of the nick."
));
return true;
}
};
+50 -36
View File
@@ -97,17 +97,24 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("This command is used by several commands as a way to confirm\n"
"changes made to your account.\n"
" \n"
"This is most commonly used to confirm your email address once\n"
"you register or change it.\n"
" \n"
"This is also used after the RESETPASS command has been used to\n"
"force identify you to your nick so you may change your password."));
source.Reply(_(
"This command is used by several commands as a way to confirm "
"changes made to your account."
"\n\n"
"This is most commonly used to confirm your email address once "
"you register or change it."
"\n\n"
"This is also used after the RESETPASS command has been used to "
"force identify you to your nick so you may change your password."
));
if (source.HasPriv("nickserv/confirm"))
source.Reply(_("Additionally, Services Operators with the \037nickserv/confirm\037 permission can\n"
"replace \037passcode\037 with a users nick to force validate them."));
{
source.Reply(_(
"Additionally, Services Operators with the \037nickserv/confirm\037 permission can "
"replace \037passcode\037 with a users nick to force validate them."
));
}
return true;
}
@@ -274,39 +281,46 @@ public:
unsigned int minpasslen = Config->GetModule("nickserv").Get<unsigned>("minpasslen", "10");
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Registers your nickname in the %s database. Once\n"
"your nick is registered, you can use the \002SET\002 and \002ACCESS\002\n"
"commands to configure your nick's settings as you like\n"
"them. Make sure you remember the password you use when\n"
"registering - you'll need it to make changes to your nick\n"
"later. (Note that \002case matters!\002 \037ANOPE\037, \037Anope\037, and\n"
"\037anope\037 are all different passwords!)\n"
" \n"
"Guidelines on choosing passwords:\n"
" \n"
"Passwords should not be easily guessable. For example,\n"
"using your real name as a password is a bad idea. Using\n"
"your nickname as a password is a much worse idea ;) and,\n"
"in fact, %s will not allow it. Also, short\n"
"passwords are vulnerable to trial-and-error searches, so\n"
"you should choose a password at least %u characters long.\n"
"Finally, the space character cannot be used in passwords."),
source.service->nick.c_str(), source.service->nick.c_str(),
minpasslen);
source.Reply(_(
"Registers your nickname in the %s database. Once "
"your nick is registered, you can use the \002SET\002 and \002ACCESS\002 "
"commands to configure your nick's settings as you like "
"them. Make sure you remember the password you use when "
"registering - you'll need it to make changes to your nick "
"later. (Note that \002case matters!\002 \037ANOPE\037, \037Anope\037, and "
"\037anope\037 are all different passwords!) "
"\n\n"
"Guidelines on choosing passwords:"
"\n\n"
"Passwords should not be easily guessable. For example, "
"using your real name as a password is a bad idea. Using "
"your nickname as a password is a much worse idea ;) and, "
"in fact, %s will not allow it. Also, short "
"passwords are vulnerable to trial-and-error searches, so "
"you should choose a password at least %u characters long. "
"Finally, the space character cannot be used in passwords."
),
source.service->nick.c_str(),
source.service->nick.c_str(),
minpasslen);
if (!Config->GetModule("nickserv").Get<bool>("forceemail", "yes"))
{
source.Reply(" ");
source.Reply(_("The \037email\037 parameter is optional and will set the email\n"
"for your nick immediately. You may also wish to \002SET HIDE\002 it\n"
"after registering if it isn't the default setting already."));
source.Reply(_(
"The \037email\037 parameter is optional and will set the email "
"for your nick immediately. You may also wish to \002SET\032HIDE\002 it "
"after registering if it isn't the default setting already."
));
}
source.Reply(" ");
source.Reply(_("This command also creates a new group for your nickname,\n"
"that will allow you to register other nicks later sharing\n"
"the same configuration, the same set of memos and the\n"
"same channel privileges."));
source.Reply(_(
"This command also creates a new group for your nickname, "
"that will allow you to register other nicks later sharing "
"the same configuration, the same set of memos and the "
"same channel privileges."
));
return true;
}
};
+5 -3
View File
@@ -50,9 +50,11 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Sends a passcode to the nickname with instructions on how to\n"
"reset their password. Email must be the email address associated\n"
"to the nickname."));
source.Reply(_(
"Sends a passcode to the nickname with instructions on how to "
"reset their password. Email must be the email address associated "
"to the nickname."
));
return true;
}
};
+39 -25
View File
@@ -57,8 +57,7 @@ public:
}
}
source.Reply(_("Type \002%s \037option\037\002 for more information\n"
"on a specific option."),
source.Reply(_("Type \002%s\032\037option\037\002 for more information on a specific option."),
source.service->GetQueryCommand("generic/help", this_name).c_str());
return true;
@@ -101,9 +100,11 @@ public:
}
}
source.Reply(_("Type \002%s \037option\037\002 for more information\n"
"on a specific option. The options will be set on the given\n"
"\037nickname\037."),
source.Reply(_(
"Type \002%s\032\037option\037\002 for more information "
"on a specific option. The options will be set on the given "
"\037nickname\037."
),
source.service->GetQueryCommand("generic/help", this_name).c_str());
return true;
}
@@ -164,8 +165,7 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Changes the password used to identify you as the nick's\n"
"owner."));
source.Reply(_("Changes the password used to identify you as the nick's owner."));
return true;
}
};
@@ -300,10 +300,13 @@ public:
BotInfo *bi = Config->GetClient("ChanServ");
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Sets whether you will be given your channel status modes automatically.\n"
"Set to \002ON\002 to allow %s to set status modes on you automatically\n"
"when entering channels. Note that depending on channel settings some modes\n"
"may not get set automatically."), bi ? bi->nick.c_str() : "ChanServ");
source.Reply(_(
"Sets whether you will be given your channel status modes automatically. "
"Set to \002ON\002 to allow %s to set status modes on you automatically "
"when entering channels. Note that depending on channel settings some modes "
"may not get set automatically."
),
bi ? bi->nick.c_str() : "ChanServ");
return true;
}
};
@@ -328,11 +331,14 @@ public:
BotInfo *bi = Config->GetClient("ChanServ");
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Sets whether the given nickname will be given its status modes\n"
"in channels automatically. Set to \002ON\002 to allow %s\n"
"to set status modes on the given nickname automatically when it\n"
"is entering channels. Note that depending on channel settings\n"
"some modes may not get set automatically."), bi ? bi->nick.c_str() : "ChanServ");
source.Reply(_(
"Sets whether the given nickname will be given its status modes "
"in channels automatically. Set to \002ON\002 to allow %s "
"to set status modes on the given nickname automatically when it "
"is entering channels. Note that depending on channel settings "
"some modes may not get set automatically."
),
bi ? bi->nick.c_str() : "ChanServ");
return true;
}
};
@@ -486,8 +492,10 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Changes the display used to refer to your nickname group in\n"
"services. The new display MUST be a nick of your group."));
source.Reply(_(
"Changes the display used to refer to your nickname group in "
"services. The new display MUST be a nick of your group."
));
return true;
}
};
@@ -511,8 +519,10 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Changes the display used to refer to the nickname group in\n"
"services. The new display MUST be a nick of the group."));
source.Reply(_(
"Changes the display used to refer to the nickname group in "
"services. The new display MUST be a nick of the group."
));
return true;
}
};
@@ -631,9 +641,11 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Associates the given email address with your nickname.\n"
"This address will be displayed whenever someone requests\n"
"information on the nickname with the \002INFO\002 command."));
source.Reply(_(
"Associates the given email address with your nickname. "
"This address will be displayed whenever someone requests "
"information on the nickname with the \002INFO\002 command."
));
return true;
}
};
@@ -709,8 +721,10 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Sets whether the given nickname will expire. Setting this\n"
"to \002ON\002 prevents the nickname from expiring."));
source.Reply(_(
"Sets whether the given nickname will expire. Setting this "
"to \002ON\002 prevents the nickname from expiring."
));
return true;
}
};
+10 -6
View File
@@ -68,9 +68,11 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Enables or disables keepmodes for your nick. If keep\n"
"modes is enabled, services will remember your usermodes\n"
"and attempt to re-set them the next time you authenticate."));
source.Reply(_(
"Enables or disables keepmodes for your nick. If keep "
"modes is enabled, services will remember your usermodes "
"and attempt to re-set them the next time you authenticate."
));
return true;
}
};
@@ -95,9 +97,11 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Enables or disables keepmodes for the given nick. If keep\n"
"modes is enabled, services will remember users' usermodes\n"
"and attempt to re-set them the next time they authenticate."));
source.Reply(_(
"Enables or disables keepmodes for the given nick. If keep "
"modes is enabled, services will remember users' usermodes "
"and attempt to re-set them the next time they authenticate."
));
return true;
}
};
+12 -8
View File
@@ -87,10 +87,12 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Changes the language services uses when sending messages to\n"
"you (for example, when responding to a command you send).\n"
"\037language\037 should be chosen from the following list of\n"
"supported languages:"));
source.Reply(_(
"Changes the language services uses when sending messages to "
"you (for example, when responding to a command you send). "
"\037language\037 should be chosen from the following list of "
"supported languages:"
));
for (const auto &[langcode, langname] : languages)
source.Reply(" %s (%s)", langcode.c_str(), langname.c_str());
@@ -119,10 +121,12 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Changes the language services uses when sending messages to\n"
"the given user (for example, when responding to a command they send).\n"
"\037language\037 should be chosen from the following list of\n"
"supported languages:"));
source.Reply(_(
"Changes the language services uses when sending messages to "
"the given user (for example, when responding to a command they send). "
"\037language\037 should be chosen from the following list of "
"supported languages:"
));
for (const auto &[langcode, langname] : languages)
source.Reply(" %s (%s)", langcode.c_str(), langname.c_str());
+11 -6
View File
@@ -74,9 +74,12 @@ public:
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Allows you to choose the way services are communicating with\n"
"you. With \002%s\002 set, services will use messages, else they'll\n"
"use notices."), cmd.upper().c_str());
source.Reply(_(
"Allows you to choose the way services are communicating with "
"you. With \002%s\002 set, services will use messages, else they'll "
"use notices."
),
cmd.upper().c_str());
return true;
}
};
@@ -95,9 +98,11 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Allows you to choose the way services are communicating with\n"
"the given user. With \002MSG\002 set, services will use messages,\n"
"else they'll use notices."));
source.Reply(_(
"Allows you to choose the way services are communicating with "
"the given user. With \002MSG\002 set, services will use messages, "
"else they'll use notices."
));
return true;
}
+14 -8
View File
@@ -99,10 +99,13 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Turns automatic protection for your account on or off. With\n"
"protection on if another user tries to use a nickname from\n"
"your group they will be given some time to change their nick\n"
"after which %s will forcibly change their nick."), source.service->nick.c_str());
source.Reply(_(
"Turns automatic protection for your account on or off. With "
"protection on if another user tries to use a nickname from "
"your group they will be given some time to change their nick "
"after which %s will forcibly change their nick."
),
source.service->nick.c_str());
return true;
}
};
@@ -127,10 +130,13 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Turns automatic protection for the nick on or off. With\n"
"protection on if a user tries to use a nickname from the\n"
"nick's group they will be given some time to change their\n"
"nick after which %s will forcibly change their nick."), source.service->nick.c_str());
source.Reply(_(
"Turns automatic protection for the nick on or off. With "
"protection on if a user tries to use a nickname from the "
"nick's group they will be given some time to change their "
"nick after which %s will forcibly change their nick."
),
source.service->nick.c_str());
return true;
}
};
+6 -4
View File
@@ -157,10 +157,12 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Suspends a registered nickname, which prevents it from being used\n"
"while keeping all the data for that nick. If an expiry is given\n"
"the nick will be unsuspended after that period of time, else the\n"
"default expiry from the configuration is used."));
source.Reply(_(
"Suspends a registered nickname, which prevents it from being used "
"while keeping all the data for that nick. If an expiry is given "
"the nick will be unsuspended after that period of time, else the "
"default expiry from the configuration is used."
));
return true;
}
};
+5 -3
View File
@@ -41,9 +41,11 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Updates your current status, i.e. it checks for new memos,\n"
"sets needed channel modes and updates your vhost and\n"
"your userflags (lastseentime, etc)."));
source.Reply(_(
"Updates your current status, i.e. it checks for new memos, "
"sets needed channel modes and updates your vhost and "
"your userflags (lastseentime, etc)."
));
return true;
}
};
+49 -41
View File
@@ -421,53 +421,61 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Allows Services Operators to manipulate the AKILL list. If\n"
"a user matching an AKILL mask attempts to connect, services\n"
"will issue a KILL for that user and, on supported server\n"
"types, will instruct all servers to add a ban for the mask\n"
"which the user matched.\n"
" \n"
"\002AKILL ADD\002 adds the given mask to the AKILL\n"
"list for the given reason, which \002must\002 be given.\n"
"Mask should be in the format of nick!user@host#real name,\n"
"though all that is required is user@host. If a real name is specified,\n"
"the reason must be prepended with a :.\n"
"\037expiry\037 is specified as an integer followed by one of \037d\037\n"
"(days), \037h\037 (hours), or \037m\037 (minutes). Combinations (such as\n"
"\0371h30m\037) are not permitted. If a unit specifier is not\n"
"included, the default is days (so \037+30\037 by itself means 30\n"
"days). To add an AKILL which does not expire, use \037+0\037. If the\n"
"usermask to be added starts with a \037+\037, an expiry time must\n"
"be given, even if it is the same as the default. The\n"
"current AKILL default expiry time can be found with the\n"
"\002STATS AKILL\002 command."));
source.Reply(_(
"Allows Services Operators to manipulate the AKILL list. If "
"a user matching an AKILL mask attempts to connect, services "
"will issue a KILL for that user and, on supported server "
"types, will instruct all servers to add a ban for the mask "
"which the user matched."
"\n\n"
"\002AKILL\032ADD\002 adds the given mask to the AKILL "
"list for the given reason, which \002must\002 be given. "
"Mask should be in the format of nick!user@host#real\032name, "
"though all that is required is user@host. If a real name is specified, "
"the reason must be prepended with a :. "
"\037expiry\037 is specified as an integer followed by one of \037d\037 "
"(days), \037h\037 (hours), or \037m\037 (minutes). Combinations (such as "
"\0371h30m\037) are not permitted. If a unit specifier is not "
"included, the default is days (so \037+30\037 by itself means 30 "
"days). To add an AKILL which does not expire, use \037+0\037. If the "
"usermask to be added starts with a \037+\037, an expiry time must "
"be given, even if it is the same as the default. The "
"current AKILL default expiry time can be found with the "
"\002STATS\032AKILL\002 command."
));
const Anope::string &regexengine = Config->GetBlock("options").Get<const Anope::string>("regexengine");
if (!regexengine.empty())
{
source.Reply(" ");
source.Reply(_("Regex matches are also supported using the %s engine.\n"
"Enclose your mask in // if this is desired."), regexengine.c_str());
source.Reply(_(
"Regex matches are also supported using the %s engine. "
"Enclose your mask in // if this is desired."
),
regexengine.c_str());
}
source.Reply(" ");
source.Reply(_(
" \n"
"The \002AKILL DEL\002 command removes the given mask from the\n"
"AKILL list if it is present. If a list of entry numbers is\n"
"given, those entries are deleted. (See the example for LIST\n"
"below.)\n"
" \n"
"The \002AKILL LIST\002 command displays the AKILL list.\n"
"If a wildcard mask is given, only those entries matching the\n"
"mask are displayed. If a list of entry numbers is given,\n"
"only those entries are shown; for example:\n"
" \002AKILL LIST 2-5,7-9\002\n"
" Lists AKILL entries numbered 2 through 5 and 7\n"
" through 9.\n"
" \n"
"\002AKILL VIEW\002 is a more verbose version of \002AKILL LIST\002, and\n"
"will show who added an AKILL, the date it was added, and when\n"
"it expires, as well as the user@host/ip mask and reason.\n"
" \n"
"\002AKILL CLEAR\002 clears all entries of the AKILL list."));
"The \002AKILL\032DEL\002 command removes the given mask from the "
"AKILL list if it is present. If a list of entry numbers is "
"given, those entries are deleted. (See the example for LIST "
"below.)"
"\n\n"
"The \002AKILL\032LIST\002 command displays the AKILL list. "
"If a wildcard mask is given, only those entries matching the "
"mask are displayed. If a list of entry numbers is given, "
"only those entries are shown; for example:\n"
" \002AKILL\032LIST\0322-5,7-9\002\n"
" Lists AKILL entries numbered 2 through 5 and 7\n"
" through 9."
"\n\n"
"\002AKILL\032VIEW\002 is a more verbose version of \002AKILL\032LIST\002, and "
"will show who added an AKILL, the date it was added, and when "
"it expires, as well as the user@host/ip mask and reason."
"\n\n"
"\002AKILL\032CLEAR\002 clears all entries of the AKILL list."
));
return true;
}
};
+5 -3
View File
@@ -96,9 +96,11 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Puts an AKILL for every nick on the specified channel. It\n"
"uses the entire real ident@host for every nick, and\n"
"then enforces the AKILL."));
source.Reply(_(
"Puts an AKILL for every nick on the specified channel. It "
"uses the entire real ident@host for every nick, and "
"then enforces the AKILL."
));
return true;
}
};
+9 -7
View File
@@ -122,13 +122,15 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Allows you to change and view configuration settings.\n"
"Settings changed by this command are temporary and will not be reflected\n"
"back into the configuration file, and will be lost if Anope is shut down,\n"
"restarted, or the configuration is reloaded.\n"
" \n"
"Example:\n"
" \002MODIFY nickserv regdelay 15m\002"));
source.Reply(_(
"Allows you to change and view configuration settings. "
"Settings changed by this command are temporary and will not be reflected "
"back into the configuration file, and will be lost if Anope is shut down, "
"restarted, or the configuration is reloaded."
"\n\n"
"Example:\n"
" \002MODIFY\032nickserv\032regdelay\03215m\002"
));
return true;
}
};
+5 -3
View File
@@ -235,9 +235,11 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("The defcon system can be used to implement a pre-defined\n"
"set of restrictions to services useful during an attempted\n"
"attack on the network."));
source.Reply(_(
"The defcon system can be used to implement a pre-defined "
"set of restrictions to services useful during an attempted "
"attack on the network."
));
return true;
}
};
+16 -14
View File
@@ -722,20 +722,22 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("This command allows managing DNS zones used for controlling what servers users\n"
"are directed to when connecting. Omitting all parameters prints out the status of\n"
"the DNS zone.\n"
" \n"
"\002ADDZONE\002 adds a zone, eg us.yournetwork.tld. Servers can then be added to this\n"
"zone with the \002ADDSERVER\002 command.\n"
" \n"
"The \002ADDSERVER\002 command adds a server to the given zone. When a query is done, the\n"
"zone in question is served if it exists, else all servers in all zones are served.\n"
"A server may be in more than one zone.\n"
" \n"
"The \002ADDIP\002 command associates an IP with a server.\n"
" \n"
"The \002POOL\002 and \002DEPOOL\002 commands actually add and remove servers to their given zones."));
source.Reply(_(
"This command allows managing DNS zones used for controlling what servers users "
"are directed to when connecting. Omitting all parameters prints out the status of "
"the DNS zone."
"\n\n"
"\002ADDZONE\002 adds a zone, eg us.yournetwork.tld. Servers can then be added to this "
"zone with the \002ADDSERVER\002 command."
"\n\n"
"The \002ADDSERVER\002 command adds a server to the given zone. When a query is done, the "
"zone in question is served if it exists, else all servers in all zones are served. "
"A server may be in more than one zone."
"\n\n"
"The \002ADDIP\002 command associates an IP with a server."
"\n\n"
"The \002POOL\002 and \002DEPOOL\002 commands actually add and remove servers to their given zones."
));
return true;
}
};
+9 -4
View File
@@ -457,15 +457,20 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Forbid allows you to forbid usage of certain nicknames, channels,\n"
"and email addresses. Wildcards are accepted for all entries."));
source.Reply(_(
"Forbid allows you to forbid usage of certain nicknames, channels, "
"and email addresses. Wildcards are accepted for all entries."
));
const Anope::string &regexengine = Config->GetBlock("options").Get<const Anope::string>("regexengine");
if (!regexengine.empty())
{
source.Reply(" ");
source.Reply(_("Regex matches are also supported using the %s engine.\n"
"Enclose your pattern in // if this is desired."), regexengine.c_str());
source.Reply(_(
"Regex matches are also supported using the %s engine. "
"Enclose your pattern in // if this is desired."
),
regexengine.c_str());
}
return true;
+18 -13
View File
@@ -381,24 +381,29 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Allows Services Operators to make services ignore a nick or mask\n"
"for a certain time or until the next restart. The default\n"
"time format is seconds. You can specify it by using units.\n"
"Valid units are: \037s\037 for seconds, \037m\037 for minutes,\n"
"\037h\037 for hours and \037d\037 for days.\n"
"Combinations of these units are not permitted.\n"
"To make services permanently ignore the user, type 0 as time.\n"
"When adding a \037mask\037, it should be in the format nick!user@host,\n"
"everything else will be considered a nick. Wildcards are permitted.\n"
" \n"
"Ignores will not be enforced on IRC Operators."));
source.Reply(_(
"Allows Services Operators to make services ignore a nick or mask "
"for a certain time or until the next restart. The default "
"time format is seconds. You can specify it by using units. "
"Valid units are: \037s\037 for seconds, \037m\037 for minutes, "
"\037h\037 for hours and \037d\037 for days. "
"Combinations of these units are not permitted. "
"To make services permanently ignore the user, type 0 as time. "
"When adding a \037mask\037, it should be in the format nick!user@host, "
"everything else will be considered a nick. Wildcards are permitted."
"\n\n"
"Ignores will not be enforced on IRC Operators."
));
const Anope::string &regexengine = Config->GetBlock("options").Get<const Anope::string>("regexengine");
if (!regexengine.empty())
{
source.Reply(" ");
source.Reply(_("Regex matches are also supported using the %s engine.\n"
"Enclose your pattern in // if this is desired."), regexengine.c_str());
source.Reply(_(
"Regex matches are also supported using the %s engine. "
"Enclose your pattern in // if this is desired."
),
regexengine.c_str());
}
return true;
+5 -3
View File
@@ -254,9 +254,11 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Add or delete oper information for a given nick or channel.\n"
"This will show to opers in the respective info command for\n"
"the nick or channel."));
source.Reply(_(
"Add or delete oper information for a given nick or channel. "
"This will show to opers in the respective info command for "
"the nick or channel."
));
return true;
}
};
+10 -8
View File
@@ -54,14 +54,16 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Tells services to jupiter a server -- that is, to create\n"
"a fake \"server\" connected to services which prevents\n"
"the real server of that name from connecting. The jupe\n"
"may be removed using a standard \002SQUIT\002. If a reason is\n"
"given, it is placed in the server information field;\n"
"otherwise, the server information field will contain the\n"
"text \"Juped by <nick>\", showing the nickname of the\n"
"person who jupitered the server."));
source.Reply(_(
"Tells services to jupiter a server -- that is, to create "
"a fake \"server\" connected to services which prevents "
"the real server of that name from connecting. The jupe "
"may be removed using a standard \002SQUIT\002. If a reason is "
"given, it is placed in the server information field; "
"otherwise, the server information field will contain the "
"text \"Juped by <nick>\", showing the nickname of the "
"person who jupitered the server."
));
return true;
}
};
+9 -6
View File
@@ -60,12 +60,15 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Allows staff to kick a user from any channel.\n"
"Parameters are the same as for the standard /KICK\n"
"command. The kick message will have the nickname of the\n"
"IRCop sending the KICK command prepended; for example:\n"
" \n"
"*** SpamMan has been kicked off channel #my_channel by %s (Alcan (Flood))"), source.service->nick.c_str());
source.Reply(_(
"Allows staff to kick a user from any channel. "
"Parameters are the same as for the standard /KICK "
"command. The kick message will have the nickname of the "
"IRCop sending the KICK command prepended; for example:"
"\n\n"
"*** SpamMan has been kicked off channel #my_channel by %s (Alcan (Flood))"
),
source.service->nick.c_str());
return true;
}
};
+5 -3
View File
@@ -46,9 +46,11 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Allows you to kill a user from the network.\n"
"Parameters are the same as for the standard /KILL\n"
"command."));
source.Reply(_(
"Allows you to kill a user from the network. "
"Parameters are the same as for the standard /KILL "
"command."
));
return true;
}
};
+28 -18
View File
@@ -109,20 +109,25 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Lists all channels currently in use on the IRC network, whether they\n"
"are registered or not.\n"
" \n"
"If \002pattern\002 is given, lists only channels that match it. If a nickname\n"
"is given, lists only the channels the user using it is on. If SECRET is\n"
"specified, lists only channels matching \002pattern\002 that have the +s or\n"
"+p mode."));
source.Reply(_(
"Lists all channels currently in use on the IRC network, whether they "
"are registered or not."
"\n\n"
"If \002pattern\002 is given, lists only channels that match it. If a nickname "
"is given, lists only the channels the user using it is on. If SECRET is "
"specified, lists only channels matching \002pattern\002 that have the +s or "
"+p mode."
));
const Anope::string &regexengine = Config->GetBlock("options").Get<const Anope::string>("regexengine");
if (!regexengine.empty())
{
source.Reply(" ");
source.Reply(_("Regex matches are also supported using the %s engine.\n"
"Enclose your pattern in // if this is desired."), regexengine.c_str());
source.Reply(_(
"Regex matches are also supported using the %s engine. "
"Enclose your pattern in // if this is desired."
),
regexengine.c_str());
}
return true;
@@ -252,20 +257,25 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Lists all users currently online on the IRC network, whether their\n"
"nick is registered or not.\n"
" \n"
"If \002pattern\002 is given, lists only users that match it (it must be in\n"
"the format nick!user@host[#realname]). If \002channel\002 is given, lists\n"
"only users that are on the given channel. If INVISIBLE is specified, only users\n"
"with the +i flag will be listed."));
source.Reply(_(
"Lists all users currently online on the IRC network, whether their "
"nick is registered or not."
"\n\n"
"If \002pattern\002 is given, lists only users that match it (it must be in "
"the format nick!user@host[#realname]). If \002channel\002 is given, lists "
"only users that are on the given channel. If INVISIBLE is specified, only users "
"with the +i flag will be listed."
));
const Anope::string &regexengine = Config->GetBlock("options").Get<const Anope::string>("regexengine");
if (!regexengine.empty())
{
source.Reply(" ");
source.Reply(_("Regex matches are also supported using the %s engine.\n"
"Enclose your pattern in // if this is desired."), regexengine.c_str());
source.Reply(_(
"Regex matches are also supported using the %s engine. "
"Enclose your pattern in // if this is desired."
),
regexengine.c_str());
}
return true;
+12 -6
View File
@@ -48,9 +48,12 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Logs you in to %s so you gain Services Operator privileges.\n"
"This command may be unnecessary if your oper block is\n"
"configured without a password."), source.service->nick.c_str());
source.Reply(_(
"Logs you in to %s so you gain Services Operator privileges. "
"This command may be unnecessary if your oper block is "
"configured without a password."
),
source.service->nick.c_str());
return true;
}
@@ -91,9 +94,12 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Logs you out from %s so you lose Services Operator privileges.\n"
"This command is only useful if your oper block is configured\n"
"with a password."), source.service->nick.c_str());
source.Reply(_(
"Logs you out from %s so you lose Services Operator privileges. "
"This command is only useful if your oper block is configured "
"with a password."
),
source.service->nick.c_str());
return true;
}
+13 -11
View File
@@ -147,17 +147,19 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("This command searches the services logfiles for messages\n"
"that match the given pattern. The day and limit argument\n"
"may be used to specify how many days of logs to search\n"
"and the number of replies to limit to. By default this\n"
"command searches one week of logs, and limits replies\n"
"to 50.\n"
" \n"
"For example:\n"
" \002LOGSEARCH +21d +500l Anope\002\n"
" Searches the last 21 days worth of logs for messages\n"
" containing Anope and lists the most recent 500 of them."));
source.Reply(_(
"This command searches the services logfiles for messages "
"that match the given pattern. The day and limit argument "
"may be used to specify how many days of logs to search "
"and the number of replies to limit to. By default this "
"command searches one week of logs, and limits replies "
"to 50."
"\n\n"
"For example:\n"
" \002LOGSEARCH\032+21d\032+500l\032Anope\002\n"
" Searches the last 21 days worth of logs for messages\n"
" containing Anope and lists the most recent 500 of them."
));
return true;
}
};
+10 -6
View File
@@ -128,10 +128,12 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Allows Services Operators to change modes for any channel.\n"
"Parameters are the same as for the standard /MODE command.\n"
"Alternatively, CLEAR may be given to clear all modes on the channel.\n"
"If CLEAR ALL is given then all modes, including user status, is removed."));
source.Reply(_(
"Allows Services Operators to change modes for any channel. "
"Parameters are the same as for the standard /MODE command. "
"Alternatively, CLEAR may be given to clear all modes on the channel. "
"If CLEAR\032ALL is given then all modes, including user status, is removed."
));
return true;
}
};
@@ -169,8 +171,10 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Allows Services Operators to change modes for any user.\n"
"Parameters are the same as for the standard /MODE command."));
source.Reply(_(
"Allows Services Operators to change modes for any user. "
"Parameters are the same as for the standard /MODE command."
));
return true;
}
};
+1 -2
View File
@@ -43,8 +43,7 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("This command loads the module named \037modname\037 from the modules\n"
"directory."));
source.Reply(_("This command loads the module named \037modname\037 from the modules directory."));
return true;
}
};
+21 -15
View File
@@ -319,12 +319,14 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Edits or displays the list of logon news messages. When a\n"
"user connects to the network, these messages will be sent\n"
"to them. However, no more than \002%d\002 messages will be\n"
"sent in order to avoid flooding the user. If there are\n"
"more news messages, only the most recent will be sent."),
Config->GetModule(this->owner).Get<unsigned>("newscount", "3"));
source.Reply(_(
"Edits or displays the list of logon news messages. When a "
"user connects to the network, these messages will be sent "
"to them. However, no more than \002%d\002 messages will be "
"sent in order to avoid flooding the user. If there are "
"more news messages, only the most recent will be sent."
),
Config->GetModule(this->owner).Get<unsigned>("newscount", "3"));
return true;
}
};
@@ -347,12 +349,14 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Edits or displays the list of oper news messages. When a\n"
"user opers up (with the /OPER command), these messages will\n"
"be sent to them. However, no more than \002%d\002 messages will\n"
"be sent in order to avoid flooding the user. If there are\n"
"more news messages, only the most recent will be sent."),
Config->GetModule(this->owner).Get<unsigned>("newscount", "3"));
source.Reply(_(
"Edits or displays the list of oper news messages. When a "
"user opers up (with the /OPER command), these messages will "
"be sent to them. However, no more than \002%d\002 messages will "
"be sent in order to avoid flooding the user. If there are "
"more news messages, only the most recent will be sent."
),
Config->GetModule(this->owner).Get<unsigned>("newscount", "3"));
return true;
}
};
@@ -375,9 +379,11 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Edits or displays the list of random news messages. When a\n"
"user connects to the network, one (and only one) of the\n"
"random news will be randomly chosen and sent to them."));
source.Reply(_(
"Edits or displays the list of random news messages. When a "
"user connects to the network, one (and only one) of the "
"random news will be randomly chosen and sent to them."
));
return true;
}
};
+6 -4
View File
@@ -64,10 +64,12 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("\002SET\002 kills all operators from the given\n"
"\002server\002 and prevents operators from opering\n"
"up on the given server. \002REVOKE\002 removes this\n"
"restriction."));
source.Reply(_(
"\002SET\002 kills all operators from the given "
"\002server\002 and prevents operators from opering "
"up on the given server. \002REVOKE\002 removes this "
"restriction."
));
return true;
}
};
+5 -3
View File
@@ -253,9 +253,11 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Allows you to change and view Services Operators.\n"
"Note that operators removed by this command but are still set in\n"
"the configuration file are not permanently affected by this."));
source.Reply(_(
"Allows you to change and view Services Operators. "
"Note that operators removed by this command but are still set in "
"the configuration file are not permanently affected by this."
));
return true;
}
};
+6 -4
View File
@@ -45,10 +45,12 @@ public:
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("Causes services to reload the configuration file. Note that\n"
"some directives still need the restart of the services to\n"
"take effect (such as services' nicknames, activation of the\n"
"session limitation, etc.)."));
source.Reply(_(
"Causes services to reload the configuration file. Note that "
"some directives still need the restart of the services to "
"take effect (such as services' nicknames, activation of the "
"session limitation, etc.)."
));
return true;
}
};

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