private async Task <PostMessageResponse> PostMessage(BotMessage message) { var response = await _api.Chat.PostMessage(new Message { Channel = message.Hub != null ? await message.Hub.HubId(this).ConfigureAwait(false) : message.ReplyTo?.Hub?.Id, Text = message.Text, Attachments = message.Attachments, Blocks = message.Blocks, ThreadTs = await ReplyingInDifferentHub(message).ConfigureAwait(false) ? null : message.ReplyTo?.ThreadTs ?? (message.CreateThread ? message.ReplyTo?.Ts : null), ReplyBroadcast = message.ReplyBroadcast, Parse = message.Parse, LinkNames = message.LinkNames, UnfurlLinks = message.UnfurlLinks, UnfurlMedia = message.UnfurlMedia, AsUser = true }).ConfigureAwait(false); _sentMessages.OnNext(message); return(response); }
private async Task <PostMessageResponse> PostMessage(BotMessage message) { if (message.Ephemeral && message.ReplyTo?.User?.Id == null) { throw new ArgumentException("Can't send ephemeral message: missing reply-to user ID", nameof(message)); } var slackMessage = new Message { Channel = message.Conversation != null ? await message.Conversation.ConversationId(this).ConfigureAwait(false) : message.ReplyTo?.Conversation?.Id, Text = message.Text, Attachments = message.Attachments, Blocks = message.Blocks, ThreadTs = await ReplyingInDifferentHub(message).ConfigureAwait(false) ? null : message.ReplyTo?.ThreadTs ?? (message.CreateThread ? message.ReplyTo?.Ts : null), ReplyBroadcast = message.ReplyBroadcast, Parse = message.Parse, LinkNames = message.LinkNames, UnfurlLinks = message.UnfurlLinks, UnfurlMedia = message.UnfurlMedia, AsUser = true }; return(message.Ephemeral ? await _api.Chat.PostEphemeral(message.ReplyTo.User.Id, slackMessage, message.CancellationToken).ConfigureAwait(false) : await _api.Chat.PostMessage(slackMessage, message.CancellationToken).ConfigureAwait(false)); }
/// <summary> /// Send a message to Slack as the bot. /// </summary> public async Task Send(BotMessage message) { var sent = _sentMessages.FirstOrDefaultAsync(m => m == message).ToTask(); _outgoingMessages.OnNext(message); await sent.ConfigureAwait(false); }
public async Task ReplyWith(BotMessage message, bool createThread = false) { if (message == null) { throw new ArgumentNullException(nameof(message)); } message.ReplyTo = this; message.CreateThread = createThread; await _bot.Send(message).ConfigureAwait(false); }
/// <summary> /// Send a message to Slack as the bot. /// </summary> public async Task Send(BotMessage message, CancellationToken?cancellationToken = null) { var linkedTokenSource = CancellationTokenSource.CreateLinkedTokenSource( message.CancellationToken ?? CancellationToken.None, cancellationToken ?? CancellationToken.None); message.CancellationToken = linkedTokenSource.Token; var sent = _sentMessages.FirstOrDefaultAsync(m => m.Message == message) .SelectMany(m => m.Post) .ToTask(linkedTokenSource.Token); _outgoingMessages.OnNext(message); await sent.ConfigureAwait(false); }
private async Task <PostMessageResponse> PostMessage(BotMessage message) => await _api.Chat.PostMessage(new Message { Channel = message.Conversation != null ? await message.Conversation.ConversationId(this).ConfigureAwait(false) : message.ReplyTo?.Conversation?.Id, Text = message.Text, Attachments = message.Attachments, Blocks = message.Blocks, ThreadTs = await ReplyingInDifferentHub(message).ConfigureAwait(false) ? null : message.ReplyTo?.ThreadTs ?? (message.CreateThread ? message.ReplyTo?.Ts : null), ReplyBroadcast = message.ReplyBroadcast, Parse = message.Parse, LinkNames = message.LinkNames, UnfurlLinks = message.UnfurlLinks, UnfurlMedia = message.UnfurlMedia, AsUser = true }, message.CancellationToken).ConfigureAwait(false);
public void OnNext(BotMessage value) => _outgoingMessages.OnNext(value);
private async Task <bool> ReplyingInDifferentHub(BotMessage message) => message.Conversation != null && await message.Conversation.ConversationId(this).ConfigureAwait(false) != message.ReplyTo?.Conversation.Id;
private async Task <bool> ReplyingInDifferentHub(BotMessage message) { return(message.Hub != null && await message.Hub.HubId(this).ConfigureAwait(false) != message.ReplyTo?.Hub.Id); }