]> jfr.im git - solanum.git/blobdiff - modules/m_topic.c
implement configurable channel modes (closes #31)
[solanum.git] / modules / m_topic.c
index c8328f1c5a50c38277532eed6b5668caf4751712..b59378a3e3842df18d9e7e1459338c6e933559c8 100644 (file)
@@ -40,6 +40,7 @@
 #include "modules.h"
 #include "packet.h"
 #include "tgchange.h"
+#include "logger.h"
 
 static int m_topic(struct Client *, struct Client *, int, const char **);
 static int ms_topic(struct Client *, struct Client *, int, const char **);
@@ -87,13 +88,6 @@ m_topic(struct Client *client_p, struct Client *source_p, int parc, const char *
        if(MyClient(source_p) && !IsFloodDone(source_p))
                flood_endgrace(source_p);
 
-       if(!IsChannelName(name))
-       {
-               sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL,
-                                  form_str(ERR_NOSUCHCHANNEL), name);
-               return 0;
-       }
-
        chptr = find_channel(name);
 
        if(chptr == NULL)
@@ -125,7 +119,7 @@ m_topic(struct Client *client_p, struct Client *source_p, int parc, const char *
                }
 
                if(((chptr->mode.mode & MODE_TOPICLIMIT) == 0 ||
-                                       get_channel_access(source_p, msptr) < CHFL_CHANOP) &&
+                                       get_channel_access(source_p, msptr, MODE_ADD) >= CHFL_CHANOP) &&
                                (!MyClient(source_p) ||
                                 can_send(chptr, source_p, msptr)))
                {
@@ -170,7 +164,8 @@ m_topic(struct Client *client_p, struct Client *source_p, int parc, const char *
 
                        sendto_one(source_p, form_str(RPL_TOPICWHOTIME),
                                        me.name, source_p->name, chptr->chname,
-                                       chptr->topic_info, chptr->topic_time);
+                                       chptr->topic_info,
+                                       (unsigned long)chptr->topic_time);
                }
        }
 
@@ -191,17 +186,14 @@ ms_topic(struct Client *client_p, struct Client *source_p, int parc, const char
 {
        struct Channel *chptr = NULL;
 
-       if(IsChannelName(parv[1]))
-       {
-               if((chptr = find_channel(parv[1])) == NULL)
-                       return 0;
+       if((chptr = find_channel(parv[1])) == NULL)
+               return 0;
 
-               set_channel_topic(chptr, parv[4], parv[2], atoi(parv[3]));
+       set_channel_topic(chptr, parv[4], parv[2], atoi(parv[3]));
 
-               sendto_channel_local(ALL_MEMBERS, chptr, ":%s TOPIC %s :%s",
-                                    source_p->name, parv[1], 
-                                    chptr->topic == NULL ? "" : chptr->topic);
-       }
+       sendto_channel_local(ALL_MEMBERS, chptr, ":%s TOPIC %s :%s",
+                            source_p->name, parv[1],
+                            chptr->topic == NULL ? "" : chptr->topic);
 
        return 0;
 }