コード例 #1
0
 private void _joinedChannel(object sender, SlackChannel channel)
 {
     SendMessage(channel,
                 "Oi, eu sou o `" + BotUser.Name + "`." +
                 "Estou aqui para ajudar.\n" +
                 "Para obter a lista de comandos, digite: `<@" + BotId + "|" + BotUser.Name + "> ajuda`");
 }
コード例 #2
0
        public async Task <SlackMessage> SendMessageAsync(SlackChannel channel, SlackUser user, string text, params SlackAttachment[] attachments)
        {
            List <KeyValuePair <string, string> > parameters = new List <KeyValuePair <string, string> >();

            parameters.Add(new KeyValuePair <string, string>("channel", channel.Id));
            parameters.Add(new KeyValuePair <string, string>("text", text));
            parameters.Add(new KeyValuePair <string, string>("as_user", "true"));

            if (attachments.Length > 0)
            {
                parameters.Add(new KeyValuePair <string, string>("attachments", JArray.FromObject(attachments).ToString(Formatting.None)));
            }

            var result = await GetApiDataProperty <SlackMessage>(ApiCommands.Message, "message", new string[] { "user", "channel" }, parameters.ToArray());

            if (result == default(SlackMessage))
            {
                return(default(SlackMessage));
            }
            result.SetApi(this);
            result.Timestamp = DateTime.UtcNow;
            result.Channel   = channel;
            result.User      = user;
            return(result);
        }
コード例 #3
0
        public void Add(SlackChannel channel)
        {
            var room = new Room {
                Id = channel.Id, Name = channel.Name
            };

            _dictionary.AddOrUpdate(channel.Id, room, (k, v) => room);
        }
コード例 #4
0
        public async Task <SlackEphemeral> SendEphemeralAsync(SlackUser user, SlackChannel channel, string text, params SlackAttachment[] attachments)
        {
            var result = await GetApiData <SlackEphemeral>(ApiCommands.Ephemeral, null,
                                                           new KeyValuePair <string, string>("user", user.Id),
                                                           new KeyValuePair <string, string>("channel", channel.Id),
                                                           new KeyValuePair <string, string>("text", text));

            result.User    = user;
            result.Channel = channel;

            return(result);
        }
コード例 #5
0
        /// <summary>
        /// Send a file to the given channel
        /// </summary>
        public JObject SendFile(SlackChannel channel, string filePath)
        {
            JObject parameters = new JObject
            {
                { "channel", channel.Id },
                { "filetype", "text" },
                { "filename", filePath }
            };

            var retorno = SlackBotAPI.Call(SlackAPICalls.FilesUpload, parameters, filePath);

            return(retorno);
        }
コード例 #6
0
        /// <summary>
        /// Send a reaction to some message
        /// </summary>
        /// <param name="channel">Slack channel to send the message to</param>
        /// <param name="message">Message list to be sent. Messages can have slack's formatting</param>
        /// <param name="reactions">Array of current channel's emojis (without ":") to react</param>
        public void SendReaction(SlackChannel channel, SlackMessage message, params string[] reactions)
        {
            foreach (var reaction in reactions)
            {
                JObject parameters = new JObject
                {
                    { "channel", channel.Id },
                    { "name", reaction },
                    { "timestamp", message.TimeStamp }
                };

                SlackBotAPI.Call(SlackAPICalls.ReactionsAdd, parameters);
            }
        }
コード例 #7
0
        public async Task <IEnumerable <SlackMember> > GetChannelMembers(SlackChannel slackChannel)
        {
            var members   = (await GetAllTeamMembers()).ToDictionary(x => x.Id, z => z);
            var memberIds = await _crudChannelMemberService.ListChannelMemberIds(_clientSettings.Token, slackChannel.Id);

            var result = new List <SlackMember>(memberIds.Count());

            foreach (var memberId in memberIds)
            {
                result.Add(members[memberId]);
            }

            return(result);
        }
コード例 #8
0
        /// <summary>
        /// Sends each string in a list as a new slack message
        /// </summary>
        /// <param name="channel">Slack channel to send the message to</param>
        /// <param name="message">Message list to be sent. Messages can have slack's formatting</param>
        public bool SendMessage(SlackChannel channel, IEnumerable <string> messages)
        {
            var sucess = true;

            //Foreach item in the array
            foreach (var msg in messages)
            {
                //Send the message and if it didn't sent, sucess = false
                if (!SendMessage(channel, msg))
                {
                    sucess = false;
                }
            }

            return(sucess);
        }
コード例 #9
0
ファイル: BotTask.cs プロジェクト: pjc0247/Slacker2
        public static async Task Create(BotService bot, SlackChannel channel, string taskName, Func <Task> task)
        {
            var slack = bot.Slack;
            var msg   = await slack.SendMessage(channel.Id, $"{taskName}...");

            try
            {
                await Task.Run(task);

                await msg.Update($":ballot_box_with_check: {taskName} SUCCESS");
            }
            catch (Exception e)
            {
                await msg.Update($":ballot_box_with_check: {taskName} FAILURE");

                Console.WriteLine(e);
            }
        }
コード例 #10
0
        /// <summary>
        /// Sends a message to a given slack channel
        /// </summary>
        /// <param name="channel">Slack channel to send the message to</param>
        /// <param name="message">Message to be sent. It can have slack's formatting</param>
        public bool SendMessage(SlackChannel channel, string message)
        {
            JObject parameters = new JObject
            {
                { "channel", channel.Id },
                { "text", WebUtility.HtmlDecode(message).Replace('&', 'E') }
            };

            //Adds the current identity to the message
            parameters = Identity.AddIdentityParameters(parameters);

            var result = SlackBotAPI.Call(SlackAPICalls.ChatPostMessage, parameters);

            bool retorno;

            bool.TryParse(result["ok"].ToString(), out retorno);

            return(retorno);
        }
コード例 #11
0
        public async Task <SlackMessage> UpdateMessageAsync(SlackChannel channel, string ts, string text, params SlackAttachment[] attachments)
        {
            List <KeyValuePair <string, string> > parameters = new List <KeyValuePair <string, string> >();

            parameters.Add(new KeyValuePair <string, string>("ts", ts));
            parameters.Add(new KeyValuePair <string, string>("channel", channel.Id));
            parameters.Add(new KeyValuePair <string, string>("text", text));
            parameters.Add(new KeyValuePair <string, string>("as_user", "true"));

            if (attachments.Length > 0)
            {
                parameters.Add(new KeyValuePair <string, string>("attachments", JArray.FromObject(attachments).ToString(Formatting.None)));
            }

            var result = await GetApiData <SlackMessage>(ApiCommands.Update, null, parameters.ToArray());

            result.Channel = channel;
            return(result);
        }
コード例 #12
0
        /// <summary>
        /// Get a channel by giving its id
        /// </summary>
        /// <param name="id">A valid channel id</param>
        public static SlackChannel GetChannelFromId(string id)
        {
            var channelType = id[0].ToString().ToLower();

            SlackChannel channel = null;

            if (channelType == "c")
            {
                channel = GetChannels().FirstOrDefault(c => c.Id == id);
            }
            else if (channelType == "g")
            {
                channel = GetGroups().FirstOrDefault(c => c.Id == id);
            }
            else if (channelType == "d")
            {
                channel = GetIms().FirstOrDefault(c => c.Id == id);
            }

            return(channel);
        }
コード例 #13
0
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            slackChannel = await slackApi.GetSlackChannelWithName(token, channelName);

            if (slackChannel == null)
            {
                throw new Exception($"Unable to find channel with name: {channelName}");
            }

            var iteration = 1;

            while (iteration < 31)
            {
                var randomValue = random.Next(1, 4);

                var slackMessage = randomValue switch
                {
                    1 => await GetOrCreateMessageCacheEntry(":bug:"),
                    2 => await GetOrCreateMessageCacheEntry(":poop:"),
                    3 => await GetOrCreateMessageCacheEntry(":tada:")
                };

                var postTask = randomValue switch
                {
                    1 => slackApi.PostInThread(token, slackChannel.Id, slackMessage.ThreadId, $"`{iteration}`"),
                    2 => slackApi.PostInThread(token, slackChannel.Id, slackMessage.ThreadId, $"`{iteration}`"),
                    3 => slackApi.PostInThread(token, slackChannel.Id, slackMessage.ThreadId, $"`{iteration}`")
                };

                await postTask;

                iteration++;

                await Task.Delay(500);
            }
        }
コード例 #14
0
 public async Task <SlackMessage> SendMessageAsync(SlackChannel channel, string message, params SlackAttachment[] attachments)
 {
     return(await api.SendMessageAsync(channel, BotUser, message, attachments));
 }
コード例 #15
0
 public UserDataReceivedEventArgs(SlackUser user, SlackChannel channel, SlackTeam team)
 {
     User    = user;
     Channel = channel;
     Team    = team;
 }
コード例 #16
0
 protected Task <SlackMessage> SendActionMessageAsync(SlackChannel channel, string message, SlackInteractiveMessage messageData)
 {
     return(Slack.SendActionMessage(channel.Name, message, messageData));
 }
コード例 #17
0
 protected void SendActionMessage(SlackChannel channel, string message, SlackInteractiveMessage messageData)
 {
     SendActionMessageAsync(channel, message, messageData);
 }
コード例 #18
0
 protected void SendMessage(SlackChannel channel, string message)
 {
     SendMessageAsync(channel, message);
 }
コード例 #19
0
 protected Task <SlackMessage> SendMessageAsync(SlackChannel channel, string message)
 {
     return(Slack.SendMessage(channel.Name, message));
 }
コード例 #20
0
 protected void SendColoredMessage(SlackChannel channel, string message, string colorHex, string title, string description)
 {
     SendColoredMessageAsync(channel, message, colorHex, title, description);
 }
コード例 #21
0
 protected Task <SlackMessage> SendColoredMessageAsync(SlackChannel channel, string message, string colorHex, string title, string description)
 {
     return(Slack.SendColoredMessage(channel.Name, message, colorHex, title, description));
 }
コード例 #22
0
 /// <summary>
 /// Returns a list of users inside an specific channel
 /// </summary>
 public IEnumerable <SlackUser> GetUsersFromChannel(SlackChannel channel)
 {
     return(GetChannelFromId(channel.Id).Members.Select(GetUserFromId));
 }
コード例 #23
0
 protected Task <string> SendActionMessageAndWait(SlackChannel channel, string message, SlackInteractiveMessage messageData)
 {
     return(Slack.SendActionMessageAndWait(channel.Name, message, messageData));
 }
コード例 #24
0
 public async Task <SlackResponse> DeleteMessageAsync(SlackChannel channel, string ts)
 {
     return(await GetApiData <SlackResponse>(ApiCommands.Delete, null,
                                             new KeyValuePair <string, string>("channel", channel.Id),
                                             new KeyValuePair <string, string>("ts", ts)));
 }