Example #1
0
    public async Task InitReactionsAsync(CommandContext context, DiscordMessage message)
    {
        RoleMessage tracked = await _service.GetTrackedMessageAsync(message);

        foreach (string reaction in tracked.Roles.Keys)
        {
            if (!DiscordEmoji.TryFromUnicode(context.Client, reaction, out DiscordEmoji emoji))
            {
                DiscordEmoji.TryFromName(context.Client, $":{reaction}:", out emoji);
            }

            await message.CreateReactionAsync(emoji);
        }

        await message.RespondAsync("Reactions initialized.");
    }
Example #2
0
        public ReactionMessage ToReactionMessage()
        {
            if (!_client.Guilds.TryGetValue(GuildId, out DiscordGuild guild))
            {
                Console.WriteLine("Could not get the guild of this message, perhaps the bot have been removed from it? (Skipping ReactionMessage)");
                return(null);
            }

            if (!guild.Channels.TryGetValue(ChannelId, out DiscordChannel channel))
            {
                Console.WriteLine("Could not get the channel of this message, perhaps the bot have not access to it anymore? (Skipping ReactionMessage)");
                return(null);
            }

            DiscordMessage message;

            try
            {
                message = channel.GetMessageAsync(MessageId).Result;
            }
            catch (Exception e)
            {
                Console.WriteLine("Could not get the channel of this message, perhaps it has been removed? (Skipping ReactionMessage)");
                Console.WriteLine(e);
                return(null);
            }

            Dictionary <DiscordEmoji, DiscordRole> reactionRules = new Dictionary <DiscordEmoji, DiscordRole>();

            foreach (SerializedRule rule in Rules)
            {
                DiscordEmoji emoji;

                if (rule.IsGuildEmoji)
                {
                    ulong id = ulong.Parse(rule.EmojiNameOrId);

                    if (!DiscordEmoji.TryFromGuildEmote(_client, id, out emoji))
                    {
                        GuildEventLogger.Instance.LogWarning(guild, $"Could not load emoji {rule.EmojiNameOrId}. Has it been removed or renamed? (Skipping this rule)");
                        continue;
                    }
                }
                else
                {
                    if (!DiscordEmoji.TryFromName(_client, rule.EmojiNameOrId, out emoji))
                    {
                        GuildEventLogger.Instance.LogWarning(guild, $"Could not load emoji {rule.EmojiNameOrId}. Has it been removed or renamed? (Skipping this rule)");
                        continue;
                    }
                }


                if (!guild.Roles.TryGetValue(rule.RoleId, out DiscordRole role))
                {
                    GuildEventLogger.Instance.LogWarning(guild, $"Could not load role ID {rule.RoleId}. Has it been removed? (Skipping this rule)");
                    continue;
                }

                reactionRules.Add(emoji, role);
            }

            return(new ReactionMessage(message, reactionRules));
        }