1818
1919import 'dart:async' ;
2020
21+ import '../teledart.dart' ;
2122import '../../telegram/model.dart' ;
2223
2324/// This class listens to various events, such as message edits
@@ -42,6 +43,7 @@ class Event {
4243 final StreamController <PollAnswer > _pollAnswerStreamController;
4344 final StreamController <ChatMemberUpdated > _myChatMemberStreamController;
4445 final StreamController <ChatMemberUpdated > _chatMemberStreamController;
46+ final StreamController <ChatJoinRequest > _chatJoinRequestStreamController;
4547
4648 Event (this .username, {bool sync = false })
4749 : _messageStreamController = StreamController .broadcast (sync : sync ),
@@ -59,7 +61,44 @@ class Event {
5961 _pollStreamController = StreamController .broadcast (sync : sync ),
6062 _pollAnswerStreamController = StreamController .broadcast (sync : sync ),
6163 _myChatMemberStreamController = StreamController .broadcast (sync : sync ),
62- _chatMemberStreamController = StreamController .broadcast (sync : sync );
64+ _chatMemberStreamController = StreamController .broadcast (sync : sync ),
65+ _chatJoinRequestStreamController =
66+ StreamController .broadcast (sync : sync );
67+
68+ /// Emits update events
69+ void emitUpdate (Update update) {
70+ if (update.message != null ) {
71+ _messageStreamController.add (update.message! );
72+ } else if (update.edited_message != null ) {
73+ _editedMessageStreamController.add (update.edited_message! );
74+ } else if (update.channel_post != null ) {
75+ _channelPostStreamController.add (update.channel_post! );
76+ } else if (update.edited_channel_post != null ) {
77+ _editedChannelPostStreamController.add (update.edited_channel_post! );
78+ } else if (update.inline_query != null ) {
79+ _inlineQueryStreamController.add (update.inline_query! );
80+ } else if (update.chosen_inline_result != null ) {
81+ _chosenInlineResultStreamController.add (update.chosen_inline_result! );
82+ } else if (update.callback_query != null ) {
83+ _callbackQueryStreamController.add (update.callback_query! );
84+ } else if (update.shipping_query != null ) {
85+ _shippingQueryStreamController.add (update.shipping_query! );
86+ } else if (update.pre_checkout_query != null ) {
87+ _preCheckoutQueryStreamController.add (update.pre_checkout_query! );
88+ } else if (update.poll != null ) {
89+ _pollStreamController.add (update.poll! );
90+ } else if (update.poll_answer != null ) {
91+ _pollAnswerStreamController.add (update.poll_answer! );
92+ } else if (update.my_chat_member != null ) {
93+ _myChatMemberStreamController.add (update.my_chat_member! );
94+ } else if (update.chat_member != null ) {
95+ _chatMemberStreamController.add (update.chat_member! );
96+ } else if (update.chat_join_request != null ) {
97+ _chatJoinRequestStreamController.add (update.chat_join_request! );
98+ } else {
99+ throw TeleDartEventException ('Receieved unrecognised update' );
100+ }
101+ }
63102
64103 /// Listens to message events
65104 ///
@@ -83,7 +122,7 @@ class Event {
83122 (message.text ?? message.caption ?? '' ).contains (keyword);
84123 } else if (message.entityOf (entityType) == null ) {
85124 return false ;
86- } else if (entityType == 'text_mention' ) {
125+ } else if (entityType == MessageEntity . TEXT_MENTION ) {
87126 var userId = message.entityOf (entityType)? .user? .id;
88127 var firstName = message.entityOf (entityType)? .user? .first_name;
89128 if (keyword is RegExp ) {
@@ -101,30 +140,31 @@ class Event {
101140 case '*' : // Any entityType
102141 entityText = (message.text ?? message.caption ?? '' );
103142 break ;
104- case 'mention' : //'\@${keyword}'
105- case 'cashtag' : //'\$${keyword}'
106- case 'hashtag' : //'\#${keyword}'
143+ case MessageEntity . MENTION : // '\@${keyword}'
144+ case MessageEntity . CASHTAG : // '\$${keyword}'
145+ case MessageEntity . HASHTAG : // '\#${keyword}'
107146 entityText = message.getEntity (entityType)? .substring (1 ) ?? '' ;
108147 break ;
109- case 'bot_command' : //'\/${keyword}' or '\/${keyword}\@${me.username}'
148+ case 'bot_command' : // '\/${keyword}' or '\/${keyword}\@${me.username}'
110149 entityText = message
111150 .getEntity (entityType)
112151 ? .substring (1 )
113152 .replaceAll ('\@ $username ' , '' ) ??
114153 '' ;
115154 break ;
116- case 'url' :
117- case 'email' :
118- case 'phone_number' :
119- case 'bold' :
120- case 'italic' :
121- case 'code' :
122- case 'pre' :
123- case 'underline' :
124- case 'strikethrough' :
155+ case MessageEntity .URL :
156+ case MessageEntity .EMAIL :
157+ case MessageEntity .PHONE_NUMBER :
158+ case MessageEntity .BOLD :
159+ case MessageEntity .ITALIC :
160+ case MessageEntity .SPOILER :
161+ case MessageEntity .CODE :
162+ case MessageEntity .PRE :
163+ case MessageEntity .UNDERLINE :
164+ case MessageEntity .STRIKETHROUGH :
125165 entityText = message.getEntity (entityType) ?? '' ;
126166 break ;
127- case 'text_link' :
167+ case MessageEntity . TEXT_LINK :
128168 entityText = message.entityOf (entityType)? .url ?? '' ;
129169 break ;
130170 default : // Dynamically listen to message types.
@@ -141,39 +181,6 @@ class Event {
141181 }
142182 });
143183
144- /// Emits update events
145- void emitUpdate (Update update) {
146- if (update.message != null ) {
147- _messageStreamController.add (update.message! );
148- } else if (update.edited_message != null ) {
149- _editedMessageStreamController.add (update.edited_message! );
150- } else if (update.channel_post != null ) {
151- _channelPostStreamController.add (update.channel_post! );
152- } else if (update.edited_channel_post != null ) {
153- _editedChannelPostStreamController.add (update.edited_channel_post! );
154- } else if (update.inline_query != null ) {
155- _inlineQueryStreamController.add (update.inline_query! );
156- } else if (update.chosen_inline_result != null ) {
157- _chosenInlineResultStreamController.add (update.chosen_inline_result! );
158- } else if (update.callback_query != null ) {
159- _callbackQueryStreamController.add (update.callback_query! );
160- } else if (update.shipping_query != null ) {
161- _shippingQueryStreamController.add (update.shipping_query! );
162- } else if (update.pre_checkout_query != null ) {
163- _preCheckoutQueryStreamController.add (update.pre_checkout_query! );
164- } else if (update.poll != null ) {
165- _pollStreamController.add (update.poll! );
166- } else if (update.poll_answer != null ) {
167- _pollAnswerStreamController.add (update.poll_answer! );
168- } else if (update.my_chat_member != null ) {
169- _myChatMemberStreamController.add (update.my_chat_member! );
170- } else if (update.chat_member != null ) {
171- _chatMemberStreamController.add (update.chat_member! );
172- } else {
173- throw TeleDartEventException ('Receieved unrecognised update' );
174- }
175- }
176-
177184 /// Listens to edited message events
178185 Stream <Message > onEditedMessage () => _editedMessageStreamController.stream;
179186
@@ -216,6 +223,10 @@ class Event {
216223 /// Listen to chat member events
217224 Stream <ChatMemberUpdated > onChatMember () =>
218225 _chatMemberStreamController.stream;
226+
227+ /// Listen to chat join request events
228+ Stream <ChatJoinRequest > onChatJoinRequest () =>
229+ _chatJoinRequestStreamController.stream;
219230}
220231
221232class TeleDartEventException implements Exception {
0 commit comments