15
15
16
16
use LitEmoji \LitEmoji ;
17
17
use Longman \TelegramBot \Commands \SystemCommand ;
18
+ use Longman \TelegramBot \DB ;
18
19
use Longman \TelegramBot \Entities \ChatMember ;
20
+ use Longman \TelegramBot \Entities \ChatPermissions ;
19
21
use Longman \TelegramBot \Entities \InlineKeyboard ;
22
+ use Longman \TelegramBot \Entities \Message ;
20
23
use Longman \TelegramBot \Entities \ServerResponse ;
21
24
use Longman \TelegramBot \Entities \User ;
22
25
use Longman \TelegramBot \Exception \TelegramException ;
@@ -43,6 +46,11 @@ class NewchatmembersCommand extends SystemCommand
43
46
*/
44
47
protected $ version = '0.5.0 ' ;
45
48
49
+ /**
50
+ * @var Message
51
+ */
52
+ private $ message ;
53
+
46
54
/**
47
55
* @var int
48
56
*/
@@ -64,17 +72,23 @@ class NewchatmembersCommand extends SystemCommand
64
72
*/
65
73
public function execute (): ServerResponse
66
74
{
67
- $ message = $ this ->getMessage ();
68
- $ this ->chat_id = $ message ->getChat ()->getId ();
69
- $ this ->user_id = $ message ->getFrom ()->getId ();
75
+ $ this -> message = $ this ->getMessage ();
76
+ $ this ->chat_id = $ this -> message ->getChat ()->getId ();
77
+ $ this ->user_id = $ this -> message ->getFrom ()->getId ();
70
78
71
- $ this ->group_name = $ message ->getChat ()->getTitle ();
79
+ $ this ->group_name = $ this -> message ->getChat ()->getTitle ();
72
80
73
81
['users ' => $ new_users , 'bots ' => $ new_bots ] = $ this ->getNewUsersAndBots ();
74
82
75
83
// Kick bots if they weren't added by an admin.
76
84
$ this ->kickDisallowedBots ($ new_bots );
77
85
86
+ // Restrict all permissions for new users.
87
+ $ this ->restrictNewUsers ($ new_users );
88
+
89
+ // Set the joined date for all new group members.
90
+ $ this ->updateUsersJoinedDate ($ new_users );
91
+
78
92
return $ this ->refreshWelcomeMessage ($ new_users );
79
93
}
80
94
@@ -106,7 +120,7 @@ private function refreshWelcomeMessage(array $new_users): ServerResponse
106
120
'disable_web_page_preview ' => true ,
107
121
'disable_notification ' => true ,
108
122
'reply_markup ' => new InlineKeyboard ([
109
- ['text ' => LitEmoji::encodeUnicode (':orange_book: Read the Rules ' ), 'url ' => 'https://t.me/PHP_Telegram_Support_Bot ?start=rules ' ],
123
+ ['text ' => LitEmoji::encodeUnicode (':orange_book: Read the Rules ' ), 'url ' => 'https://t.me/ ' . getenv ( ' TG_BOT_USERNAME ' ) . ' ?start=rules ' ],
110
124
]),
111
125
]
112
126
);
@@ -156,7 +170,7 @@ private function getNewUsersAndBots(): array
156
170
$ users = [];
157
171
$ bots = [];
158
172
159
- foreach ($ this ->getMessage () ->getNewChatMembers () as $ member ) {
173
+ foreach ($ this ->message ->getNewChatMembers () as $ member ) {
160
174
if ($ member ->getIsBot ()) {
161
175
$ bots [] = $ member ;
162
176
continue ;
@@ -188,4 +202,58 @@ private function kickDisallowedBots(array $bots): void
188
202
]);
189
203
}
190
204
}
205
+
206
+ /**
207
+ * Write users join date to DB.
208
+ *
209
+ * @param array $new_users
210
+ *
211
+ * @return bool
212
+ */
213
+ private function updateUsersJoinedDate ($ new_users ): bool
214
+ {
215
+ $ new_users_ids = array_map (static function (User $ user ) {
216
+ return $ user ->getId ();
217
+ }, $ new_users );
218
+
219
+ // Update "Joined Date" for new users.
220
+ return DB ::getPdo ()->prepare ("
221
+ UPDATE " . TB_USER . "
222
+ SET `joined_at` = ?
223
+ WHERE `id` IN (?)
224
+ " )->execute ([date ('Y-m-d H:i:s ' ), implode (', ' , $ new_users_ids )]);
225
+ }
226
+
227
+ /**
228
+ * Restrict permissions in support group for passed users.
229
+ *
230
+ * @param array $new_users
231
+ *
232
+ * @return array
233
+ */
234
+ private function restrictNewUsers ($ new_users ): array
235
+ {
236
+ $ responses = [];
237
+
238
+ /** @var User[] $new_users */
239
+ foreach ($ new_users as $ new_user ) {
240
+ $ user_id = $ new_user ->getId ();
241
+ $ responses [$ user_id ] = Request::restrictChatMember ([
242
+ 'chat_id ' => getenv ('TG_SUPPORT_GROUP_ID ' ),
243
+ 'user_id ' => $ user_id ,
244
+ 'permissions ' => new ChatPermissions ([
245
+ 'can_send_messages ' => false ,
246
+ 'can_send_media_messages ' => false ,
247
+ 'can_send_polls ' => false ,
248
+ 'can_send_other_messages ' => false ,
249
+ 'can_add_web_page_previews ' => false ,
250
+ 'can_change_info ' => false ,
251
+ 'can_invite_users ' => false ,
252
+ 'can_pin_messages ' => false ,
253
+ ]),
254
+ ]);
255
+ }
256
+
257
+ return $ responses ;
258
+ }
191
259
}
0 commit comments