+
+/* 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);
+}