proposeEmojis function

Set<Emoji> proposeEmojis(
  1. String message, {
  2. int? number,
  3. Set<EmojiProposalLanguageCodes> languageCodes = const {EmojiProposalLanguageCodes.en},
})

proposes (hopefully) suitable Emoji reactions for a given message.

By providing languageCodes, you can specify the languages to analyze.

Implementation

Set<Emoji> proposeEmojis(
  String message, {
  int? number,
  Set<EmojiProposalLanguageCodes> languageCodes = const {
    EmojiProposalLanguageCodes.en
  },
}) {
  Set<Emoji> proposedEmojis = {};
  for (final language in languageCodes) {
    Set<Emoji> proposedBetterEmojis = {};
    Set<Emoji> proposedWorseEmojis = {};
    final analysis = Sentiment.analysis(
      message,
      emoji: true,
      languageCode: language.name,
    );
    if (analysis.words.bad.isNotEmpty || analysis.words.good.isNotEmpty) {
      final upperBound = analysis.score.ceil();
      proposedBetterEmojis.addAll(
        _filterEmojisByScore(upperBound),
      );
      if (analysis.score.floor() != analysis.score) {
        final lowerBound = analysis.score.ceil() - 1;
        proposedWorseEmojis.addAll(
          _filterEmojisByScore(lowerBound),
        );
        final share = analysis.score - analysis.score.floor();
        proposedEmojis.addAll(_mergeSetsByShare(number,
            share: share, a: proposedBetterEmojis, b: proposedWorseEmojis));
      } else {
        if (number != null) {
          int range = number;
          if (range > proposedBetterEmojis.length) {
            range = proposedBetterEmojis.length;
          }
          proposedEmojis
              .addAll(proposedBetterEmojis.toList().getRange(0, range));
        } else {
          proposedEmojis.addAll(proposedBetterEmojis);
        }
      }
    }
  }
  return proposedEmojis;
}