/* * Copyright (c) 2005 William Pitcock * Rights to this code are as documented in doc/LICENSE. * * Marking for channels. * */ #include "atheme.h" DECLARE_MODULE_V1 ( "chanserv/mark", false, _modinit, _moddeinit, PACKAGE_STRING, VENDOR_STRING ); static void cs_cmd_mark(sourceinfo_t *si, int parc, char *parv[]); command_t cs_mark = { "MARK", N_("Adds a note to a channel."), PRIV_MARK, 3, cs_cmd_mark, { .path = "cservice/mark" } }; void _modinit(module_t *m) { service_named_bind_command("chanserv", &cs_mark); } void _moddeinit(module_unload_intent_t intent) { service_named_unbind_command("chanserv", &cs_mark); } static void cs_cmd_mark(sourceinfo_t *si, int parc, char *parv[]) { char *target = parv[0]; char *action = parv[1]; char *info = parv[2]; mychan_t *mc; if (!target || !action) { command_fail(si, fault_needmoreparams, STR_INSUFFICIENT_PARAMS, "MARK"); command_fail(si, fault_needmoreparams, _("Usage: MARK <#channel> [note]")); return; } if (target[0] != '#') { command_fail(si, fault_badparams, STR_INVALID_PARAMS, "MARK"); return; } if (!(mc = mychan_find(target))) { command_fail(si, fault_nosuch_target, _("Channel \2%s\2 is not registered."), target); return; } if (!strcasecmp(action, "ON")) { if (!info) { command_fail(si, fault_needmoreparams, STR_INSUFFICIENT_PARAMS, "MARK"); command_fail(si, fault_needmoreparams, _("Usage: MARK <#channel> ON ")); return; } if (metadata_find(mc, "private:mark:setter")) { command_fail(si, fault_nochange, _("\2%s\2 is already marked."), target); return; } metadata_add(mc, "private:mark:setter", get_oper_name(si)); metadata_add(mc, "private:mark:reason", info); metadata_add(mc, "private:mark:timestamp", number_to_string(CURRTIME)); wallops("%s marked the channel \2%s\2.", get_oper_name(si), target); logcommand(si, CMDLOG_ADMIN, "MARK:ON: \2%s\2 (reason: \2%s\2)", mc->name, info); command_success_nodata(si, _("\2%s\2 is now marked."), target); } else if (!strcasecmp(action, "OFF")) { if (!metadata_find(mc, "private:mark:setter")) { command_fail(si, fault_nochange, _("\2%s\2 is not marked."), target); return; } metadata_delete(mc, "private:mark:setter"); metadata_delete(mc, "private:mark:reason"); metadata_delete(mc, "private:mark:timestamp"); wallops("%s unmarked the channel \2%s\2.", get_oper_name(si), target); logcommand(si, CMDLOG_ADMIN, "MARK:OFF: \2%s\2", mc->name); command_success_nodata(si, _("\2%s\2 is now unmarked."), target); } else { command_fail(si, fault_badparams, STR_INVALID_PARAMS, "MARK"); command_fail(si, fault_badparams, _("Usage: MARK <#channel> [note]")); } } /* vim:cinoptions=>s,e0,n0,f0,{0,}0,^0,=s,ps,t0,c3,+s,(2s,us,)20,*30,gs,hs * vim:ts=8 * vim:sw=8 * vim:noexpandtab */