Skip to content

Commit fd62ab9

Browse files
authored
add support for emoji_changed event (#16)
https://api.slack.com/events/emoji_changed
1 parent dc2ac75 commit fd62ab9

File tree

6 files changed

+70
-0
lines changed

6 files changed

+70
-0
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
using Slackbot.Net.Endpoints.Models.Events;
2+
3+
namespace Slackbot.Net.Endpoints.Abstractions;
4+
5+
public interface IHandleEmojiChanged
6+
{
7+
Task<EventHandledResponse> Handle(EventMetaData eventMetadata, EmojiChangedEvent memberjoined);
8+
}

source/src/Slackbot.Net.Endpoints/EventTypes.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ public static class EventTypes
88
public const string MemberJoinedChannel = "member_joined_channel";
99
public const string AppHomeOpened = "app_home_opened";
1010
public const string TeamJoin = "team_join";
11+
public const string EmojiChanged = "emoji_changed";
1112
}

source/src/Slackbot.Net.Endpoints/Hosting/IAppBuilderExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public static IApplicationBuilder UseSlackbot(this IApplicationBuilder app, bool
2020
app.MapWhen(AppHomeOpenedEvents.ShouldRun, b => b.UseMiddleware<AppHomeOpenedEvents>());
2121
app.MapWhen(InteractiveEvents.ShouldRun, b => b.UseMiddleware<InteractiveEvents>());
2222
app.MapWhen(TeamJoinEvents.ShouldRun, b => b.UseMiddleware<TeamJoinEvents>());
23+
app.MapWhen(EmojiChangedEvents.ShouldRun, b => b.UseMiddleware<EmojiChangedEvents>());
2324

2425
return app;
2526
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
using Microsoft.AspNetCore.Http;
2+
using Microsoft.Extensions.Logging;
3+
using Slackbot.Net.Endpoints.Abstractions;
4+
using Slackbot.Net.Endpoints.Models.Events;
5+
6+
namespace Slackbot.Net.Endpoints.Middlewares;
7+
8+
public class EmojiChangedEvents(
9+
ILogger<EmojiChangedEvents> logger,
10+
IEnumerable<IHandleEmojiChanged> responseHandlers
11+
)
12+
{
13+
public async Task Invoke(HttpContext context)
14+
{
15+
var emojiChanged = (EmojiChangedEvent)context.Items[HttpItemKeys.SlackEventKey];
16+
var metadata = (EventMetaData)context.Items[HttpItemKeys.EventMetadataKey];
17+
var handler = responseHandlers.FirstOrDefault();
18+
19+
if (handler == null)
20+
{
21+
logger.LogError("No handler registered for IHandleEmojiChanged");
22+
}
23+
else
24+
{
25+
logger.LogInformation("Handling using {HandlerType}", handler.GetType());
26+
try
27+
{
28+
logger.LogInformation("Handling using {HandlerType}", handler.GetType());
29+
var response = await handler.Handle(metadata, emojiChanged);
30+
logger.LogInformation("Handler response: {Response}", response.Response);
31+
}
32+
catch (Exception e)
33+
{
34+
logger.LogError(e, e.Message);
35+
}
36+
}
37+
38+
context.Response.StatusCode = 200;
39+
}
40+
41+
public static bool ShouldRun(HttpContext ctx)
42+
{
43+
return ctx.Items.ContainsKey(HttpItemKeys.EventTypeKey)
44+
&& ctx.Items[HttpItemKeys.EventTypeKey].ToString() == EventTypes.EmojiChanged;
45+
}
46+
}

source/src/Slackbot.Net.Endpoints/Middlewares/HttpItemsManager.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ private static SlackEvent ToEventType(JsonElement eventJson, string raw)
7777
return JsonSerializer.Deserialize<AppHomeOpenedEvent>(json, WebOptions);
7878
case EventTypes.TeamJoin:
7979
return JsonSerializer.Deserialize<TeamJoinEvent>(json, WebOptions);
80+
case EventTypes.EmojiChanged:
81+
return JsonSerializer.Deserialize<EmojiChangedEvent>(json, WebOptions);
8082
default:
8183
var unknownSlackEvent = JsonSerializer.Deserialize<UnknownSlackEvent>(json, WebOptions);
8284
unknownSlackEvent.RawJson = raw;
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#nullable enable
2+
namespace Slackbot.Net.Endpoints.Models.Events;
3+
4+
// https://api.slack.com/events/emoji_changed
5+
public class EmojiChangedEvent : SlackEvent
6+
{
7+
public string? Name { get; set; } // subtype: add
8+
public string[] Names { get; set; } = []; //subtype: remove
9+
public string OldName { get; set; } // subtype: rename
10+
public string NewName { get; set; } // subtype: rename
11+
public Uri? Value { get; set; }// subtypes: add, rename
12+
}

0 commit comments

Comments
 (0)