degesch: process RPL_TOPICWHOTIME
This commit is contained in:
		
							
								
								
									
										31
									
								
								degesch.c
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								degesch.c
									
									
									
									
									
								
							@@ -4875,6 +4875,35 @@ irc_handle_rpl_creationtime (struct server *s, const struct irc_message *msg)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
irc_handle_rpl_topicwhotime (struct server *s, const struct irc_message *msg)
 | 
			
		||||
{
 | 
			
		||||
	if (msg->params.len < 4)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	const char *channel_name = msg->params.vector[1];
 | 
			
		||||
	const char *who          = msg->params.vector[2];
 | 
			
		||||
	const char *change_time  = msg->params.vector[3];
 | 
			
		||||
 | 
			
		||||
	unsigned long changed;
 | 
			
		||||
	if (!xstrtoul (&changed, change_time, 10))
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	struct channel *channel = str_map_find (&s->irc_channels, channel_name);
 | 
			
		||||
	struct buffer *buffer = str_map_find (&s->irc_buffer_map, channel_name);
 | 
			
		||||
	hard_assert ((channel && buffer) ||
 | 
			
		||||
		(channel && !buffer) || (!channel && !buffer));
 | 
			
		||||
 | 
			
		||||
	// Topic set by x (y@z) on ...
 | 
			
		||||
	if (buffer)
 | 
			
		||||
	{
 | 
			
		||||
		// FIXME: logging
 | 
			
		||||
		char *x = make_time_string (changed);
 | 
			
		||||
		buffer_send_status (s->ctx, buffer, "Topic set by %s on %s", who, x);
 | 
			
		||||
		free (x);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
irc_handle_isupport_prefix (struct server *s, char *value)
 | 
			
		||||
{
 | 
			
		||||
@@ -5068,6 +5097,8 @@ irc_process_numeric (struct server *s,
 | 
			
		||||
		irc_handle_rpl_channelmodeis (s, msg); buffer = NULL; break;
 | 
			
		||||
	case IRC_RPL_CREATIONTIME:
 | 
			
		||||
		irc_handle_rpl_creationtime  (s, msg); buffer = NULL; break;
 | 
			
		||||
	case IRC_RPL_TOPICWHOTIME:
 | 
			
		||||
		irc_handle_rpl_topicwhotime  (s, msg); buffer = NULL; break;
 | 
			
		||||
 | 
			
		||||
	case IRC_ERR_NICKNAMEINUSE:
 | 
			
		||||
		// TODO: if (state == IRC_CONNECTED), use a different nick;
 | 
			
		||||
 
 | 
			
		||||
@@ -27,6 +27,7 @@
 | 
			
		||||
329 IRC_RPL_CREATIONTIME "%s %lld"
 | 
			
		||||
331 IRC_RPL_NOTOPIC "%s :No topic is set"
 | 
			
		||||
332 IRC_RPL_TOPIC "%s :%s"
 | 
			
		||||
333 IRC_RPL_TOPICWHOTIME "%s %s %lld"
 | 
			
		||||
346 IRC_RPL_INVITELIST "%s %s"
 | 
			
		||||
347 IRC_RPL_ENDOFINVITELIST "%s :End of channel invite list"
 | 
			
		||||
348 IRC_RPL_EXCEPTLIST "%s %s"
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user