2017-07-31 19:17:10 +02:00
#!/usr/bin/env php
< ? php
/*
Copyright 2016 - 2017 Daniil Gentili
( https :// daniil . it )
This file is part of MadelineProto .
MadelineProto is free software : you can redistribute it and / or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation , either version 3 of the License , or ( at your option ) any later version .
MadelineProto is distributed in the hope that it will be useful , but WITHOUT ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE .
See the GNU Affero General Public License for more details .
You should have received a copy of the GNU General Public License along with MadelineProto .
If not , see < http :// www . gnu . org / licenses />.
*/
2017-08-18 13:27:44 +02:00
set_include_path ( get_include_path () . ':' . realpath ( dirname ( __FILE__ ) . '/MadelineProto/' ));
2017-07-31 19:17:10 +02:00
require_once 'vendor/autoload.php' ;
if ( file_exists ( 'web_data.php' )) {
require_once 'web_data.php' ;
}
echo 'Deserializing MadelineProto from session.madeline...' . PHP_EOL ;
$MadelineProto = false ;
2017-08-13 18:52:32 +02:00
2017-07-31 19:17:10 +02:00
try {
$MadelineProto = \danog\MadelineProto\Serialization :: deserialize ( 'session.madeline' );
} catch ( \danog\MadelineProto\Exception $e ) {
var_dump ( $e -> getMessage ());
}
if ( file_exists ( '.env' )) {
echo 'Loading .env...' . PHP_EOL ;
$dotenv = new Dotenv\Dotenv ( getcwd ());
$dotenv -> load ();
}
if ( getenv ( 'TEST_SECRET_CHAT' ) == '' ) {
die ( 'TEST_SECRET_CHAT is not defined in .env, please define it.' . PHP_EOL );
}
echo 'Loading settings...' . PHP_EOL ;
$settings = json_decode ( getenv ( 'MTPROTO_SETTINGS' ), true ) ? : [];
var_dump ( $settings );
if ( $MadelineProto === false ) {
echo 'Loading MadelineProto...' . PHP_EOL ;
$MadelineProto = new \danog\MadelineProto\API ( $settings );
if ( getenv ( 'TRAVIS_COMMIT' ) == '' ) {
$checkedPhone = $MadelineProto -> auth -> checkPhone ( // auth.checkPhone becomes auth->checkPhone
[
'phone_number' => getenv ( 'MTPROTO_NUMBER' ),
]
);
\danog\MadelineProto\Logger :: log ([ $checkedPhone ], \danog\MadelineProto\Logger :: NOTICE );
$sentCode = $MadelineProto -> phone_login ( getenv ( 'MTPROTO_NUMBER' ));
\danog\MadelineProto\Logger :: log ([ $sentCode ], \danog\MadelineProto\Logger :: NOTICE );
echo 'Enter the code you received: ' ;
$code = fgets ( STDIN , ( isset ( $sentCode [ 'type' ][ 'length' ]) ? $sentCode [ 'type' ][ 'length' ] : 5 ) + 1 );
$authorization = $MadelineProto -> complete_phone_login ( $code );
\danog\MadelineProto\Logger :: log ([ $authorization ], \danog\MadelineProto\Logger :: NOTICE );
if ( $authorization [ '_' ] === 'account.noPassword' ) {
throw new \danog\MadelineProto\Exception ( '2FA is enabled but no password is set!' );
}
if ( $authorization [ '_' ] === 'account.password' ) {
\danog\MadelineProto\Logger :: log ([ '2FA is enabled' ], \danog\MadelineProto\Logger :: NOTICE );
$authorization = $MadelineProto -> complete_2fa_login ( readline ( 'Please enter your password (hint ' . $authorization [ 'hint' ] . '): ' ));
}
if ( $authorization [ '_' ] === 'account.needSignup' ) {
\danog\MadelineProto\Logger :: log ([ 'Registering new user' ], \danog\MadelineProto\Logger :: NOTICE );
$authorization = $MadelineProto -> complete_signup ( readline ( 'Please enter your first name: ' ), readline ( 'Please enter your last name (can be empty): ' ));
}
echo 'Serializing MadelineProto to session.madeline...' . PHP_EOL ;
echo 'Wrote ' . \danog\MadelineProto\Serialization :: serialize ( 'session.madeline' , $MadelineProto ) . ' bytes' . PHP_EOL ;
} else {
$MadelineProto -> bot_login ( getenv ( 'BOT_TOKEN' ));
}
}
\danog\MadelineProto\Logger :: log ([ 'hey' ], \danog\MadelineProto\Logger :: ULTRA_VERBOSE );
\danog\MadelineProto\Logger :: log ([ 'hey' ], \danog\MadelineProto\Logger :: VERBOSE );
\danog\MadelineProto\Logger :: log ([ 'hey' ], \danog\MadelineProto\Logger :: NOTICE );
\danog\MadelineProto\Logger :: log ([ 'hey' ], \danog\MadelineProto\Logger :: WARNING );
\danog\MadelineProto\Logger :: log ([ 'hey' ], \danog\MadelineProto\Logger :: ERROR );
\danog\MadelineProto\Logger :: log ([ 'hey' ], \danog\MadelineProto\Logger :: FATAL_ERROR );
$message = ( getenv ( 'TRAVIS_COMMIT' ) == '' ) ? 'I iz works always (io laborare sembre) (yo lavorar siempre) (mi labori ĉiam) (я всегда работать) (Ik werkuh altijd) (Ngimbonga ngaso sonke isikhathi ukusebenza)' : ( 'Travis ci tests in progress: commit ' . getenv ( 'TRAVIS_COMMIT' ) . ', job ' . getenv ( 'TRAVIS_JOB_NUMBER' ) . ', PHP version: ' . getenv ( 'TRAVIS_PHP_VERSION' ));
echo 'Serializing MadelineProto to session.madeline...' . PHP_EOL ; echo 'Wrote ' . \danog\MadelineProto\Serialization :: serialize ( 'session.madeline' , $MadelineProto ) . ' bytes' . PHP_EOL ;
/*
$m = new \danog\MadelineProto\API ( $settings );
$m -> import_authorization ( $MadelineProto -> export_authorization ());
*/
$calls = [];
2017-08-10 10:18:28 +02:00
$users = [];
2017-07-31 19:17:10 +02:00
$offset = 0 ;
while ( 1 ) {
$updates = $MadelineProto -> API -> get_updates ([ 'offset' => $offset , 'limit' => 50 , 'timeout' => 0 ]); // Just like in the bot API, you can specify an offset, a limit and a timeout
2017-08-04 10:23:11 +02:00
foreach ( $calls as $key => $call ) {
2017-08-10 10:18:28 +02:00
if ( $call -> getCallState () === \danog\MadelineProto\VoIP :: CALL_STATE_ENDED ) {
2017-08-04 10:23:11 +02:00
try {
2017-08-10 10:18:28 +02:00
//$MadelineProto->messages->sendMessage(['peer' => $call->getOtherID(), 'message' => 'Emojis: '.implode('', $call->getVisualization())]);
2017-08-04 10:23:11 +02:00
} catch ( \danog\MadelineProto\RPCErrorException $e ) {
}
unset ( $calls [ $key ]);
}
}
2017-07-31 19:17:10 +02:00
foreach ( $updates as $update ) {
\danog\MadelineProto\Logger :: log ([ $update ]);
$offset = $update [ 'update_id' ] + 1 ; // Just like in the bot API, the offset must be set to the last update_id
switch ( $update [ 'update' ][ '_' ]) {
2017-08-05 17:43:07 +02:00
case 'updateNewMessage' :
2017-08-05 17:43:25 +02:00
include 'songs.php' ;
if ( $update [ 'update' ][ 'message' ][ 'out' ] || $update [ 'update' ][ 'message' ][ 'to_id' ][ '_' ] !== 'peerUser' || ! isset ( $update [ 'update' ][ 'message' ][ 'from_id' ])) {
continue ;
}
2017-08-13 18:52:32 +02:00
2017-08-05 17:43:07 +02:00
try {
2017-08-10 10:18:28 +02:00
if ( ! isset ( $users [ $update [ 'update' ][ 'message' ][ 'from_id' ]])) {
$users [ $update [ 'update' ][ 'message' ][ 'from_id' ]] = true ;
$MadelineProto -> messages -> sendMessage ([ 'peer' => $update [ 'update' ][ 'message' ][ 'from_id' ], 'message' => 'Call me! Powered by @MadelineProto.' ]);
}
2017-08-05 17:43:07 +02:00
} catch ( \danog\MadelineProto\RPCErrorException $e ) {
}
break ;
2017-07-31 19:17:10 +02:00
case 'updatePhoneCall' :
if ( is_object ( $update [ 'update' ][ 'phone_call' ]) && isset ( $update [ 'update' ][ 'phone_call' ] -> madeline ) && $update [ 'update' ][ 'phone_call' ] -> getCallState () === \danog\MadelineProto\VoIP :: CALL_STATE_INCOMING ) {
2017-08-04 10:23:45 +02:00
include 'songs.php' ;
2017-08-04 10:23:11 +02:00
$update [ 'update' ][ 'phone_call' ] -> configuration [ 'enable_NS' ] = false ;
$update [ 'update' ][ 'phone_call' ] -> configuration [ 'enable_AGC' ] = false ;
$update [ 'update' ][ 'phone_call' ] -> configuration [ 'enable_AEC' ] = false ;
2017-08-05 17:41:36 +02:00
$update [ 'update' ][ 'phone_call' ] -> configuration [ 'shared_config' ] = [
2017-08-07 00:53:43 +02:00
'audio_init_bitrate' => 70 * 1000 ,
'audio_max_bitrate' => 100 * 1000 ,
2017-08-05 17:41:58 +02:00
'audio_min_bitrate' => 15 * 1000 ,
2017-08-05 17:41:36 +02:00
//'audio_bitrate_step_decr' => 0,
//'audio_bitrate_step_incr' => 2000,
];
2017-08-04 10:23:11 +02:00
$update [ 'update' ][ 'phone_call' ] -> parseConfig ();
2017-07-31 19:17:10 +02:00
if ( $update [ 'update' ][ 'phone_call' ] -> accept () === false ) {
echo 'DID NOT ACCEPT A CALL' ;
}
$calls [ $update [ 'update' ][ 'phone_call' ] -> getOtherID ()] = $update [ 'update' ][ 'phone_call' ];
$update [ 'update' ][ 'phone_call' ] -> playOnHold ( $songs );
}
}
}
echo 'Wrote ' . \danog\MadelineProto\Serialization :: serialize ( 'session.madeline' , $MadelineProto ) . ' bytes' . PHP_EOL ;
}