Need your bot to use an emoji? Then you've come to the right place! Here are three examples of using emojis.
- Note
- If your bot isn't in the guild you want to use the custom emoji from, it won't work, giving you dpp::err_unknown_emoji.
First - Sending emojis. You have to use its mention, which depends on the type. If it's a default emoji, you use the corresponding character. So, for example, if you wanted to send a nerd emoji, you would use the nerd unicode character. Now, custom emoji. There are two types: static and animated. Their mentions are <:[name]:[id]>
and <a:[name]:[id]>
, where [name]
means the emoji name and [id]
is for its ID. When you send such mention, it automatically gets converted into your emoji. Here's an example of sending emojis:
dpp::emoji shocked(
"vahuyi", 1179366531856093214);
event.reply(dpp::unicode_emoji::nerd + shocked.get_mention() + mad.get_mention());
}
});
if (dpp::run_once<struct register_bot_commands>()) {
bot.global_command_create(
dpp::slashcommand(
"send-emojis",
"Send the emojis", bot.me.id));
}
});
return 0;
}
Now, our bot will send our epic emojis!
Second - Reacting to messages. Sometimes there's something so interesting in the chat that we want to react to it. While we see the emoji we react with, for bots, it's some plain text. There are different formats for different kinds of emoji when reacting too. For unicode, it's simply its character, like when sending. For custom ones it's either [name]:[id]
(if static) or a:[name]:[id]
(if animated). Let's show our bot's honest reactions!
dpp::emoji shocked(
"vahuyi", 1179366531856093214);
bot.message_add_reaction(event.msg.id, event.msg.channel_id, dpp::unicode_emoji::cut_of_meat);
bot.message_add_reaction(event.msg.id, event.msg.channel_id, shocked.format());
bot.message_add_reaction(event.msg.id, event.msg.channel_id, mad.format());
}
});
return 0;
}
Yay, our bot has emotions now!
Finally, select menus. These guys are covered here. They require emoji components (name, ID, animated state) to come separately. If the emoji you're using isn't animated, you don't have to specify that. If your emoji is unicode, it doesn't even have an ID, so you only put the character, since both animated state and ID are defaulted to none (false/0).
dpp::emoji walter(
"walter_black", 1179374919088361544);
dpp::message msg(event.command.channel_id, "Now.");
msg.add_component(
dpp::component().add_component(
dpp::component()
.set_type(dpp::cot_selectmenu)
.set_placeholder("Say my name.")
.add_select_option(dpp::select_option("Do what?", "Yeah, you do.", "I don't have a damn clue what you're talking about.").set_emoji(dpp::unicode_emoji::thinking))
.add_select_option(dpp::select_option("Heisenberg", "You're goddamn right!", "The one and only").set_emoji(walter.name, walter.id))
.add_select_option(dpp::select_option("I'm unsubscribing", "Wait what", "Pure cruelty").set_emoji(mad.name, mad.id, mad.is_animated()))
.set_id("myselectid")
)
);
event.reply(msg);
}
});
});
if (dpp::run_once<struct register_bot_commands>()) {
bot.global_command_create(
dpp::slashcommand(
"select",
"Send the select menu", bot.me.id));
}
});
return 0;
}
Yay, our context menu is now interesting!