microsoft/teams.net

Public

mirrored fromhttps://github.com/microsoft/teams.netAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
samples/migration-bot

Branches

Tags

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

Clone

HTTPS

Download ZIP

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

173lines · modecode

1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT License.
3
4using System.Text.RegularExpressions;
5
6using Microsoft.Teams.Api.Activities;
7using Microsoft.Teams.Apps.Routing;
8
9namespace Microsoft.Teams.Apps.Activities;
10
11[AttributeUsage(AttributeTargets.Method, Inherited = true)]
12public class MessageAttribute : ActivityAttribute
13{
14 public Regex? Pattern { get; }
15
16 public MessageAttribute() : base(ActivityType.Message, typeof(MessageActivity))
17 {
18 }
19
20 public MessageAttribute(string pattern) : base(ActivityType.Message, typeof(MessageActivity))
21 {
22 Pattern = new Regex(pattern);
23 }
24
25 public override object Coerce(IContext<IActivity> context) => context.ToActivityType<MessageActivity>();
26 public override bool Select(IActivity activity)
27 {
28 if (activity is MessageActivity message)
29 {
30 return Pattern is null || Pattern.IsMatch(message.Text);
31 }
32
33 return false;
34 }
35}
36
37public static partial class AppActivityExtensions
38{
39 public static App OnMessage(this App app, Func<IContext<MessageActivity>, Task> handler)
40 {
41 app.Router.Register(new Route()
42 {
43 Name = ActivityType.Message,
44 Type = app.Status is null ? RouteType.System : RouteType.User,
45 Handler = async context =>
46 {
47 await handler(context.ToActivityType<MessageActivity>());
48 return null;
49 },
50 Selector = activity => activity is MessageActivity
51 });
52
53 return app;
54 }
55
56 public static App OnMessage(this App app, Func<IContext<MessageActivity>, CancellationToken, Task> handler)
57 {
58 app.Router.Register(new Route()
59 {
60 Name = ActivityType.Message,
61 Type = app.Status is null ? RouteType.System : RouteType.User,
62 Handler = async context =>
63 {
64 await handler(context.ToActivityType<MessageActivity>(), context.CancellationToken);
65 return null;
66 },
67 Selector = activity => activity is MessageActivity
68 });
69
70 return app;
71 }
72
73 public static App OnMessage(this App app, string pattern, Func<IContext<MessageActivity>, Task> handler)
74 {
75 app.Router.Register(new Route()
76 {
77 Name = ActivityType.Message,
78 Type = app.Status is null ? RouteType.System : RouteType.User,
79 Handler = async context =>
80 {
81 await handler(context.ToActivityType<MessageActivity>());
82 return null;
83 },
84 Selector = activity =>
85 {
86 if (activity is MessageActivity message)
87 {
88 return new Regex(pattern).IsMatch(message.Text);
89 }
90
91 return false;
92 }
93 });
94
95 return app;
96 }
97
98 public static App OnMessage(this App app, string pattern, Func<IContext<MessageActivity>, CancellationToken, Task> handler)
99 {
100 var regex = new Regex(pattern);
101 app.Router.Register(new Route()
102 {
103 Name = ActivityType.Message,
104 Type = app.Status is null ? RouteType.System : RouteType.User,
105 Handler = async context =>
106 {
107 await handler(context.ToActivityType<MessageActivity>(), context.CancellationToken);
108 return null;
109 },
110 Selector = activity =>
111 {
112 if (activity is MessageActivity message)
113 {
114 return regex.IsMatch(message.Text);
115 }
116
117 return false;
118 }
119 });
120
121 return app;
122 }
123
124 public static App OnMessage(this App app, Regex regex, Func<IContext<MessageActivity>, Task> handler)
125 {
126 app.Router.Register(new Route()
127 {
128 Name = ActivityType.Message,
129 Type = app.Status is null ? RouteType.System : RouteType.User,
130 Handler = async context =>
131 {
132 await handler(context.ToActivityType<MessageActivity>());
133 return null;
134 },
135 Selector = activity =>
136 {
137 if (activity is MessageActivity message)
138 {
139 return regex.IsMatch(message.Text);
140 }
141
142 return false;
143 }
144 });
145
146 return app;
147 }
148
149 public static App OnMessage(this App app, Regex regex, Func<IContext<MessageActivity>, CancellationToken, Task> handler)
150 {
151 app.Router.Register(new Route()
152 {
153 Name = ActivityType.Message,
154 Type = app.Status is null ? RouteType.System : RouteType.User,
155 Handler = async context =>
156 {
157 await handler(context.ToActivityType<MessageActivity>(), context.CancellationToken);
158 return null;
159 },
160 Selector = activity =>
161 {
162 if (activity is MessageActivity message)
163 {
164 return regex.IsMatch(message.Text);
165 }
166
167 return false;
168 }
169 });
170
171 return app;
172 }
173}