The issue I'm trying to solve is this: Say something as character A Say something as character A Say something as character B Result: Looks great! now, let's add a very simple API command: on('chat:message', function(msg) { if(msg.type == 'api' && msg.content.indexOf('!attack') == 0) { sendChat(msg.who, "Comment."); } }); Then: Say something as character A !attack as character A !attack as character B Result: Cacta's icon doesn't appear, and the system generally doesn't seem to acknowledge that as being a message sent by Cacta. Even worse, in the chat archive, it looks like this: Not even Cacta's name shows up! It just looks like three messages by Quinn. Looking at logged msg objects, I notice that they have a "rolledByCharacterId" property, which I think is what isn't being set by SendChat. Is there a workaround for this, so that API messages aren't getting incorrectly attributed to the wrong person? It even happens if different players do the commands, which can make the chat very confusing, both during play and in the archive.