static const struct message_entry msgtab[] = {
{ "MSMSG_CANNOT_SEND", "You cannot send to account $b%s$b." },
+ { "MSMSG_UNKNOWN_SEND_FLAG", "Unreccognised send flag '%c', message not sent." },
{ "MSMSG_MEMO_SENT", "Message sent to $b%s$b (ID# %d)." },
{ "MSMSG_NO_MESSAGES", "You have no messages." },
{ "MSMSG_MEMOS_FOUND", "Found $b%d$b matches.\nUse /msg $S READ <ID> to read a message." },
} memoserv_conf;
#define MEMOSERV_FUNC(NAME) MODCMD_FUNC(NAME)
-#define OPTION_FUNC(NAME) int NAME(struct userNode *user, struct handle_info *hi, UNUSED_ARG(unsigned int override), unsigned int argc, char *argv[])
+#define OPTION_FUNC(NAME) int NAME(struct svccmd *cmd, struct userNode *user, struct handle_info *hi, UNUSED_ARG(unsigned int override), unsigned int argc, char *argv[])
typedef OPTION_FUNC(option_func_t);
unsigned long memo_id;
static MODCMD_FUNC(cmd_send)
{
char *message;
- int s = 0, brk = 0;
int reciept = 0, inc = 2;
struct handle_info *hi;
struct memo_account *ma, *sender;
if (!(memoserv_can_send(cmd->parent->bot, user, ma)))
return 0;
- char *flags = argv[2];
- while (*flags) {
- switch (*flags) {
- case '-':
- if (s != 0)
- brk = 1;
- break;
-
- case 'r':
- if (s > 0)
+ inc = 2; /* Start of message on 3rd ([2]) word */
+ if(argv[2][0] == '-' && argv[2][1] != '-') { /* first word is flags ('-r')*/
+ char *flags = argv[2];
+ inc++; /* Start of message is now 1 word later */
+ for(flags++;*flags;flags++) {
+ switch (*flags) {
+ case 'r':
reciept = 1;
break;
default:
- break;
- }
-
- if (brk == 1)
- break;
- else {
- s++;
- flags++;
+ /* Unknown mode. Give an error */
+ reply("MSMSG_UNKNOWN_SEND_FLAG", *flags);
+ return 0;
+ }
}
}
-
- if (s > 0)
- inc = 3;
+ else
+ inc = 2; /* Start of message is word 2 */
message = unsplit_string(argv + inc, argc - inc, NULL);
memo = add_memo(now, ma, sender, message, 1);
if (!(memo = find_memo(user, cmd, ma, argv[1], &memoid)))
return 0;
- if (argv[2]) {
+ if (argc > 2) {
char *argtwo = argv[2];
while (*argtwo) {
switch (*argtwo) {
static void
-set_list(struct userNode *user, struct handle_info *hi, int override)
+set_list(struct svccmd *cmd, struct userNode *user, struct handle_info *hi, int override)
{
option_func_t *opt;
unsigned int i;
char *set_display[] = {"AUTHNOTIFY", "NOTIFY", "PRIVATE", "LIMIT",
"IGNORERECIEPTS", "SENDRECIEPTS"};
- send_message(user, memoserv_conf.bot, "MSMSG_SET_OPTIONS");
- send_message(user, memoserv_conf.bot, "MSMSG_BAR");
+ reply("MSMSG_SET_OPTIONS");
+ reply("MSMSG_BAR");
/* Do this so options are presented in a consistent order. */
for (i = 0; i < ArrayLength(set_display); ++i)
if ((opt = dict_find(memoserv_opt_dict, set_display[i], NULL)))
- opt(user, hi, override, 0, NULL);
- send_message(user, memoserv_conf.bot, "MSMSG_SET_OPTIONS_END");
+ opt(cmd, user, hi, override, 0, NULL);
+ reply("MSMSG_SET_OPTIONS_END");
}
static MODCMD_FUNC(cmd_set)
hi = user->handle_info;
if (argc < 2) {
- set_list(user, hi, 0);
+ set_list(cmd, user, hi, 0);
return 1;
}
return 0;
}
- return opt(user, hi, 0, argc-1, argv+1);
+ return opt(cmd, user, hi, 0, argc-1, argv+1);
}
static MODCMD_FUNC(cmd_oset)
struct handle_info *hi;
option_func_t *opt;
- if (!(hi = get_victim_oper(user, argv[1])))
+ if (argc < 2)
+ return 0;
+
+ if (!(hi = get_victim_oper(cmd, user, argv[1])))
return 0;
if (argc < 3) {
- set_list(user, hi, 0);
+ set_list(cmd, user, hi, 0);
return 1;
}
return 0;
}
- return opt(user, hi, 1, argc-2, argv+2);
+ return opt(cmd, user, hi, 1, argc-2, argv+2);
}
static OPTION_FUNC(opt_notify)
} else if (disabled_string(choice)) {
ma->flags &= ~MEMO_NOTIFY_NEW;
} else {
- send_message(user, memoserv_conf.bot, "MSMSG_INVALID_BINARY", choice);
+ reply("MSMSG_INVALID_BINARY", choice);
return 0;
}
}
choice = (ma->flags & MEMO_NOTIFY_NEW) ? "on" : "off";
- send_message(user, memoserv_conf.bot, "MSMSG_SET_NOTIFY", choice);
+ reply("MSMSG_SET_NOTIFY", choice);
return 1;
}
} else if (disabled_string(choice)) {
ma->flags &= ~MEMO_NOTIFY_LOGIN;
} else {
- send_message(user, memoserv_conf.bot, "MSMSG_INVALID_BINARY", choice);
+ reply("MSMSG_INVALID_BINARY", choice);
return 0;
}
}
choice = (ma->flags & MEMO_NOTIFY_LOGIN) ? "on" : "off";
- send_message(user, memoserv_conf.bot, "MSMSG_SET_AUTHNOTIFY", choice);
+ reply("MSMSG_SET_AUTHNOTIFY", choice);
return 1;
}
} else if (disabled_string(choice)) {
ma->flags &= ~MEMO_IGNORE_RECIEPTS;
} else {
- send_message(user, memoserv_conf.bot, "MSMSG_INVALID_BINARY", choice);
+ reply("MSMSG_INVALID_BINARY", choice);
return 0;
}
}
choice = (ma->flags & MEMO_IGNORE_RECIEPTS) ? "on" : "off";
- send_message(user, memoserv_conf.bot, "MSMSG_SET_IGNORERECIEPTS", choice);
+ reply("MSMSG_SET_IGNORERECIEPTS", choice);
return 1;
}
} else if (disabled_string(choice)) {
ma->flags &= ~MEMO_ALWAYS_RECIEPTS;
} else {
- send_message(user, memoserv_conf.bot, "MSMSG_INVALID_BINARY", choice);
+ reply("MSMSG_INVALID_BINARY", choice);
return 0;
}
}
choice = (ma->flags & MEMO_ALWAYS_RECIEPTS) ? "on" : "off";
- send_message(user, memoserv_conf.bot, "MSMSG_SET_SENDRECIEPTS", choice);
+ reply("MSMSG_SET_SENDRECIEPTS", choice);
return 1;
}
} else if (disabled_string(choice)) {
ma->flags &= ~MEMO_DENY_NONCHANNEL;
} else {
- send_message(user, memoserv_conf.bot, "MSMSG_INVALID_BINARY", choice);
+ reply("MSMSG_INVALID_BINARY", choice);
return 0;
}
}
choice = (ma->flags & MEMO_DENY_NONCHANNEL) ? "on" : "off";
- send_message(user, memoserv_conf.bot, "MSMSG_SET_PRIVATE", choice);
+ reply("MSMSG_SET_PRIVATE", choice);
return 1;
}
ma->limit = choice;
}
- send_message(user, memoserv_conf.bot, "MSMSG_SET_LIMIT", ma->limit);
+ reply("MSMSG_SET_LIMIT", ma->limit);
return 1;
}
str = database_get_data(conf_node, "bot", RECDB_QSTRING);
if (str)
memoserv_conf.bot = GetUserH(str);
+ else
+ log_module(MS_LOG, LOG_ERROR, "database_get_data for memoserv_conf.bot failed!");
if (autojoin_channels && memoserv_conf.bot) {
for (i = 0; i < autojoin_channels->used; i++) {