Skip to content

Commit 355160d

Browse files
authored
Merge pull request DinoLeung#193 from DinoLeung/develop
0.3.0
2 parents d5dbf23 + 4cf857d commit 355160d

21 files changed

+1953
-2382
lines changed

CHANGELOG.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
## 0.3.0
2+
3+
- Support API 5.4, 5.5 and 5.6
4+
- **Breaking** `TeleDart` now extends `Telegram`, constructor signiture has changed, all `Telegram` functions are accessable from `TeleDart`.
5+
- **Breaking** Renamed `TeleDart.setWebhook` into `TeleDart.configureWebhook`
6+
- **Breaking** Removed `TeleDart.editLiveLocation`, should use `Telegram.editMessageLiveLocation` instead
7+
- **Breaking** Removed `TeleDart.stopLiveLocation`, should use `Telegram.stopMessageLiveLocation` instead
8+
- **Breaking** Removed `CallbackQuery` answer short-cut from `TeleDart`, should use short-cut method from `TeleDartCallbackQuery`
9+
- **Breaking** Removed `InlineQuery` answer short-cut from `TeleDart`, should use short-cut method from `TeleDartInlineQuery`
10+
- **Breaking** Removed `Message` reply short-cuts from `TeleDart`, should use short-cut methods from `TeleDartMessage`
11+
- **Breaking** Removed `PreCheckoutQuery` answer short-cut from `TeleDart`, should use short-cut method from `TeleDartPreCheckoutQuery`
12+
- **Breaking** Removed `ShippingQuery` answer short-cut from `TeleDart`, should use short-cut method from `TeleDartShippingQuery`
13+
114
## 0.2.2
215

316
- Improve documentations

README.md

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ allowing you to create your own bot easily.
88

99
![TeleDart](https://raw.githubusercontent.com/DinoLeung/TeleDart/master/example/dash_paper_plane.svg?sanitize=true)
1010

11-
[![Bot API Version](https://img.shields.io/badge/Bot%20API-5.3-blue.svg?style=flat-square)](https://core.telegram.org/bots/api)
12-
[![Dart Version](https://img.shields.io/badge/Dart-2.12-blue.svg?style=flat-square)](https://dart.dev)
11+
[![Bot API Version](https://img.shields.io/badge/Bot%20API-5.6-blue.svg?style=flat-square)](https://core.telegram.org/bots/api)
12+
[![Dart Version](https://img.shields.io/badge/Dart-2.14-blue.svg?style=flat-square)](https://dart.dev)
1313
[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg?style=flat-square)](https://www.gnu.org/licenses/gpl-3.0)
1414

1515
## Creating a Telegram bot
@@ -26,36 +26,31 @@ import 'package:teledart/teledart.dart';
2626
import 'package:teledart/telegram.dart';
2727
2828
void main() {
29-
var telegram = Telegram(BOT_TOKEN); // Replace BOT_TOKEN with the token of your bot
30-
var event = Event((await telegram.getMe()).username!);
31-
var teledart = TeleDart(telegram, event);
29+
var BOT_TOKEN = 'YOUR_BOT_TOKEN_FROM_BOT_FATHER';
30+
final username = (await Telegram(BOT_TOKEN).getMe()).username;
31+
var teledart = TeleDart(BOT_TOKEN, Event(username!));
3232
3333
teledart.start()
34-
35-
// ...
3634
}
3735
```
3836

3937
A simple usage example:
4038

4139
```dart
42-
teledart
43-
..onMessage(keyword: 'Fight for freedom')
40+
teledart.onMessage(keyword: 'Fight for freedom')
4441
.listen((message) => message.reply('Stand with Hong Kong'));
4542
```
4643

4744
Using bot commands:
4845

4946
```dart
5047
// Long way
51-
teledart.onMessage(entityType: 'bot_command', keyword: 'start').listen(
52-
(message) =>
53-
teledart.telegram.sendMessage(message.chat.id, 'Hello TeleDart!'));
48+
teledart.onMessage(entityType: 'bot_command', keyword: 'start')
49+
.listen((message) => teledart.sendMessage(message.chat.id, 'Hello TeleDart!'));
5450
5551
// Short way (recommended)
56-
teledart
57-
.onCommand('short')
58-
.listen(((message) => teledart.replyMessage(message, 'This works too!')));
52+
teledart.onCommand('short')
53+
.listen((message) => message.reply('This works too!'));
5954
```
6055

6156
Modifying [Stream](https://www.dartlang.org/tutorials/language/streams#methods-that-modify-a-stream):

analysis_options.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
include: package:pedantic/analysis_options.yaml
1+
include: package:lints/recommended.yaml
22

33
analyzer:
44
exclude:

example/main.dart

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,56 +7,47 @@ import 'package:teledart/model.dart';
77

88
Future<void> main() async {
99
final envVars = Platform.environment;
10-
11-
var telegram = Telegram(envVars['BOT_TOKEN']!);
12-
var event = Event((await telegram.getMe()).username!);
10+
final username = (await Telegram(envVars['BOT_TOKEN']!).getMe()).username;
1311

1412
// TeleDart uses longpoll by default if no update fetcher is specified.
15-
var teledart = TeleDart(telegram, event);
13+
var teledart = TeleDart(envVars['BOT_TOKEN']!, Event(username!));
1614

1715
// In case you decided to use webhook.
1816
// var webhook = await Webhook.createHttpsWebhok(
19-
// telegram,
17+
// Telegram(envVars['BOT_TOKEN']!),
2018
// envVars['HOST_URL']!,
2119
// envVars['BOT_TOKEN']!,
2220
// io.File(envVars['CERT_PATH']!),
2321
// io.File(envVars['KEY_PATH']!),
2422
// port: int.parse(envVars['BOT_PORT']!));
25-
// var teledart = TeleDart(telegram, event, fetcher: webhook);
23+
// var teledart = TeleDart(envVars['BOT_TOKEN']!, Event(username!), fetcher: webhook);
2624

2725
teledart.start();
2826

2927
// You can listen to messages like this
3028
teledart.onMessage(entityType: 'bot_command', keyword: 'start').listen(
31-
(message) =>
32-
teledart.telegram.sendMessage(message.chat.id, 'Hello TeleDart!'));
29+
(message) => teledart.sendMessage(message.chat.id, 'Hello TeleDart!'));
3330

34-
// Or using short cuts
35-
teledart
36-
.onCommand('short')
37-
.listen(((message) => teledart.replyMessage(message, 'This works too!')));
31+
// Sick of boilerplates? Reply messages like below, nice and tidy
32+
// Short hands also available for answer query methods
33+
teledart.onCommand('short')
34+
.listen((message) => message.reply('This works too!'));
3835

3936
// You can also utilise regular expressions
40-
teledart.onCommand(RegExp('hello', caseSensitive: false)).listen(
41-
(message) => teledart.telegram.sendMessage(message.chat.id, 'hi!'));
37+
teledart
38+
.onCommand(RegExp('hello', caseSensitive: false))
39+
.listen((message) => message.reply('hi!'));
4240

4341
// You can even filter streams with stream processing methods
4442
// See: https://www.dartlang.org/tutorials/language/streams#methods-that-modify-a-stream
4543
teledart
4644
.onMessage(keyword: 'dart')
4745
.where((message) => message.text?.contains('telegram') ?? false)
48-
.listen((message) => teledart.replyPhoto(
49-
message,
46+
.listen((message) => message.replyPhoto(
5047
// io.File('example/dash_paper_plane.png'),
5148
'https://raw.githubusercontent.com/DinoLeung/TeleDart/master/example/dash_paper_plane.png',
5249
caption: 'This is how Dash found the paper plane'));
5350

54-
// Sick of boilerplates? Reply messages like below, nice and tidy
55-
// Short hands also available for answer query methods
56-
teledart
57-
.onMessage(keyword: 'Fight for freedom')
58-
.listen((message) => message.reply('Stand with Hong Kong'));
59-
6051
// Inline mode.
6152
teledart.onInlineQuery().listen((inlineQuery) => inlineQuery.answer([
6253
InlineQueryResultArticle(

lib/src/teledart/event/event.dart

Lines changed: 60 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import 'dart:async';
2020

21+
import '../teledart.dart';
2122
import '../../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

221232
class TeleDartEventException implements Exception {

lib/src/teledart/model/callback_query.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,6 @@ class TeleDartCallbackQuery extends CallbackQuery {
5757
String? url,
5858
int? cache_time,
5959
}) =>
60-
_teledart.answerCallbackQuery(this,
60+
_teledart.answerCallbackQuery(id,
6161
text: text, show_alert: show_alert, url: url, cache_time: cache_time);
6262
}

lib/src/teledart/model/inline_query.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class TeleDartInlineQuery extends InlineQuery {
6060
String? switch_pm_text,
6161
String? switch_pm_parameter,
6262
}) =>
63-
_teledart.answerInlineQuery(this, results,
63+
_teledart.answerInlineQuery(id, results,
6464
cache_time: cache_time,
6565
is_personal: is_personal,
6666
next_offset: next_offset,

0 commit comments

Comments
 (0)