- if(( Client_Type( Client ) != CLIENT_USER ) && ( Client_Type( Client ) != CLIENT_SERVER )) return IRC_WriteStrClient( Client, ERR_NOTREGISTERED_MSG, Client_ID( Client ));
-
- /* Falsche Anzahl Parameter? */
- if(( Req->argc < 1 ) || ( Req->argc > 2 )) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );
-
- if( Client_Type( Client ) == CLIENT_SERVER ) from = Client_Search( Req->prefix );
- else from = Client;
- if( ! from ) return IRC_WriteStrClient( Client, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->prefix );
+ if (Req->argc < 1 || Req->argc > 2)
+ return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+ Client_ID(Client), Req->command);
+
+ if (Client_Type(Client) == CLIENT_SERVER)
+ from = Client_Search(Req->prefix);
+ else
+ from = Client;
+
+ if (!from)
+ return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG,
+ Client_ID(Client), Req->prefix);
+
+ chan = Channel_Search(Req->argv[0]);
+ if (!chan)
+ return IRC_WriteStrClient(from, ERR_NOSUCHCHANNEL_MSG,
+ Client_ID(from), Req->argv[0]);
+
+ Channel_CheckAdminRights(chan, Client, from,
+ &onchannel, &topicok, &use_servermode);
+
+ if (!onchannel && !topicok)
+ return IRC_WriteStrClient(from, ERR_NOTONCHANNEL_MSG,
+ Client_ID(from), Req->argv[0]);
+
+ if (Req->argc == 1) {
+ /* Request actual topic */
+ topic = Channel_Topic(chan);
+ if (*topic) {
+ r = IRC_WriteStrClient(from, RPL_TOPIC_MSG,
+ Client_ID(Client),
+ Channel_Name(chan), topic);
+#ifndef STRICT_RFC
+ if (!r)
+ return r;
+ r = IRC_WriteStrClient(from, RPL_TOPICSETBY_MSG,
+ Client_ID(Client),
+ Channel_Name(chan),
+ Channel_TopicWho(chan),
+ Channel_TopicTime(chan));
+#endif
+ return r;
+ }
+ else
+ return IRC_WriteStrClient(from, RPL_NOTOPIC_MSG,
+ Client_ID(from),
+ Channel_Name(chan));
+ }