コード例 #1
0
            public async Task AddBinding(CommandContext ctx, [Description("URL of the message.")] string url,
                                         [Description("Emoji to react with.")] DiscordEmoji emoji,
                                         [Description("Roles which will be toggled after reaction.")]
                                         params DiscordRole[] roles)
            {
                DiscordMessage?message = await DiscordHelper.FindMessageFromLink(ctx.Guild, url);

                if (message == null)
                {
                    throw new ArgumentOutOfRangeException($"Couldn't find message with link: {url}");
                }

                ulong channelId = message.ChannelId;
                ulong messageId = message.Id;


                await _roleBindingsService.AddBindingsAsync(channelId, messageId, emoji.Name,
                                                            roles.Select(r => r.Id).ToHashSet());

                try
                {
                    await message.CreateReactionAsync(emoji);

                    DiscordEmoji thumbsUp = DiscordEmoji.FromName(ctx.Client, ":+1:");
                    await ctx.Message.CreateReactionAsync(thumbsUp);
                }
                catch (Exception e)
                {
                    _logger.LogError(e, "Couldn't add reaction for emoji: {EmojiName} on {Url}",
                                     emoji.Name, url);
                    DiscordEmoji thumbsUp = DiscordEmoji.FromName(ctx.Client, ":-1:");
                    await ctx.Message.CreateReactionAsync(thumbsUp);
                }
            }