Make sure chat messages are routed through plugins.
This commit is contained in:
parent
4a977da514
commit
0c6a58d35a
@ -25,6 +25,7 @@ struct hub_info* g_hub = 0;
|
||||
if (hub->config->chat_only && u->credentials < auth_cred_operator) \
|
||||
break
|
||||
|
||||
/* FIXME: Flood control should be done in a plugin! */
|
||||
#define CHECK_FLOOD(TYPE, WARN) \
|
||||
if (flood_control_check(&u->flood_ ## TYPE , hub->config->flood_ctl_ ## TYPE, hub->config->flood_ctl_interval, net_get_time())) \
|
||||
{ \
|
||||
@ -255,6 +256,8 @@ int hub_handle_chat_message(struct hub_info* hub, struct hub_user* u, struct adc
|
||||
char* message = adc_msg_get_argument(cmd, 0);
|
||||
int ret = 0;
|
||||
int relay = 1;
|
||||
int broadcast;
|
||||
int command;
|
||||
int offset;
|
||||
|
||||
if (!message)
|
||||
@ -266,7 +269,10 @@ int hub_handle_chat_message(struct hub_info* hub, struct hub_user* u, struct adc
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((cmd->cache[0] == 'B') && (message[0] == '!' || message[0] == '+'))
|
||||
broadcast = (cmd->cache[0] == 'B' || cmd->cache[0] == 'F');
|
||||
command = (message[0] == '!' || message[0] == '+');
|
||||
|
||||
if (broadcast && command)
|
||||
{
|
||||
/*
|
||||
* A message such as "++message" is handled as "+message", by removing the first character.
|
||||
@ -285,14 +291,35 @@ int hub_handle_chat_message(struct hub_info* hub, struct hub_user* u, struct adc
|
||||
}
|
||||
}
|
||||
|
||||
if (((hub->config->chat_is_privileged && !user_is_protected(u)) || (user_flag_get(u, flag_muted))) && (cmd->cache[0] == 'B' || cmd->cache[0] == 'F'))
|
||||
/* FIXME: Plugin should do this! */
|
||||
if (relay && (((hub->config->chat_is_privileged && !user_is_protected(u)) || (user_flag_get(u, flag_muted))) && broadcast))
|
||||
{
|
||||
relay = 0;
|
||||
}
|
||||
|
||||
|
||||
if (relay)
|
||||
{
|
||||
plugin_st status;
|
||||
if (broadcast)
|
||||
{
|
||||
status = plugin_handle_chat_message(hub, u, message, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
struct hub_user* target = uman_get_user_by_sid(hub, cmd->target);
|
||||
status = plugin_handle_private_message(hub, u, target, message, 0);
|
||||
}
|
||||
|
||||
if (status == st_deny)
|
||||
relay = 0;
|
||||
}
|
||||
|
||||
if (relay)
|
||||
{
|
||||
/* adc_msg_remove_named_argument(cmd, "PM"); */
|
||||
|
||||
/* FIXME: Plugin should do history management */
|
||||
if (cmd->cache[0] == 'B')
|
||||
hub_chat_history_add(hub, u, cmd);
|
||||
ret = route_message(hub, u, cmd);
|
||||
|
@ -36,6 +36,7 @@ void plugin_log_user_logout(struct hub_info* hub, struct hub_user* user, const c
|
||||
void plugin_log_user_nick_change(struct hub_info* hub, struct hub_user* user, const char* new_nick);
|
||||
void plugin_log_user_update_error(struct hub_info* hub, struct hub_user* user, const char* reason);
|
||||
|
||||
/* IP ban related */
|
||||
plugin_st plugin_check_ip_early(struct hub_info* hub, struct ip_addr_encap* addr);
|
||||
plugin_st plugin_check_ip_late(struct hub_info* hub, struct ip_addr_encap* addr);
|
||||
|
||||
|
@ -34,6 +34,11 @@
|
||||
#define MAX_PASS_LEN 64
|
||||
#endif
|
||||
|
||||
#ifndef MAX_CID_LEN
|
||||
#define MAX_CID_LEN 39
|
||||
#endif
|
||||
|
||||
|
||||
struct plugin_handle;
|
||||
|
||||
struct plugin_user
|
||||
@ -61,6 +66,23 @@ struct auth_info
|
||||
enum auth_credentials credentials;
|
||||
};
|
||||
|
||||
enum ban_flags
|
||||
{
|
||||
ban_nickname = 0x01, /* Nickname is banned */
|
||||
ban_cid = 0x02, /* CID is banned */
|
||||
ban_ip = 0x04, /* IP address (range) is banned */
|
||||
};
|
||||
|
||||
struct ban_info
|
||||
{
|
||||
unsigned int flags; /* See enum ban_flags. */
|
||||
char nickname[MAX_NICK_LEN+1]; /* Nickname - only defined if (ban_nickname & flags). */
|
||||
char cid[MAX_CID_LEN+1]; /* CID - only defined if (ban_cid & flags). */
|
||||
struct ip_addr_encap ip_addr_lo; /* Low IP address of an IP range */
|
||||
struct ip_addr_encap ip_addr_hi; /* High IP address of an IP range */
|
||||
time_t expiry; /* Time when the ban record expires */
|
||||
};
|
||||
|
||||
typedef plugin_st (*on_chat_msg_t)(struct plugin_handle*, struct plugin_user* from, const char* message);
|
||||
typedef plugin_st (*on_private_msg_t)(struct plugin_handle*, struct plugin_user* from, struct plugin_user* to, const char* message);
|
||||
typedef plugin_st (*on_search_t)(struct plugin_handle*, struct plugin_user* from, const char* data);
|
||||
|
Loading…
Reference in New Issue
Block a user