Passed
Push — main ( 23165f...4af278 )
by Miaad
01:25
created

request::readyFile()   B

Complexity

Conditions 8
Paths 7

Size

Total Lines 12
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 8
dl 0
loc 12
rs 8.4444
c 0
b 0
f 0
cc 8
nc 7
nop 2
1
<?php
2
3
namespace BPT\api;
4
5
use BPT\logger;
6
use CURLFile;
7
8
class request {
9
    private const METHODS_ACTION = [
10
        'getupdates'                      => 'getUpdates',
11
        'getup'                           => 'getUpdates',
12
        'updates'                         => 'getUpdates',
13
        'setwebhook'                      => 'setWebhook',
14
        'setweb'                          => 'setWebhook',
15
        'webhook'                         => 'setWebhook',
16
        'deletewebhook'                   => 'deleteWebhook',
17
        'deleteweb'                       => 'deleteWebhook',
18
        'delweb'                          => 'deleteWebhook',
19
        'getwebhookinfo'                  => 'getWebhookInfo',
20
        'getweb'                          => 'getWebhookInfo',
21
        'getme'                           => 'getMe',
22
        'me'                              => 'getMe',
23
        'logout'                          => 'logOut',
24
        'close'                           => 'close',
25
        'sendmessage'                     => 'sendMessage',
26
        'send'                            => 'sendMessage',
27
        'forwardmessage'                  => 'forwardMessage',
28
        'forward'                         => 'forwardMessage',
29
        'copymessage'                     => 'copyMessage',
30
        'copy'                            => 'copyMessage',
31
        'sendphoto'                       => 'sendPhoto',
32
        'photo'                           => 'sendPhoto',
33
        'sendaudio'                       => 'sendAudio',
34
        'audio'                           => 'sendAudio',
35
        'senddocument'                    => 'sendDocument',
36
        'senddoc'                         => 'sendDocument',
37
        'document'                        => 'sendDocument',
38
        'doc'                             => 'sendDocument',
39
        'sendvideo'                       => 'sendVideo',
40
        'video'                           => 'sendVideo',
41
        'sendanimation'                   => 'sendAnimation',
42
        'animation'                       => 'sendAnimation',
43
        'sendgif'                         => 'sendAnimation',
44
        'gif'                             => 'sendAnimation',
45
        'sendvoice'                       => 'sendVoice',
46
        'voice'                           => 'sendVoice',
47
        'sendvideonote'                   => 'sendVideoNote',
48
        'videonote'                       => 'sendVideoNote',
49
        'sendmediagroup'                  => 'sendMediaGroup',
50
        'mediagroup'                      => 'sendMediaGroup',
51
        'media'                           => 'sendMediaGroup',
52
        'sendlocation'                    => 'sendLocation',
53
        'sendloc'                         => 'sendLocation',
54
        'location'                        => 'sendLocation',
55
        'loc'                             => 'sendLocation',
56
        'editmessagelivelocation'         => 'editMessageLiveLocation',
57
        'editliveloc'                     => 'editMessageLiveLocation',
58
        'stopmessagelivelocation'         => 'stopMessageLiveLocation',
59
        'stopliveloc'                     => 'stopMessageLiveLocation',
60
        'sendvenue'                       => 'sendVenue',
61
        'venue'                           => 'sendVenue',
62
        'sendcontact'                     => 'sendContact',
63
        'contact'                         => 'sendContact',
64
        'sendpoll'                        => 'sendPoll',
65
        'poll'                            => 'sendPoll',
66
        'senddice'                        => 'sendDice',
67
        'dice'                            => 'sendDice',
68
        'sendchataction'                  => 'sendChatAction',
69
        'chataction'                      => 'sendChatAction',
70
        'action'                          => 'sendChatAction',
71
        'getuserprofilephotos'            => 'getUserProfilePhotos',
72
        'userphotos'                      => 'getUserProfilePhotos',
73
        'getfile'                         => 'getFile',
74
        'file'                            => 'getFile',
75
        'banchatmember'                   => 'banChatMember',
76
        'ban'                             => 'banChatMember',
77
        'kickchatmember'                  => 'banChatMember',
78
        'kick'                            => 'unbanChatMember',
79
        'unbanchatmember'                 => 'unbanChatMember',
80
        'unban'                           => 'unbanChatMember',
81
        'restrictchatmember'              => 'restrictChatMember',
82
        'restrict'                        => 'restrictChatMember',
83
        'promotechatmember'               => 'promoteChatMember',
84
        'promote'                         => 'promoteChatMember',
85
        'setchatadministratorcustomtitle' => 'setChatAdministratorCustomTitle',
86
        'customtitle'                     => 'setChatAdministratorCustomTitle',
87
        'banchatsenderchat'               => 'banChatSenderChat',
88
        'banSender'                       => 'banChatSenderChat',
89
        'unbanchatsenderchat'             => 'unbanChatSenderChat',
90
        'unbanSender'                     => 'unbanChatSenderChat',
91
        'setchatpermissions'              => 'setChatPermissions',
92
        'permissions'                     => 'setChatPermissions',
93
        'exportchatinvitelink'            => 'exportChatInviteLink',
94
        'link'                            => 'exportChatInviteLink',
95
        'createchatinvitelink'            => 'createChatInviteLink',
96
        'crlink'                          => 'createChatInviteLink',
97
        'editchatinvitelink'              => 'editChatInviteLink',
98
        'edlink'                          => 'editChatInviteLink',
99
        'revokechatinvitelink'            => 'revokeChatInviteLink',
100
        'relink'                          => 'revokeChatInviteLink',
101
        'approvechatjoinrequest'          => 'approveChatJoinRequest',
102
        'acceptjoin'                      => 'approveChatJoinRequest',
103
        'declinechatjoinrequest'          => 'declineChatJoinRequest',
104
        'denyjoin'                        => 'declineChatJoinRequest',
105
        'setchatphoto'                    => 'setChatPhoto',
106
        'deletechatphoto'                 => 'deleteChatPhoto',
107
        'setchattitle'                    => 'setChatTitle',
108
        'title'                           => 'setChatTitle',
109
        'setchatdescription'              => 'setChatDescription',
110
        'description'                     => 'setChatDescription',
111
        'pinchatmessage'                  => 'pinChatMessage',
112
        'pin'                             => 'pinChatMessage',
113
        'unpinchatmessage'                => 'unpinChatMessage',
114
        'unpin'                           => 'unpinChatMessage',
115
        'unpinallchatmessages'            => 'unpinAllChatMessages',
116
        'unpinall'                        => 'unpinAllChatMessages',
117
        'leavechat'                       => 'leaveChat',
118
        'leave'                           => 'leaveChat',
119
        'getchat'                         => 'getChat',
120
        'chat'                            => 'getChat',
121
        'getchatadministrators'           => 'getChatAdministrators',
122
        'admins'                          => 'getChatAdministrators',
123
        'getchatmembercount'              => 'getChatMembersCount',
124
        'getchatmemberscount'             => 'getChatMembersCount',
125
        'memberscount'                    => 'getChatMembersCount',
126
        'getchatmember'                   => 'getChatMember',
127
        'member'                          => 'getChatMember',
128
        'setchatstickerset'               => 'setChatStickerSet',
129
        'setsticker'                      => 'setChatStickerSet',
130
        'deletechatstickerset'            => 'deleteChatStickerSet',
131
        'delsticker'                      => 'deleteChatStickerSet',
132
        'answercallbackquery'             => 'answerCallbackQuery',
133
        'answer'                          => 'answerCallbackQuery',
134
        'setmycommands'                   => 'setMyCommands',
135
        'setcommands'                     => 'setMyCommands',
136
        'deletemycommands'                => 'deleteMyCommands',
137
        'deletecommands'                  => 'deleteMyCommands',
138
        'getmycommands'                   => 'getMyCommands',
139
        'getcommands'                     => 'getMyCommands',
140
        'setchatmenubutton'               => 'setChatMenuButton',
141
        'setmenubutton'                   => 'setChatMenuButton',
142
        'setmenu'                         => 'setChatMenuButton',
143
        'setbutton'                       => 'setChatMenuButton',
144
        'getchatmenubutton'               => 'getChatMenuButton',
145
        'getmenubutton'                   => 'getChatMenuButton',
146
        'getmenu'                         => 'getChatMenuButton',
147
        'getbutton'                       => 'getChatMenuButton',
148
        'setmydefaultadministratorrights' => 'setMyDefaultAdministratorRights',
149
        'setmydefaultadminrights'         => 'setMyDefaultAdministratorRights',
150
        'setmydefaultrights'              => 'setMyDefaultAdministratorRights',
151
        'setdefaultrights'                => 'setMyDefaultAdministratorRights',
152
        'getmydefaultadministratorrights' => 'getMyDefaultAdministratorRights',
153
        'getmydefaultadminrights'         => 'getMyDefaultAdministratorRights',
154
        'getmydefaultrights'              => 'getMyDefaultAdministratorRights',
155
        'getdefaultrights'                => 'getMyDefaultAdministratorRights',
156
        'editmessagetext'                 => 'editMessageText',
157
        'edittext'                        => 'editMessageText',
158
        'editmessagecaption'              => 'editMessageCaption',
159
        'editcap'                         => 'editMessageCaption',
160
        'editcaption'                     => 'editMessageCaption',
161
        'editmessagemedia'                => 'editMessageMedia',
162
        'editmedia'                       => 'editMessageMedia',
163
        'editmessagereplymarkup'          => 'editMessageReplyMarkup',
164
        'editreply'                       => 'editMessageReplyMarkup',
165
        'editkeyboard'                    => 'editMessageReplyMarkup',
166
        'stoppoll'                        => 'stopPoll',
167
        'deletemessage'                   => 'deleteMessage',
168
        'del'                             => 'deleteMessage',
169
        'sendsticker'                     => 'sendSticker',
170
        'sticker'                         => 'sendSticker',
171
        'getstickerset'                   => 'getStickerSet',
172
        'uploadstickerfile'               => 'uploadStickerFile',
173
        'uploadsticker'                   => 'uploadStickerFile',
174
        'createnewstickerset'             => 'createNewStickerSet',
175
        'createsticker'                   => 'createNewStickerSet',
176
        'addstickertoset'                 => 'addStickerToSet',
177
        'addsticker'                      => 'addStickerToSet',
178
        'setstickerpositioninset'         => 'setStickerPositionInSet',
179
        'setstickerposition'              => 'setStickerPositionInSet',
180
        'setstickerpos'                   => 'setStickerPositionInSet',
181
        'deletestickerfromset'            => 'deleteStickerFromSet',
182
        'deletesticker'                   => 'deleteStickerFromSet',
183
        'setstickersetthumb'              => 'setStickerSetThumb',
184
        'setstickerthumb'                 => 'setStickerSetThumb',
185
        'answerinlinequery'               => 'answerInlineQuery',
186
        'answerinline'                    => 'answerInlineQuery',
187
        'answerwebappquery'               => 'answerWebAppQuery',
188
        'answerwebapp'                    => 'answerWebAppQuery',
189
        'answerweb'                       => 'answerWebAppQuery',
190
        'sendinvoice'                     => 'sendInvoice',
191
        'invoice'                         => 'sendInvoice',
192
        'answershippingquery'             => 'answerShippingQuery',
193
        'answershipping'                  => 'answerShippingQuery',
194
        'answerprecheckoutquery'          => 'answerPreCheckoutQuery',
195
        'answerprecheckout'               => 'answerPreCheckoutQuery',
196
        'answerprecheck'                  => 'answerPreCheckoutQuery',
197
        'setpassportdataerrors'           => 'setPassportDataErrors',
198
        'setpassport'                     => 'setPassportDataErrors',
199
        'sendgame'                        => 'sendGame',
200
        'game'                            => 'sendGame',
201
        'setgamescore'                    => 'setGameScore',
202
        'gamescore'                       => 'setGameScore',
203
        'getgamehighscores'               => 'getGameHighScores',
204
        'getgamehigh'                     => 'getGameHighScores'
205
    ];
206
207
    private const METHODS_KEYS = [
208
        'sendMessage' => ['text', 'parse_mode']
209
    ];
210
211
    private const METHODS_WITH_FILE = [
212
        'sendPhoto'           => ['photo'],
213
        'sendAudio'           => ['audio', 'thumb'],
214
        'sendDocument'        => ['document', 'thumb'],
215
        'sendVideo'           => ['video', 'thumb'],
216
        'sendAnimation'       => ['animation', 'thumb'],
217
        'sendVoice'           => ['voice', 'thumb'],
218
        'sendVideoNote'       => ['video_note', 'thumb'],
219
        'setChatPhoto'        => ['photo'],
220
        'sendSticker'         => ['sticker'],
221
        'uploadStickerFile'   => ['png_sticker'],
222
        'createNewStickerSet' => ['png_sticker', 'tgs_sticker'],
223
        'addStickerToSet'     => ['png_sticker', 'tgs_sticker'],
224
        'setStickerSetThumb'  => ['thumb'],
225
    ];
226
227
228
    public static function __callStatic (string $name, array $arguments) {
229
        if ($action = self::methodAction($name)) {
230
            self::keysName($action,$arguments);
231
            self::readyFile($action,$arguments);
232
            print_r($arguments);
233
        }
234
        else {
235
            logger::write("$name method is not supported",'error');
236
        }
237
    }
238
239
    private static function keysName (string $name, array &$arguments) {
240
        foreach ($arguments as $key => $argument) {
241
            if (is_numeric($key) && isset(self::METHODS_KEYS[$name][$key])) {
242
                $arguments[self::METHODS_KEYS[$name][$key]] = $argument;
243
                unset($arguments[$key]);
244
            }
245
        }
246
    }
247
248
    private static function methodAction(string $name): string|false {
249
        return self::METHODS_ACTION[strtolower($name)] ?? false;
250
    }
251
252
    private static function readyFile(string $name, array &$arguments) {
253
        if ($name === 'sendMediaGroup') {
254
            foreach ($arguments['media'] as $key => $media) {
255
                if (file_exists($media['media'])) {
256
                    $arguments['media'][$key]['media'] = new CURLFile($media['media']);
257
                }
258
            }
259
        }
260
        elseif ($file_params = self::methodFile($name)) {
261
            foreach ($file_params as $param) {
262
                if (isset($arguments[$param]) && file_exists($arguments[$param])) {
263
                    $arguments[$param] = new CURLFile($arguments[$param]);
264
                }
265
            }
266
        }
267
    }
268
269
    private static function methodFile(string $name): array|false {
270
        return self::METHODS_WITH_FILE[$name] ?? false;
271
    }
272
}