Mercurial > pidgin
annotate src/protocols/irc/msgs.c @ 9213:99abaef7ed34
[gaim-migrate @ 10008]
Here's a first stab at /help
Still some things that need work. Notice that help is listed twice, etc.
I think I'll change it to make it automaticly tell you the args, instead
of putting them in the help string. Also there's the question of if help
strings should be considered html or plain text. (If plain text, we need
to run gaim_escape_html on it in /help.)
committer: Tailor Script <tailor@pidgin.im>
| author | Tim Ringenbach <marv@pidgin.im> |
|---|---|
| date | Sun, 06 Jun 2004 06:15:27 +0000 |
| parents | c55aa23bf56e |
| children | f4f210e47b60 |
| rev | line source |
|---|---|
| 6333 | 1 /** |
| 2 * @file msgs.c | |
| 3 * | |
| 4 * gaim | |
| 5 * | |
| 6 * Copyright (C) 2003, Ethan Blanton <eblanton@cs.purdue.edu> | |
| 7 * | |
| 8 * This program is free software; you can redistribute it and/or modify | |
| 9 * it under the terms of the GNU General Public License as published by | |
| 10 * the Free Software Foundation; either version 2 of the License, or | |
| 11 * (at your option) any later version. | |
| 12 * | |
| 13 * This program is distributed in the hope that it will be useful, | |
| 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 16 * GNU General Public License for more details. | |
| 17 * | |
| 18 * You should have received a copy of the GNU General Public License | |
| 19 * along with this program; if not, write to the Free Software | |
| 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 21 */ | |
| 22 | |
| 23 #include "internal.h" | |
| 24 | |
| 25 #include "conversation.h" | |
| 26 #include "blist.h" | |
| 27 #include "notify.h" | |
| 28 #include "util.h" | |
| 29 #include "debug.h" | |
| 30 #include "irc.h" | |
| 31 | |
| 32 #include <stdio.h> | |
| 33 | |
| 34 static char *irc_mask_nick(const char *mask); | |
| 35 static char *irc_mask_userhost(const char *mask); | |
| 36 static void irc_chat_remove_buddy(GaimConversation *convo, char *data[2]); | |
| 37 static void irc_buddy_status(char *name, struct irc_buddy *ib, struct irc_conn *irc); | |
| 38 | |
| 39 static char *irc_mask_nick(const char *mask) | |
| 40 { | |
| 41 char *end, *buf; | |
| 42 | |
| 43 end = strchr(mask, '!'); | |
| 44 if (!end) | |
| 45 buf = g_strdup(mask); | |
| 46 else | |
| 47 buf = g_strndup(mask, end - mask); | |
| 48 | |
| 49 return buf; | |
| 50 } | |
| 51 | |
| 52 static char *irc_mask_userhost(const char *mask) | |
| 53 { | |
| 54 return g_strdup(strchr(mask, '!') + 1); | |
| 55 } | |
| 56 | |
| 57 static void irc_chat_remove_buddy(GaimConversation *convo, char *data[2]) | |
| 58 { | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
59 GList *users = gaim_conv_chat_get_users(GAIM_CONV_CHAT(convo)); |
| 6333 | 60 char *message = g_strdup_printf("quit: %s", data[1]); |
| 61 | |
| 62 if (g_list_find_custom(users, data[0], (GCompareFunc)(strcmp))) | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
63 gaim_conv_chat_remove_user(GAIM_CONV_CHAT(convo), data[0], message); |
| 6333 | 64 |
| 65 g_free(message); | |
| 66 } | |
| 67 | |
| 68 void irc_msg_default(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 69 { | |
| 70 gaim_debug(GAIM_DEBUG_INFO, "irc", "Unrecognized message: %s\n", args[0]); | |
| 71 } | |
| 72 | |
| 73 void irc_msg_away(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 74 { | |
| 75 GaimConnection *gc; | |
| 76 | |
| 77 if (!args || !args[1]) | |
| 78 return; | |
| 79 | |
| 80 if (irc->whois.nick && !gaim_utf8_strcasecmp(irc->whois.nick, args[1])) { | |
| 81 /* We're doing a whois, show this in the whois dialog */ | |
| 82 irc_msg_whois(irc, name, from, args); | |
| 83 return; | |
| 84 } | |
| 85 | |
| 86 gc = gaim_account_get_connection(irc->account); | |
| 87 if (gc) | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
88 serv_got_im(gc, args[1], args[2], GAIM_CONV_IM_AUTO_RESP, time(NULL)); |
| 6333 | 89 } |
| 90 | |
| 91 void irc_msg_badmode(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 92 { | |
| 93 GaimConnection *gc = gaim_account_get_connection(irc->account); | |
| 94 | |
| 95 if (!args || !args[1] || !gc) | |
| 96 return; | |
| 97 | |
| 98 gaim_notify_error(gc, NULL, _("Bad mode"), args[1]); | |
| 99 } | |
| 100 | |
| 101 void irc_msg_banned(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 102 { | |
| 103 GaimConnection *gc = gaim_account_get_connection(irc->account); | |
| 104 char *buf; | |
| 105 | |
| 106 if (!args || !args[1] || !gc) | |
| 107 return; | |
| 108 | |
| 109 buf = g_strdup_printf(_("You are banned from %s."), args[1]); | |
| 110 gaim_notify_error(gc, _("Banned"), _("Banned"), buf); | |
| 111 g_free(buf); | |
| 112 } | |
| 113 | |
| 114 void irc_msg_chanmode(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 115 { | |
| 116 GaimConversation *convo; | |
| 117 char *buf; | |
| 118 | |
| 119 if (!args || !args[1] || !args[2]) | |
| 120 return; | |
| 121 | |
| 122 convo = gaim_find_conversation_with_account(args[1], irc->account); | |
| 123 if (!convo) /* XXX punt on channels we are not in for now */ | |
| 124 return; | |
| 125 | |
| 126 buf = g_strdup_printf("mode for %s: %s %s", args[1], args[2], args[3] ? args[3] : ""); | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
127 gaim_conv_chat_write(GAIM_CONV_CHAT(convo), "", buf, GAIM_MESSAGE_SYSTEM|GAIM_MESSAGE_NO_LOG, time(NULL)); |
| 6333 | 128 g_free(buf); |
| 129 | |
| 130 return; | |
| 131 } | |
| 132 | |
| 133 void irc_msg_whois(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 134 { | |
| 135 if (!irc->whois.nick) { | |
| 136 gaim_debug(GAIM_DEBUG_WARNING, "irc", "Unexpected WHOIS reply for %s\n", args[1]); | |
| 137 return; | |
| 138 } | |
| 139 | |
| 140 if (gaim_utf8_strcasecmp(irc->whois.nick, args[1])) { | |
| 141 gaim_debug(GAIM_DEBUG_WARNING, "irc", "Got WHOIS reply for %s while waiting for %s\n", args[1], irc->whois.nick); | |
| 142 return; | |
| 143 } | |
| 144 | |
| 145 if (!strcmp(name, "301")) { | |
| 146 irc->whois.away = g_strdup(args[2]); | |
| 147 } else if (!strcmp(name, "311")) { | |
| 148 irc->whois.userhost = g_strdup_printf("%s@%s", args[2], args[3]); | |
| 149 irc->whois.name = g_strdup(args[5]); | |
| 150 } else if (!strcmp(name, "312")) { | |
| 151 irc->whois.server = g_strdup(args[2]); | |
| 152 irc->whois.serverinfo = g_strdup(args[3]); | |
| 153 } else if (!strcmp(name, "313")) { | |
| 154 irc->whois.ircop = 1; | |
| 155 } else if (!strcmp(name, "317")) { | |
| 156 irc->whois.idle = atoi(args[2]); | |
| 157 if (args[3]) | |
| 158 irc->whois.signon = (time_t)atoi(args[3]); | |
| 159 } else if (!strcmp(name, "319")) { | |
| 160 irc->whois.channels = g_strdup(args[2]); | |
| 161 } else if (!strcmp(name, "320")) { | |
| 162 irc->whois.identified = 1; | |
| 163 } | |
| 164 } | |
| 165 | |
| 166 void irc_msg_endwhois(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 167 { | |
| 168 GaimConnection *gc; | |
| 169 GString *info; | |
|
7062
86ed8b2aa665
[gaim-migrate @ 7626]
Christian Hammond <chipx86@chipx86.com>
parents:
6982
diff
changeset
|
170 char buffer[256]; |
| 6333 | 171 char *str; |
| 172 | |
| 173 if (!irc->whois.nick) { | |
| 174 gaim_debug(GAIM_DEBUG_WARNING, "irc", "Unexpected End of WHOIS for %s\n", args[1]); | |
| 175 return; | |
| 176 } | |
| 177 if (gaim_utf8_strcasecmp(irc->whois.nick, args[1])) { | |
| 178 gaim_debug(GAIM_DEBUG_WARNING, "irc", "Received end of WHOIS for %s, expecting %s\n", args[1], irc->whois.nick); | |
| 179 return; | |
| 180 } | |
| 181 | |
| 182 info = g_string_new(""); | |
| 183 g_string_append_printf(info, "<b>%s:</b> %s%s%s<br>", _("Nick"), args[1], | |
| 184 irc->whois.ircop ? _(" <i>(ircop)</i>") : "", | |
| 185 irc->whois.identified ? _(" <i>(identified)</i>") : ""); | |
| 186 if (irc->whois.away) { | |
| 187 g_string_append_printf(info, "<b>%s:</b> %s<br>", _("Away"), irc->whois.away); | |
| 188 g_free(irc->whois.away); | |
| 189 } | |
| 190 if (irc->whois.userhost) { | |
| 191 g_string_append_printf(info, "<b>%s:</b> %s<br>", _("Username"), irc->whois.userhost); | |
| 192 g_string_append_printf(info, "<b>%s:</b> %s<br>", _("Realname"), irc->whois.name); | |
| 193 g_free(irc->whois.userhost); | |
| 194 g_free(irc->whois.name); | |
| 195 } | |
| 196 if (irc->whois.server) { | |
| 197 g_string_append_printf(info, "<b>%s:</b> %s (%s)<br>", _("Server"), irc->whois.server, irc->whois.serverinfo); | |
| 198 g_free(irc->whois.server); | |
| 199 g_free(irc->whois.serverinfo); | |
| 200 } | |
| 201 if (irc->whois.channels) { | |
| 202 g_string_append_printf(info, "<b>%s:</b> %s<br>", _("Currently on"), irc->whois.channels); | |
| 203 g_free(irc->whois.channels); | |
| 204 } | |
| 205 if (irc->whois.idle) { | |
|
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7062
diff
changeset
|
206 gchar *timex = gaim_str_seconds_to_string(irc->whois.idle); |
| 6357 | 207 g_string_append_printf(info, _("<b>Idle for:</b> %s<br>"), timex); |
| 208 g_free(timex); | |
| 6333 | 209 g_string_append_printf(info, "<b>%s:</b> %s", _("Online since"), ctime(&irc->whois.signon)); |
| 210 } | |
| 211 if (!strcmp(irc->whois.nick, "Paco-Paco")) { | |
| 212 g_string_append_printf(info, _("<br><b>Defining adjective:</b> Glorious<br>")); | |
| 213 } | |
| 214 | |
| 215 gc = gaim_account_get_connection(irc->account); | |
| 216 str = g_string_free(info, FALSE); | |
|
7062
86ed8b2aa665
[gaim-migrate @ 7626]
Christian Hammond <chipx86@chipx86.com>
parents:
6982
diff
changeset
|
217 |
|
86ed8b2aa665
[gaim-migrate @ 7626]
Christian Hammond <chipx86@chipx86.com>
parents:
6982
diff
changeset
|
218 g_snprintf(buffer, sizeof(buffer), |
|
86ed8b2aa665
[gaim-migrate @ 7626]
Christian Hammond <chipx86@chipx86.com>
parents:
6982
diff
changeset
|
219 _("Buddy Information for %s"), irc->whois.nick); |
|
86ed8b2aa665
[gaim-migrate @ 7626]
Christian Hammond <chipx86@chipx86.com>
parents:
6982
diff
changeset
|
220 gaim_notify_formatted(gc, NULL, buffer, NULL, str, NULL, NULL); |
|
86ed8b2aa665
[gaim-migrate @ 7626]
Christian Hammond <chipx86@chipx86.com>
parents:
6982
diff
changeset
|
221 |
| 6333 | 222 g_free(str); |
| 223 memset(&irc->whois, 0, sizeof(irc->whois)); | |
| 224 } | |
| 225 | |
| 8114 | 226 void irc_msg_list(struct irc_conn *irc, const char *name, const char *from, char **args) |
| 227 { | |
| 228 if (!irc->roomlist) | |
| 229 return; | |
| 230 | |
| 231 if (!strcmp(name, "321")) { | |
| 232 gaim_roomlist_set_in_progress(irc->roomlist, TRUE); | |
| 233 return; | |
| 234 } | |
| 235 | |
| 236 if (!strcmp(name, "323")) { | |
| 237 gaim_roomlist_set_in_progress(irc->roomlist, FALSE); | |
| 238 gaim_roomlist_unref(irc->roomlist); | |
| 239 irc->roomlist = NULL; | |
| 240 } | |
| 241 | |
| 242 if (!strcmp(name, "322")) { | |
| 243 GaimRoomlistRoom *room; | |
| 244 | |
| 245 if (!args[0] || !args[1] || !args[2] || !args[3]) | |
| 246 return; | |
| 247 | |
| 248 room = gaim_roomlist_room_new(GAIM_ROOMLIST_ROOMTYPE_ROOM, args[1], NULL); | |
| 249 gaim_roomlist_room_add_field(irc->roomlist, room, args[1]); | |
| 250 gaim_roomlist_room_add_field(irc->roomlist, room, GINT_TO_POINTER(strtol(args[2], NULL, 10))); | |
| 251 gaim_roomlist_room_add_field(irc->roomlist, room, args[3]); | |
| 252 gaim_roomlist_room_add(irc->roomlist, room); | |
| 253 } | |
| 254 } | |
| 255 | |
| 6333 | 256 void irc_msg_topic(struct irc_conn *irc, const char *name, const char *from, char **args) |
| 257 { | |
| 8504 | 258 char *chan, *topic, *msg, *nick, *tmp; |
| 6333 | 259 GaimConversation *convo; |
| 260 | |
| 261 if (!strcmp(name, "topic")) { | |
| 262 chan = args[0]; | |
| 8529 | 263 topic = irc_mirc2txt (args[1]); |
| 6333 | 264 } else { |
| 265 chan = args[1]; | |
| 8529 | 266 topic = irc_mirc2txt (args[2]); |
| 6333 | 267 } |
| 268 | |
| 269 convo = gaim_find_conversation_with_account(chan, irc->account); | |
| 270 if (!convo) { | |
| 271 gaim_debug(GAIM_DEBUG_ERROR, "irc", "Got a topic for %s, which doesn't exist\n", chan); | |
| 272 } | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
273 gaim_conv_chat_set_topic(GAIM_CONV_CHAT(convo), NULL, topic); |
| 6333 | 274 /* If this is an interactive update, print it out */ |
| 8504 | 275 tmp = gaim_escape_html(topic); |
| 6333 | 276 if (!strcmp(name, "topic")) { |
| 277 nick = irc_mask_nick(from); | |
| 8504 | 278 msg = g_strdup_printf(_("%s has changed the topic to: %s"), nick, tmp); |
| 6333 | 279 g_free(nick); |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
280 gaim_conv_chat_write(GAIM_CONV_CHAT(convo), from, msg, GAIM_MESSAGE_SYSTEM, time(NULL)); |
| 6333 | 281 g_free(msg); |
| 282 } else { | |
| 8504 | 283 msg = g_strdup_printf(_("The topic for %s is: %s"), chan, tmp); |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
284 gaim_conv_chat_write(GAIM_CONV_CHAT(convo), "", msg, GAIM_MESSAGE_SYSTEM, time(NULL)); |
| 6333 | 285 g_free(msg); |
| 286 } | |
| 8504 | 287 g_free(tmp); |
| 8529 | 288 g_free(topic); |
| 6333 | 289 } |
| 290 | |
| 291 void irc_msg_unknown(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 292 { | |
| 293 GaimConnection *gc = gaim_account_get_connection(irc->account); | |
| 294 char *buf; | |
| 295 | |
| 296 if (!args || !args[1] || !gc) | |
| 297 return; | |
| 298 | |
| 299 buf = g_strdup_printf(_("Unknown message '%s'"), args[1]); | |
| 300 gaim_notify_error(gc, _("Unknown message"), buf, _("Gaim has sent a message the IRC server did not understand.")); | |
| 301 g_free(buf); | |
| 302 } | |
| 303 | |
| 304 void irc_msg_names(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 305 { | |
| 306 char *names, *cur, *end, *tmp, *msg; | |
| 307 GaimConversation *convo; | |
| 308 | |
| 309 if (!strcmp(name, "366")) { | |
| 310 convo = gaim_find_conversation_with_account(irc->nameconv ? irc->nameconv : args[1], irc->account); | |
| 311 if (!convo) { | |
| 312 gaim_debug(GAIM_DEBUG_ERROR, "irc", "Got a NAMES list for %s, which doesn't exist\n", args[2]); | |
| 313 g_string_free(irc->names, TRUE); | |
| 314 irc->names = NULL; | |
| 315 g_free(irc->nameconv); | |
| 316 irc->nameconv = NULL; | |
| 317 return; | |
| 318 } | |
| 319 | |
| 320 names = cur = g_string_free(irc->names, FALSE); | |
| 321 irc->names = NULL; | |
| 322 if (irc->nameconv) { | |
| 323 msg = g_strdup_printf("Users on %s: %s", args[1], names); | |
| 324 if (gaim_conversation_get_type(convo) == GAIM_CONV_CHAT) | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
325 gaim_conv_chat_write(GAIM_CONV_CHAT(convo), "", msg, GAIM_MESSAGE_SYSTEM|GAIM_MESSAGE_NO_LOG, time(NULL)); |
| 6333 | 326 else |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
327 gaim_conv_im_write(GAIM_CONV_IM(convo), "", msg, GAIM_MESSAGE_SYSTEM|GAIM_MESSAGE_NO_LOG, time(NULL)); |
| 6333 | 328 g_free(msg); |
| 329 g_free(irc->nameconv); | |
| 330 irc->nameconv = NULL; | |
| 331 } else { | |
|
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6357
diff
changeset
|
332 GList *users = NULL; |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6357
diff
changeset
|
333 |
| 6333 | 334 while (*cur) { |
| 335 end = strchr(cur, ' '); | |
| 336 if (!end) | |
| 337 end = cur + strlen(cur); | |
| 338 if (*cur == '@' || *cur == '%' || *cur == '+') | |
| 339 cur++; | |
| 340 tmp = g_strndup(cur, end - cur); | |
|
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6357
diff
changeset
|
341 users = g_list_append(users, tmp); |
| 6333 | 342 cur = end; |
| 343 if (*cur) | |
| 344 cur++; | |
| 345 } | |
|
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6357
diff
changeset
|
346 |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6357
diff
changeset
|
347 if (users != NULL) { |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6357
diff
changeset
|
348 GList *l; |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6357
diff
changeset
|
349 |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
350 gaim_conv_chat_add_users(GAIM_CONV_CHAT(convo), users); |
|
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6357
diff
changeset
|
351 |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6357
diff
changeset
|
352 for (l = users; l != NULL; l = l->next) |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6357
diff
changeset
|
353 g_free(l->data); |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6357
diff
changeset
|
354 |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6357
diff
changeset
|
355 g_list_free(users); |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6357
diff
changeset
|
356 } |
| 6333 | 357 } |
| 358 g_free(names); | |
| 359 } else { | |
| 360 if (!irc->names) | |
| 361 irc->names = g_string_new(""); | |
| 362 | |
| 363 irc->names = g_string_append(irc->names, args[3]); | |
| 364 } | |
| 365 } | |
| 366 | |
| 367 void irc_msg_motd(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 368 { | |
| 369 GaimConnection *gc; | |
| 370 if (!strcmp(name, "375")) { | |
| 371 gc = gaim_account_get_connection(irc->account); | |
| 372 if (gc) | |
| 373 gaim_connection_set_display_name(gc, args[0]); | |
| 374 } | |
| 375 | |
| 376 if (!irc->motd) | |
| 377 irc->motd = g_string_new(""); | |
| 378 | |
| 379 g_string_append_printf(irc->motd, "%s<br>", args[1]); | |
| 380 } | |
| 381 | |
| 382 void irc_msg_endmotd(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 383 { | |
| 384 GaimConnection *gc; | |
| 385 | |
| 386 gc = gaim_account_get_connection(irc->account); | |
| 387 if (!gc) | |
| 388 return; | |
| 389 | |
| 390 gaim_connection_set_state(gc, GAIM_CONNECTED); | |
| 9057 | 391 serv_finish_login (gc); |
| 6333 | 392 |
| 393 irc_blist_timeout(irc); | |
| 8872 | 394 if (!irc->timer) |
| 395 irc->timer = gaim_timeout_add(45000, (GSourceFunc)irc_blist_timeout, (gpointer)irc); | |
| 6333 | 396 } |
| 397 | |
| 7877 | 398 void irc_msg_nochan(struct irc_conn *irc, const char *name, const char *from, char **args) |
| 399 { | |
| 400 GaimConnection *gc = gaim_account_get_connection(irc->account); | |
| 401 | |
| 402 if (gc == NULL || args == NULL || args[1] == NULL) | |
| 403 return; | |
| 404 | |
| 405 gaim_notify_error(gc, NULL, _("No such channel"), args[1]); | |
| 406 } | |
| 407 | |
| 6333 | 408 void irc_msg_nonick(struct irc_conn *irc, const char *name, const char *from, char **args) |
| 409 { | |
| 410 GaimConnection *gc; | |
| 411 GaimConversation *convo; | |
| 412 | |
| 413 convo = gaim_find_conversation_with_account(args[1], irc->account); | |
| 414 if (convo) { | |
| 415 if (gaim_conversation_get_type(convo) == GAIM_CONV_CHAT) /* does this happen? */ | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
416 gaim_conv_chat_write(GAIM_CONV_CHAT(convo), args[1], _("no such channel"), |
| 6621 | 417 GAIM_MESSAGE_SYSTEM|GAIM_MESSAGE_NO_LOG, time(NULL)); |
| 6333 | 418 else |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
419 gaim_conv_im_write(GAIM_CONV_IM(convo), args[1], _("User is not logged in"), |
| 6621 | 420 GAIM_MESSAGE_SYSTEM|GAIM_MESSAGE_NO_LOG, time(NULL)); |
| 6333 | 421 } else { |
| 422 if ((gc = gaim_account_get_connection(irc->account)) == NULL) | |
| 423 return; | |
| 424 gaim_notify_error(gc, NULL, _("No such nick or channel"), args[1]); | |
| 425 } | |
| 426 | |
| 427 if (irc->whois.nick && !gaim_utf8_strcasecmp(irc->whois.nick, args[1])) { | |
| 428 g_free(irc->whois.nick); | |
| 429 irc->whois.nick = NULL; | |
| 430 } | |
| 431 } | |
| 432 | |
| 433 void irc_msg_nosend(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 434 { | |
| 435 GaimConnection *gc; | |
| 436 GaimConversation *convo; | |
| 437 | |
| 438 convo = gaim_find_conversation_with_account(args[1], irc->account); | |
| 439 if (convo) { | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
440 gaim_conv_chat_write(GAIM_CONV_CHAT(convo), args[1], args[2], GAIM_MESSAGE_SYSTEM|GAIM_MESSAGE_NO_LOG, time(NULL)); |
| 6333 | 441 } else { |
| 442 if ((gc = gaim_account_get_connection(irc->account)) == NULL) | |
| 443 return; | |
| 444 gaim_notify_error(gc, NULL, _("Could not send"), args[2]); | |
| 445 } | |
| 446 } | |
| 447 | |
| 448 void irc_msg_notinchan(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 449 { | |
| 450 GaimConversation *convo = gaim_find_conversation_with_account(args[1], irc->account); | |
| 451 | |
| 452 gaim_debug(GAIM_DEBUG_INFO, "irc", "We're apparently not in %s, but tried to use it\n", args[1]); | |
| 453 if (convo) { | |
| 454 /*g_slist_remove(irc->gc->buddy_chats, convo); | |
| 455 gaim_conversation_set_account(convo, NULL);*/ | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
456 gaim_conv_chat_write(GAIM_CONV_CHAT(convo), args[1], args[2], GAIM_MESSAGE_SYSTEM|GAIM_MESSAGE_NO_LOG, time(NULL)); |
| 6333 | 457 } |
| 458 } | |
| 459 | |
| 460 void irc_msg_notop(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 461 { | |
| 462 GaimConversation *convo; | |
| 463 | |
| 464 if (!args || !args[1] || !args[2]) | |
| 465 return; | |
| 466 | |
| 467 convo = gaim_find_conversation_with_account(args[1], irc->account); | |
| 468 if (!convo) | |
| 469 return; | |
| 470 | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
471 gaim_conv_chat_write(GAIM_CONV_CHAT(convo), "", args[2], GAIM_MESSAGE_SYSTEM, time(NULL)); |
| 6333 | 472 } |
| 473 | |
| 474 void irc_msg_invite(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 475 { | |
| 476 GaimConnection *gc = gaim_account_get_connection(irc->account); | |
| 477 GHashTable *components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); | |
| 478 char *nick = irc_mask_nick(from); | |
| 479 | |
| 480 if (!args || !args[1] || !gc) { | |
| 481 g_free(nick); | |
| 482 g_hash_table_destroy(components); | |
| 483 return; | |
| 484 } | |
| 485 | |
| 486 g_hash_table_insert(components, strdup("channel"), strdup(args[1])); | |
| 487 | |
| 488 serv_got_chat_invite(gc, args[1], nick, NULL, components); | |
| 489 g_free(nick); | |
| 490 } | |
| 491 | |
| 492 void irc_msg_inviteonly(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 493 { | |
| 494 GaimConnection *gc = gaim_account_get_connection(irc->account); | |
| 495 char *buf; | |
| 496 | |
| 497 if (!args || !args[1] || !gc) | |
| 498 return; | |
| 499 | |
| 500 buf = g_strdup_printf(_("Joining %s requires an invitation."), args[1]); | |
| 501 gaim_notify_error(gc, _("Invitation only"), _("Invitation only"), buf); | |
| 502 g_free(buf); | |
| 503 } | |
| 504 | |
| 505 void irc_msg_ison(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 506 { | |
| 507 char **nicks; | |
| 508 struct irc_buddy *ib; | |
| 509 int i; | |
| 510 | |
| 511 if (!args || !args[1]) | |
| 512 return; | |
| 513 | |
| 514 nicks = g_strsplit(args[1], " ", -1); | |
| 515 | |
| 516 for (i = 0; nicks[i]; i++) { | |
| 517 if ((ib = g_hash_table_lookup(irc->buddies, (gconstpointer)nicks[i])) == NULL) { | |
| 518 continue; | |
| 519 } | |
| 520 ib->flag = TRUE; | |
| 521 } | |
| 522 | |
| 6350 | 523 g_strfreev(nicks); |
| 524 | |
| 6333 | 525 g_hash_table_foreach(irc->buddies, (GHFunc)irc_buddy_status, (gpointer)irc); |
| 526 } | |
| 527 | |
| 528 static void irc_buddy_status(char *name, struct irc_buddy *ib, struct irc_conn *irc) | |
| 529 { | |
| 530 GaimConnection *gc = gaim_account_get_connection(irc->account); | |
| 6695 | 531 GaimBuddy *buddy = gaim_find_buddy(irc->account, name); |
| 6333 | 532 |
| 533 if (!gc || !buddy) | |
| 534 return; | |
| 535 | |
| 536 if (ib->online && !ib->flag) { | |
| 537 serv_got_update(gc, buddy->name, 0, 0, 0, 0, 0); | |
| 538 ib->online = FALSE; | |
| 539 } | |
| 540 | |
| 541 if (!ib->online && ib->flag) { | |
| 542 serv_got_update(gc, buddy->name, 1, 0, 0, 0, 0); | |
| 543 ib->online = TRUE; | |
| 544 } | |
| 545 } | |
| 546 | |
| 547 void irc_msg_join(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 548 { | |
| 549 GaimConnection *gc = gaim_account_get_connection(irc->account); | |
| 550 GaimConversation *convo; | |
| 551 char *nick = irc_mask_nick(from), *userhost; | |
| 552 static int id = 1; | |
| 553 | |
| 554 if (!gc) { | |
| 555 g_free(nick); | |
| 556 return; | |
| 557 } | |
| 558 | |
| 559 if (!gaim_utf8_strcasecmp(nick, gaim_connection_get_display_name(gc))) { | |
| 560 /* We are joining a channel for the first time */ | |
| 561 serv_got_joined_chat(gc, id++, args[0]); | |
| 562 g_free(nick); | |
| 563 return; | |
| 564 } | |
| 565 | |
| 566 convo = gaim_find_conversation_with_account(args[0], irc->account); | |
| 567 if (convo == NULL) { | |
| 568 gaim_debug(GAIM_DEBUG_ERROR, "irc", "JOIN for %s failed\n", args[0]); | |
| 569 g_free(nick); | |
| 570 return; | |
| 571 } | |
| 572 | |
| 573 userhost = irc_mask_userhost(from); | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
574 gaim_conv_chat_add_user(GAIM_CONV_CHAT(convo), nick, userhost); |
| 6333 | 575 g_free(userhost); |
| 576 g_free(nick); | |
| 577 } | |
| 578 | |
| 579 void irc_msg_kick(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 580 { | |
| 581 GaimConnection *gc = gaim_account_get_connection(irc->account); | |
| 582 GaimConversation *convo = gaim_find_conversation_with_account(args[0], irc->account); | |
| 583 char *nick = irc_mask_nick(from), *buf; | |
| 584 | |
| 585 if (!gc) { | |
| 586 g_free(nick); | |
| 587 return; | |
| 588 } | |
| 589 | |
| 590 if (!convo) { | |
| 591 gaim_debug(GAIM_DEBUG_ERROR, "irc", "Recieved a KICK for unknown channel %s\n", args[0]); | |
| 592 g_free(nick); | |
| 593 return; | |
| 594 } | |
| 595 | |
| 596 if (!gaim_utf8_strcasecmp(gaim_connection_get_display_name(gc), args[1])) { | |
| 597 buf = g_strdup_printf(_("You have been kicked by %s: (%s)"), nick, args[2]); | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
598 gaim_conv_chat_write(GAIM_CONV_CHAT(convo), args[0], buf, GAIM_MESSAGE_SYSTEM, time(NULL)); |
| 6333 | 599 g_free(buf); |
|
8256
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8186
diff
changeset
|
600 serv_got_chat_left(gc, gaim_conv_chat_get_id(GAIM_CONV_CHAT(convo))); |
| 6333 | 601 } else { |
| 602 buf = g_strdup_printf(_("Kicked by %s (%s)"), nick, args[2]); | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
603 gaim_conv_chat_remove_user(GAIM_CONV_CHAT(convo), args[1], buf); |
| 6333 | 604 g_free(buf); |
| 605 } | |
| 606 | |
| 607 g_free(nick); | |
| 608 return; | |
| 609 } | |
| 610 | |
| 611 void irc_msg_mode(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 612 { | |
| 613 GaimConversation *convo; | |
| 614 char *nick = irc_mask_nick(from), *buf; | |
| 615 | |
| 616 if (*args[0] == '#' || *args[0] == '&') { /* Channel */ | |
| 617 convo = gaim_find_conversation_with_account(args[0], irc->account); | |
| 618 if (!convo) { | |
| 619 gaim_debug(GAIM_DEBUG_ERROR, "irc", "MODE received for %s, which we are not in\n", args[0]); | |
| 620 g_free(nick); | |
| 621 return; | |
| 622 } | |
| 623 buf = g_strdup_printf(_("mode (%s %s) by %s"), args[1], args[2] ? args[2] : "", nick); | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
624 gaim_conv_chat_write(GAIM_CONV_CHAT(convo), args[0], buf, GAIM_MESSAGE_SYSTEM|GAIM_MESSAGE_NO_LOG, time(NULL)); |
| 6333 | 625 g_free(buf); |
| 626 } else { /* User */ | |
| 627 } | |
| 628 g_free(nick); | |
| 629 } | |
| 630 | |
| 631 void irc_msg_nick(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 632 { | |
| 633 GaimConnection *gc = gaim_account_get_connection(irc->account); | |
| 634 GSList *chats; | |
| 635 char *nick = irc_mask_nick(from); | |
| 636 | |
| 637 if (!gc) { | |
| 638 g_free(nick); | |
| 639 return; | |
| 640 } | |
| 641 chats = gc->buddy_chats; | |
| 642 | |
| 643 if (!gaim_utf8_strcasecmp(nick, gaim_connection_get_display_name(gc))) { | |
| 644 gaim_connection_set_display_name(gc, args[0]); | |
| 645 } | |
| 646 | |
| 647 while (chats) { | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
648 GaimConvChat *chat = GAIM_CONV_CHAT(chats->data); |
|
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
649 GList *users = gaim_conv_chat_get_users(chat); |
| 6333 | 650 |
| 651 while (users) { | |
| 652 char *user = users->data; | |
| 653 | |
| 654 if (!strcmp(nick, user)) { | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
655 gaim_conv_chat_rename_user(chat, user, args[0]); |
|
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
656 users = gaim_conv_chat_get_users(chat); |
| 6333 | 657 break; |
| 658 } | |
| 659 users = users->next; | |
| 660 } | |
| 661 chats = chats->next; | |
| 662 } | |
| 663 g_free(nick); | |
| 664 } | |
| 665 | |
| 666 void irc_msg_nickused(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 667 { | |
| 668 char *newnick, *buf, *end; | |
| 669 | |
| 670 if (!args || !args[1]) | |
| 671 return; | |
| 672 | |
| 673 newnick = strdup(args[1]); | |
| 674 end = newnick + strlen(newnick) - 1; | |
| 675 /* try three fallbacks */ | |
| 676 if (*end == 2) *end = '3'; | |
| 677 else if (*end == 1) *end = '2'; | |
| 678 else *end = '1'; | |
| 679 | |
| 680 buf = irc_format(irc, "vn", "NICK", newnick); | |
| 681 irc_send(irc, buf); | |
| 682 g_free(buf); | |
| 683 } | |
| 684 | |
| 685 void irc_msg_notice(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 686 { | |
| 687 char *newargs[2]; | |
| 688 | |
| 689 newargs[0] = " notice "; /* The spaces are magic, leave 'em in! */ | |
| 690 newargs[1] = args[1]; | |
| 691 irc_msg_privmsg(irc, name, from, newargs); | |
| 692 } | |
| 693 | |
| 6718 | 694 void irc_msg_nochangenick(struct irc_conn *irc, const char *name, const char *from, char **args) |
| 695 { | |
| 696 GaimConnection *gc = gaim_account_get_connection(irc->account); | |
| 697 char *msg; | |
| 698 | |
| 6753 | 699 if (!args || !args[2] || !gc) |
| 6718 | 700 return; |
| 701 | |
| 6753 | 702 msg = g_strdup_printf(_("Could not change nick")); |
| 6718 | 703 gaim_notify_error(gc, _("Cannot change nick"), msg, args[2]); |
| 704 g_free(msg); | |
| 705 } | |
| 706 | |
| 6333 | 707 void irc_msg_part(struct irc_conn *irc, const char *name, const char *from, char **args) |
| 708 { | |
| 709 GaimConnection *gc = gaim_account_get_connection(irc->account); | |
| 710 GaimConversation *convo; | |
| 711 char *nick, *msg; | |
| 712 | |
| 8186 | 713 if (!args || !args[0] || !gc) |
| 6333 | 714 return; |
| 715 | |
| 716 convo = gaim_find_conversation_with_account(args[0], irc->account); | |
| 717 if (!convo) { | |
| 718 gaim_debug(GAIM_DEBUG_INFO, "irc", "Got a PART on %s, which doesn't exist -- probably closed\n", args[0]); | |
| 719 return; | |
| 720 } | |
| 721 | |
| 722 nick = irc_mask_nick(from); | |
| 723 if (!gaim_utf8_strcasecmp(nick, gaim_connection_get_display_name(gc))) { | |
| 8186 | 724 msg = g_strdup_printf(_("You have parted the channel%s%s"), |
| 725 (args[1] && *args[1]) ? ": " : "", args[1]); | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
726 gaim_conv_chat_write(GAIM_CONV_CHAT(convo), args[0], msg, GAIM_MESSAGE_SYSTEM, time(NULL)); |
| 6333 | 727 g_free(msg); |
|
8256
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8186
diff
changeset
|
728 serv_got_chat_left(gc, gaim_conv_chat_get_id(GAIM_CONV_CHAT(convo))); |
| 6333 | 729 } else { |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
730 gaim_conv_chat_remove_user(GAIM_CONV_CHAT(convo), nick, args[1]); |
| 6333 | 731 } |
| 732 g_free(nick); | |
| 733 } | |
| 734 | |
| 735 void irc_msg_ping(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 736 { | |
| 737 char *buf; | |
| 738 if (!args || !args[0]) | |
| 739 return; | |
| 740 | |
| 741 buf = irc_format(irc, "v:", "PONG", args[0]); | |
| 742 irc_send(irc, buf); | |
| 743 g_free(buf); | |
| 744 } | |
| 745 | |
| 746 void irc_msg_pong(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 747 { | |
| 748 GaimConversation *convo; | |
| 749 GaimConnection *gc; | |
| 750 char **parts, *msg; | |
| 751 time_t oldstamp; | |
| 752 | |
| 753 if (!args || !args[1]) | |
| 754 return; | |
| 755 | |
| 756 parts = g_strsplit(args[1], " ", 2); | |
| 757 | |
| 758 if (!parts[0] || !parts[1]) { | |
| 759 g_strfreev(parts); | |
| 760 return; | |
| 761 } | |
| 762 | |
| 763 if (sscanf(parts[1], "%lu", &oldstamp) != 1) { | |
| 764 msg = g_strdup(_("Error: invalid PONG from server")); | |
| 765 } else { | |
| 6350 | 766 msg = g_strdup_printf(_("PING reply -- Lag: %lu seconds"), time(NULL) - oldstamp); |
| 6333 | 767 } |
| 768 | |
| 769 convo = gaim_find_conversation_with_account(parts[0], irc->account); | |
| 770 g_strfreev(parts); | |
| 771 if (convo) { | |
| 772 if (gaim_conversation_get_type (convo) == GAIM_CONV_CHAT) | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
773 gaim_conv_chat_write(GAIM_CONV_CHAT(convo), "PONG", msg, GAIM_MESSAGE_SYSTEM|GAIM_MESSAGE_NO_LOG, time(NULL)); |
| 6333 | 774 else |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
775 gaim_conv_im_write(GAIM_CONV_IM(convo), "PONG", msg, GAIM_MESSAGE_SYSTEM|GAIM_MESSAGE_NO_LOG, time(NULL)); |
| 6333 | 776 } else { |
| 777 gc = gaim_account_get_connection(irc->account); | |
| 778 if (!gc) { | |
| 779 g_free(msg); | |
| 780 return; | |
| 781 } | |
| 782 gaim_notify_info(gc, NULL, "PONG", msg); | |
| 783 } | |
| 784 g_free(msg); | |
| 785 } | |
| 786 | |
| 787 void irc_msg_privmsg(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 788 { | |
| 789 GaimConnection *gc = gaim_account_get_connection(irc->account); | |
| 790 GaimConversation *convo; | |
| 791 char *nick = irc_mask_nick(from), *tmp, *msg; | |
| 792 int notice = 0; | |
| 793 | |
| 794 if (!args || !args[0] || !args[1] || !gc) { | |
| 795 g_free(nick); | |
| 796 return; | |
| 797 } | |
| 798 | |
| 799 notice = !strcmp(args[0], " notice "); | |
| 800 tmp = irc_parse_ctcp(irc, nick, args[0], args[1], notice); | |
| 801 if (!tmp) { | |
| 802 g_free(nick); | |
| 803 return; | |
| 804 } | |
| 8163 | 805 |
| 806 msg = gaim_escape_html(tmp); | |
| 6333 | 807 g_free(tmp); |
| 8163 | 808 |
| 809 tmp = irc_mirc2html(msg); | |
| 810 g_free(msg); | |
| 811 msg = tmp; | |
| 6333 | 812 if (notice) { |
| 813 tmp = g_strdup_printf("(notice) %s", msg); | |
| 814 g_free(msg); | |
| 815 msg = tmp; | |
| 816 } | |
| 817 | |
| 818 if (!gaim_utf8_strcasecmp(args[0], gaim_connection_get_display_name(gc))) { | |
| 6982 | 819 serv_got_im(gc, nick, msg, 0, time(NULL)); |
| 6333 | 820 } else if (notice) { |
| 6982 | 821 serv_got_im(gc, nick, msg, 0, time(NULL)); |
| 6333 | 822 } else { |
| 823 convo = gaim_find_conversation_with_account(args[0], irc->account); | |
| 824 if (convo) | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
825 serv_got_chat_in(gc, gaim_conv_chat_get_id(GAIM_CONV_CHAT(convo)), nick, 0, msg, time(NULL)); |
| 6333 | 826 else |
| 827 gaim_debug(GAIM_DEBUG_ERROR, "irc", "Got a PRIVMSG on %s, which does not exist\n", args[0]); | |
| 828 } | |
| 829 g_free(msg); | |
| 830 g_free(nick); | |
| 831 } | |
| 832 | |
| 6714 | 833 void irc_msg_regonly(struct irc_conn *irc, const char *name, const char *from, char **args) |
| 834 { | |
| 835 GaimConnection *gc = gaim_account_get_connection(irc->account); | |
| 836 char *msg; | |
| 837 | |
| 838 if (!args || !args[1] || !args[2] || !gc) | |
| 839 return; | |
| 840 | |
| 841 msg = g_strdup_printf(_("Cannot join %s:"), args[1]); | |
| 842 gaim_notify_error(gc, _("Cannot join channel"), msg, args[2]); | |
| 843 g_free(msg); | |
| 844 } | |
| 845 | |
| 6333 | 846 void irc_msg_quit(struct irc_conn *irc, const char *name, const char *from, char **args) |
| 847 { | |
| 848 GaimConnection *gc = gaim_account_get_connection(irc->account); | |
| 849 char *data[2]; | |
| 850 | |
| 851 if (!args || !args[0] || !gc) | |
| 852 return; | |
| 853 | |
| 854 data[0] = irc_mask_nick(from); | |
| 855 data[1] = args[0]; | |
| 856 /* XXX this should have an API, I shouldn't grab this directly */ | |
| 857 g_slist_foreach(gc->buddy_chats, (GFunc)irc_chat_remove_buddy, data); | |
| 858 g_free(data[0]); | |
| 859 | |
| 860 return; | |
| 861 } | |
| 862 | |
| 863 void irc_msg_wallops(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 864 { | |
| 865 GaimConnection *gc = gaim_account_get_connection(irc->account); | |
| 8965 | 866 char *nick, *msg, *wallop; |
| 6333 | 867 |
| 868 if (!args || !args[0] || !gc) | |
| 869 return; | |
| 870 | |
| 871 nick = irc_mask_nick(from); | |
| 872 msg = g_strdup_printf (_("Wallops from %s"), nick); | |
| 873 g_free(nick); | |
| 8965 | 874 wallop = g_markup_escape_text(args[0], strlen(args[0])); |
| 875 gaim_notify_info(gc, NULL, msg, wallop); | |
| 6333 | 876 g_free(msg); |
| 8965 | 877 g_free(wallop); |
| 6333 | 878 } |
| 879 | |
| 880 void irc_msg_ignore(struct irc_conn *irc, const char *name, const char *from, char **args) | |
| 881 { | |
| 882 return; | |
| 883 } |
