microsoft/teams.net

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
v2.0.0-preview.13

Branches

Tags

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

Clone

HTTPS

Download ZIP

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

105lines · 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, string pattern, Func<IContext<MessageActivity>, 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>());
65 return null;
66 },
67 Selector = activity =>
68 {
69 if (activity is MessageActivity message)
70 {
71 return new Regex(pattern).IsMatch(message.Text);
72 }
73
74 return false;
75 }
76 });
77
78 return app;
79 }
80
81 public static App OnMessage(this App app, Regex regex, Func<IContext<MessageActivity>, Task> handler)
82 {
83 app.Router.Register(new Route()
84 {
85 Name = ActivityType.Message,
86 Type = app.Status is null ? RouteType.System : RouteType.User,
87 Handler = async context =>
88 {
89 await handler(context.ToActivityType<MessageActivity>());
90 return null;
91 },
92 Selector = activity =>
93 {
94 if (activity is MessageActivity message)
95 {
96 return regex.IsMatch(message.Text);
97 }
98
99 return false;
100 }
101 });
102
103 return app;
104 }
105}