summaryrefslogtreecommitdiff
path: root/src/bridge
diff options
context:
space:
mode:
authorFlorent Le Coz <louiz@louiz.org>2013-11-10 05:41:22 +0100
committerFlorent Le Coz <louiz@louiz.org>2013-11-10 05:41:22 +0100
commit7ba2d0fb45e7466e6fb38002bf1866d1f5e39c28 (patch)
tree2abd4545cf6ddc408b968cbd904efe7751ffebd3 /src/bridge
parenta992e281c4a8eb0542abf8475fcd62f297527447 (diff)
downloadbiboumi-7ba2d0fb45e7466e6fb38002bf1866d1f5e39c28.tar.gz
biboumi-7ba2d0fb45e7466e6fb38002bf1866d1f5e39c28.tar.bz2
biboumi-7ba2d0fb45e7466e6fb38002bf1866d1f5e39c28.tar.xz
biboumi-7ba2d0fb45e7466e6fb38002bf1866d1f5e39c28.zip
Handle the ACTION (/me) IRC command, both ways
Diffstat (limited to 'src/bridge')
-rw-r--r--src/bridge/bridge.cpp20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/bridge/bridge.cpp b/src/bridge/bridge.cpp
index 9dbea2f..89a6231 100644
--- a/src/bridge/bridge.cpp
+++ b/src/bridge/bridge.cpp
@@ -4,9 +4,11 @@
#include <network/poller.hpp>
#include <utils/encoding.hpp>
-
#include <iostream>
+static const char* action_prefix = "\01ACTION ";
+static const size_t action_prefix_len = 8;
+
Bridge::Bridge(const std::string& user_jid, XmppComponent* xmpp, Poller* poller):
user_jid(user_jid),
xmpp(xmpp),
@@ -76,7 +78,10 @@ void Bridge::send_channel_message(const Iid& iid, const std::string& body)
std::cout << "Cannot send message: no client exist for server " << iid.server << std::endl;
return;
}
- irc->send_channel_message(iid.chan, body);
+ if (body.substr(0, 4) == "/me ")
+ irc->send_channel_message(iid.chan, action_prefix + body.substr(4) + "\01");
+ else
+ irc->send_channel_message(iid.chan, body);
// We do not need to convert body to utf-8: it comes from our XMPP server,
// so it's ok to send it back
this->xmpp->send_muc_message(iid.chan + "%" + iid.server, irc->get_own_nick(), body, this->user_jid);
@@ -91,7 +96,16 @@ void Bridge::leave_irc_channel(Iid&& iid, std::string&& status_message)
void Bridge::send_muc_message(const Iid& iid, const std::string& nick, const std::string& body)
{
- this->xmpp->send_muc_message(iid.chan + "%" + iid.server, nick, this->sanitize_for_xmpp(body), this->user_jid);
+ const std::string& utf8_body = this->sanitize_for_xmpp(body);
+ if (utf8_body.substr(0, action_prefix_len) == action_prefix)
+ { // Special case for ACTION (/me) messages:
+ // "\01ACTION goes out\01" == "/me goes out"
+ this->xmpp->send_muc_message(iid.chan + "%" + iid.server, nick,
+ std::string("/me ") + utf8_body.substr(action_prefix_len, utf8_body.size() - action_prefix_len - 1),
+ this->user_jid);
+ }
+ else
+ this->xmpp->send_muc_message(iid.chan + "%" + iid.server, nick, utf8_body, this->user_jid);
}
void Bridge::send_muc_leave(Iid&& iid, std::string&& nick, std::string&& message, const bool self)