microsoft/teams.net

Public

mirrored from https://github.com/microsoft/teams.netAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
v2.0.0-preview.5

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

Libraries/Microsoft.Teams.Apps/Activities/Messages/MessageActivity.cs

96lines · modecode

1using System.Text.RegularExpressions;
2
3using Microsoft.Teams.Api.Activities;
4using Microsoft.Teams.Apps.Routing;
5
6namespace Microsoft.Teams.Apps.Activities;
7
8[AttributeUsage(AttributeTargets.Method, Inherited = true)]
9public class MessageAttribute : ActivityAttribute
10{
11 public Regex? Pattern { get; }
12
13 public MessageAttribute() : base(ActivityType.Message, typeof(MessageActivity))
14 {
15 }
16
17 public MessageAttribute(string pattern) : base(ActivityType.Message, typeof(MessageActivity))
18 {
19 Pattern = new Regex(pattern);
20 }
21
22 public override object Coerce(IContext<IActivity> context) => context.ToActivityType<MessageActivity>();
23 public override bool Select(IActivity activity)
24 {
25 if (activity is MessageActivity message)
26 {
27 return Pattern is null || Pattern.IsMatch(message.Text);
28 }
29
30 return false;
31 }
32}
33
34public static partial class AppActivityExtensions
35{
36 public static App OnMessage(this App app, Func<IContext<MessageActivity>, Task> handler)
37 {
38 app.Router.Register(new Route()
39 {
40 Handler = async context =>
41 {
42 await handler(context.ToActivityType<MessageActivity>());
43 return null;
44 },
45 Selector = activity => activity is MessageActivity
46 });
47
48 return app;
49 }
50
51 public static App OnMessage(this App app, string pattern, Func<IContext<MessageActivity>, Task> handler)
52 {
53 app.Router.Register(new Route()
54 {
55 Handler = async context =>
56 {
57 await handler(context.ToActivityType<MessageActivity>());
58 return null;
59 },
60 Selector = activity =>
61 {
62 if (activity is MessageActivity message)
63 {
64 return new Regex(pattern).IsMatch(message.Text);
65 }
66
67 return false;
68 }
69 });
70
71 return app;
72 }
73
74 public static App OnMessage(this App app, Regex regex, Func<IContext<MessageActivity>, Task> handler)
75 {
76 app.Router.Register(new Route()
77 {
78 Handler = async context =>
79 {
80 await handler(context.ToActivityType<MessageActivity>());
81 return null;
82 },
83 Selector = activity =>
84 {
85 if (activity is MessageActivity message)
86 {
87 return regex.IsMatch(message.Text);
88 }
89
90 return false;
91 }
92 });
93
94 return app;
95 }
96}