SILC_CLIENT_LCMD(msg, MSG, "MSG", 0, 3),
SILC_CLIENT_LCMD(away, AWAY, "AWAY", 0, 2),
SILC_CLIENT_LCMD(key, KEY, "KEY", 0, 7),
+ SILC_CLIENT_LCMD(me, ME, "ME", 0, 3),
{ NULL, 0, NULL, 0, 0 },
};
silc_print(client, "-> *%s* %s", cmd->argv[1], cmd->argv[2]);
/* Send the private message */
- silc_client_send_private_message(client, conn, client_entry,
+ silc_client_send_private_message(client, conn, client_entry, 0,
cmd->argv[2], cmd->argv_lens[2],
TRUE);
if (!strcasecmp(cmd->argv[3], "set")) {
command = 1;
- if (cmd->argc == 3) {
+ if (cmd->argc == 4) {
if (curr_key && type == 1 && client_entry) {
silc_client_del_private_message_key(client, conn, client_entry);
silc_client_add_private_message_key_ske(client, conn, client_entry,
}
}
- if (cmd->argc >= 4) {
+ if (cmd->argc >= 5) {
if (type == 1 && client_entry) {
/* Set private message key */
silc_client_del_private_message_key(client, conn, client_entry);
- if (cmd->argc >= 5)
+ if (cmd->argc >= 6)
silc_client_add_private_message_key(client, conn, client_entry,
cmd->argv[5], cmd->argv[4],
cmd->argv_lens[4],
goto out;
}
- if (cmd->argc >= 5)
- cipher = cmd->argv[5];
if (cmd->argc >= 6)
+ cipher = cmd->argv[5];
+ if (cmd->argc >= 7)
hmac = cmd->argv[6];
if (!silc_client_add_channel_private_key(client, conn, channel_entry,
unsigned int keys_count;
int number;
- if (cmd->argc == 3)
+ if (cmd->argc == 4)
silc_client_del_channel_private_keys(client, conn, channel_entry);
- if (cmd->argc > 3) {
+ if (cmd->argc > 4) {
number = atoi(cmd->argv[4]);
keys = silc_client_list_channel_private_keys(client, conn,
channel_entry,
if (nickname[0] == '*') {
silc_say(client, conn, "Private message keys");
silc_say(client, conn,
- " Client Cipher Key");
+ " Client Cipher Key");
for (k = 0; k < keys_count; k++) {
memset(buf, 0, sizeof(buf));
strncat(buf, " ", 2);
silc_say(client, conn, "Private message key",
client_entry->nickname);
silc_say(client, conn,
- " Client Cipher Key");
+ " Client Cipher Key");
for (k = 0; k < keys_count; k++) {
if (keys[k].client_entry != client_entry)
continue;
silc_free(server);
silc_client_command_free(cmd);
}
+
+/* Sends an action to the channel. Equals CTCP's ACTION (IRC's /ME)
+ command. */
+
+SILC_CLIENT_LCMD_FUNC(me)
+{
+ SilcClientCommandContext cmd = (SilcClientCommandContext)context;
+ SilcClientConnection conn = cmd->conn;
+ SilcClient client = cmd->client;
+ SilcChannelEntry channel_entry;
+ char *name;
+
+ if (!cmd->conn) {
+ silc_say(client, conn,
+ "You are not connected to a server, use /SERVER to connect");
+ goto out;
+ }
+
+ if (cmd->argc < 3) {
+ silc_say(client, conn, "Usage: /ME <channel> <action message>");
+ goto out;
+ }
+
+ if (cmd->argv[1][0] == '*') {
+ if (!conn->current_channel) {
+ cmd->client->ops->say(cmd->client, conn, "You are not on any channel");
+ goto out;
+ }
+ name = conn->current_channel->channel_name;
+ } else {
+ name = cmd->argv[1];
+ }
+
+ channel_entry = silc_client_get_channel(client, conn, name);
+ if (!channel_entry) {
+ silc_say(client, conn, "You are not on that channel");
+ goto out;
+ }
+
+ /* Send the action message */
+ silc_client_send_channel_message(client, conn, channel_entry, NULL,
+ SILC_MESSAGE_FLAG_ACTION,
+ cmd->argv[2], cmd->argv_lens[2], TRUE);
+
+ silc_print(client, "* %s %s", conn->nickname, cmd->argv[2]);
+
+ out:
+ silc_client_command_free(cmd);
+}