2017-06-01 22:21:15 +02:00
#!/usr/bin/env php
< ? php
2019-10-28 22:39:23 +01:00
/**
* Secret chat bot .
*
2020-02-17 14:13:46 +01:00
* Copyright 2016 - 2020 Daniil Gentili
2019-10-28 22:39:23 +01:00
* ( 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 />.
*
* @ author Daniil Gentili < daniil @ daniil . it >
2023-01-04 12:43:01 +01:00
* @ copyright 2016 - 2023 Daniil Gentili < daniil @ daniil . it >
2019-10-28 22:39:23 +01:00
* @ license https :// opensource . org / licenses / AGPL - 3.0 AGPLv3
2019-10-31 15:07:35 +01:00
* @ link https :// docs . madelineproto . xyz MadelineProto documentation
2019-10-28 22:39:23 +01:00
*/
2022-12-30 21:54:44 +01:00
use danog\MadelineProto\EventHandler ;
2023-01-20 15:30:13 +01:00
use danog\MadelineProto\Logger ;
2021-12-09 13:25:14 +01:00
use danog\MadelineProto\Settings ;
2020-02-25 19:10:49 +01:00
2023-01-20 13:49:44 +01:00
use function Amp\async ;
use function Amp\Future\await ;
2018-03-23 16:39:58 +01:00
/*
Documentation rework (#349)
* Documentation rework
* Apply fixes from StyleCI
* Documentation fixes
* Login as bot through web/cli API, allow using invite links in joinChannel, full invite links in importChatInvite and checkChatInvite, non-invite links in importChatInvite
* Apply fixes from StyleCI
* Logging fixes
* Build docs
* Add methods to modify start template, bugfix to logging and keyboard conversion
* Add TL documentator
* Document MTProto methods
* Documenting methods...
* 7% documented
* Bugfixes
* Update docs
* Update docs
* Simplify file management
* Implement automatic object conversion for media, and more awesome stuff
* Implement automatic object conversion for media, and more awesome stuff
* Implement event update handler and file upload/download callback
* Auto-detect mime type, duration, width and height of media
* Update docs
* Document new file functions
* Fix links
* Fix links
* Update bot.php to use event loop
* Implement webhook update handler and forking in main loop
* Build docs
* Better docs
* Fixes to secret chats
* Almost finished updating docs
* Bugfixes, implemented infinite loop for loop() method, almost finished docs
* Finish writing docs
* Add automatic documentation builder script
* Finished writing docs
2018-03-20 12:48:05 +01:00
* Various ways to load MadelineProto
*/
2022-12-08 20:16:40 +01:00
if ( file_exists ( __DIR__ . '/../vendor/autoload.php' )) {
2019-10-28 22:39:23 +01:00
include 'vendor/autoload.php' ;
} else {
2022-12-08 20:16:40 +01:00
if ( ! file_exists ( 'madeline.php' )) {
copy ( 'https://phar.madelineproto.xyz/madeline.php' , 'madeline.php' );
Documentation rework (#349)
* Documentation rework
* Apply fixes from StyleCI
* Documentation fixes
* Login as bot through web/cli API, allow using invite links in joinChannel, full invite links in importChatInvite and checkChatInvite, non-invite links in importChatInvite
* Apply fixes from StyleCI
* Logging fixes
* Build docs
* Add methods to modify start template, bugfix to logging and keyboard conversion
* Add TL documentator
* Document MTProto methods
* Documenting methods...
* 7% documented
* Bugfixes
* Update docs
* Update docs
* Simplify file management
* Implement automatic object conversion for media, and more awesome stuff
* Implement automatic object conversion for media, and more awesome stuff
* Implement event update handler and file upload/download callback
* Auto-detect mime type, duration, width and height of media
* Update docs
* Document new file functions
* Fix links
* Fix links
* Update bot.php to use event loop
* Implement webhook update handler and forking in main loop
* Build docs
* Better docs
* Fixes to secret chats
* Almost finished updating docs
* Bugfixes, implemented infinite loop for loop() method, almost finished docs
* Finish writing docs
* Add automatic documentation builder script
* Finished writing docs
2018-03-20 12:48:05 +01:00
}
include 'madeline.php' ;
2017-06-01 22:21:15 +02:00
}
2022-12-30 21:54:44 +01:00
class SecretHandler extends EventHandler
Documentation rework (#349)
* Documentation rework
* Apply fixes from StyleCI
* Documentation fixes
* Login as bot through web/cli API, allow using invite links in joinChannel, full invite links in importChatInvite and checkChatInvite, non-invite links in importChatInvite
* Apply fixes from StyleCI
* Logging fixes
* Build docs
* Add methods to modify start template, bugfix to logging and keyboard conversion
* Add TL documentator
* Document MTProto methods
* Documenting methods...
* 7% documented
* Bugfixes
* Update docs
* Update docs
* Simplify file management
* Implement automatic object conversion for media, and more awesome stuff
* Implement automatic object conversion for media, and more awesome stuff
* Implement event update handler and file upload/download callback
* Auto-detect mime type, duration, width and height of media
* Update docs
* Document new file functions
* Fix links
* Fix links
* Update bot.php to use event loop
* Implement webhook update handler and forking in main loop
* Build docs
* Better docs
* Fixes to secret chats
* Almost finished updating docs
* Bugfixes, implemented infinite loop for loop() method, almost finished docs
* Finish writing docs
* Add automatic documentation builder script
* Finished writing docs
2018-03-20 12:48:05 +01:00
{
2023-01-20 13:49:44 +01:00
private array $sent = [];
2020-02-23 19:28:42 +01:00
/**
* @ var int | string Username or ID of bot admin
*/
const ADMIN = " danogentili " ; // Change this
/**
* Get peer ( s ) where to report errors .
*
* @ return int | string | array
*/
public function getReportPeers ()
{
return [ self :: ADMIN ];
}
/**
* Handle updates from users .
*
* @ param array $update Update
*/
2023-01-20 13:49:44 +01:00
public function onUpdateNewMessage ( array $update ) : void
2020-02-23 19:28:42 +01:00
{
2023-01-24 14:28:49 +01:00
if (( $update [ 'message' ][ 'message' ] ? ? '' ) === 'request' ) {
2023-01-20 13:49:44 +01:00
$this -> requestSecretChat ( $update );
2020-02-23 19:28:42 +01:00
}
2023-01-24 14:28:49 +01:00
if (( $update [ 'message' ][ 'message' ] ? ? '' ) === 'ping' ) {
2023-01-20 13:49:44 +01:00
$this -> messages -> sendMessage ([ 'message' => 'pong' , 'peer' => $update ]);
2020-10-18 18:41:53 +02:00
}
2020-02-23 19:28:42 +01:00
}
/**
* Handle secret chat messages .
*
* @ param array $update Update
*/
2023-01-20 13:49:44 +01:00
public function onUpdateNewEncryptedMessage ( array $update ) : void
2018-03-23 16:39:58 +01:00
{
2020-10-18 15:41:06 +02:00
if ( isset ( $update [ 'message' ][ 'decrypted_message' ][ 'media' ])) {
2023-01-20 13:49:44 +01:00
$this -> logger ( $this -> downloadToDir ( $update , '.' ));
Documentation rework (#349)
* Documentation rework
* Apply fixes from StyleCI
* Documentation fixes
* Login as bot through web/cli API, allow using invite links in joinChannel, full invite links in importChatInvite and checkChatInvite, non-invite links in importChatInvite
* Apply fixes from StyleCI
* Logging fixes
* Build docs
* Add methods to modify start template, bugfix to logging and keyboard conversion
* Add TL documentator
* Document MTProto methods
* Documenting methods...
* 7% documented
* Bugfixes
* Update docs
* Update docs
* Simplify file management
* Implement automatic object conversion for media, and more awesome stuff
* Implement automatic object conversion for media, and more awesome stuff
* Implement event update handler and file upload/download callback
* Auto-detect mime type, duration, width and height of media
* Update docs
* Document new file functions
* Fix links
* Fix links
* Update bot.php to use event loop
* Implement webhook update handler and forking in main loop
* Build docs
* Better docs
* Fixes to secret chats
* Almost finished updating docs
* Bugfixes, implemented infinite loop for loop() method, almost finished docs
* Finish writing docs
* Add automatic documentation builder script
* Finished writing docs
2018-03-20 12:48:05 +01:00
}
2020-10-18 15:41:06 +02:00
if ( isset ( $this -> sent [ $update [ 'message' ][ 'chat_id' ]])) {
return ;
}
$secret_media = [];
// Photo uploaded as document, secret chat
2022-12-08 20:16:40 +01:00
$secret_media [ 'document_photo' ] = [ 'peer' => $update , 'file' => 'tests/faust.jpg' , 'message' => [ '_' => 'decryptedMessage' , 'ttl' => 0 , 'message' => '' , 'media' => [ '_' => 'decryptedMessageMediaDocument' , 'thumb' => file_get_contents ( 'tests/faust.preview.jpg' ), 'thumb_w' => 90 , 'thumb_h' => 90 , 'mime_type' => mime_content_type ( 'tests/faust.jpg' ), 'caption' => 'This file was uploaded using MadelineProto' , 'file_name' => 'faust.jpg' , 'size' => filesize ( 'tests/faust.jpg' ), 'attributes' => [[ '_' => 'documentAttributeImageSize' , 'w' => 1280 , 'h' => 914 ]]]]];
2020-10-18 15:41:06 +02:00
// Photo, secret chat
2022-12-08 20:16:40 +01:00
$secret_media [ 'photo' ] = [ 'peer' => $update , 'file' => 'tests/faust.jpg' , 'message' => [ '_' => 'decryptedMessage' , 'ttl' => 0 , 'message' => '' , 'media' => [ '_' => 'decryptedMessageMediaPhoto' , 'thumb' => file_get_contents ( 'tests/faust.preview.jpg' ), 'thumb_w' => 90 , 'thumb_h' => 90 , 'caption' => 'This file was uploaded using MadelineProto' , 'size' => filesize ( 'tests/faust.jpg' ), 'w' => 1280 , 'h' => 914 ]]];
2020-10-18 15:41:06 +02:00
// GIF, secret chat
2022-12-08 20:16:40 +01:00
$secret_media [ 'gif' ] = [ 'peer' => $update , 'file' => 'tests/pony.mp4' , 'message' => [ '_' => 'decryptedMessage' , 'ttl' => 0 , 'message' => '' , 'media' => [ '_' => 'decryptedMessageMediaDocument' , 'thumb' => file_get_contents ( 'tests/pony.preview.jpg' ), 'thumb_w' => 90 , 'thumb_h' => 90 , 'mime_type' => mime_content_type ( 'tests/pony.mp4' ), 'caption' => 'test' , 'file_name' => 'pony.mp4' , 'size' => filesize ( 'tests/faust.jpg' ), 'attributes' => [[ '_' => 'documentAttributeAnimated' ]]]]];
2020-10-18 15:41:06 +02:00
// Sticker, secret chat
2022-12-08 20:16:40 +01:00
$secret_media [ 'sticker' ] = [ 'peer' => $update , 'file' => 'tests/lel.webp' , 'message' => [ '_' => 'decryptedMessage' , 'ttl' => 0 , 'message' => '' , 'media' => [ '_' => 'decryptedMessageMediaDocument' , 'thumb' => file_get_contents ( 'tests/lel.preview.jpg' ), 'thumb_w' => 90 , 'thumb_h' => 90 , 'mime_type' => mime_content_type ( 'tests/lel.webp' ), 'caption' => 'test' , 'file_name' => 'lel.webp' , 'size' => filesize ( 'tests/lel.webp' ), 'attributes' => [[ '_' => 'documentAttributeSticker' , 'alt' => 'LEL' , 'stickerset' => [ '_' => 'inputStickerSetEmpty' ]]]]]];
2020-10-18 15:41:06 +02:00
// Document, secrey chat
2022-12-08 20:16:40 +01:00
$secret_media [ 'document' ] = [ 'peer' => $update , 'file' => 'tests/60' , 'message' => [ '_' => 'decryptedMessage' , 'ttl' => 0 , 'message' => '' , 'media' => [ '_' => 'decryptedMessageMediaDocument' , 'thumb' => file_get_contents ( 'tests/faust.preview.jpg' ), 'thumb_w' => 90 , 'thumb_h' => 90 , 'mime_type' => 'magic/magic' , 'caption' => 'test' , 'file_name' => 'magic.magic' , 'size' => filesize ( 'tests/60' ), 'attributes' => [[ '_' => 'documentAttributeFilename' , 'file_name' => 'fairy' ]]]]];
2020-10-18 15:41:06 +02:00
// Video, secret chat
2022-12-08 20:16:40 +01:00
$secret_media [ 'video' ] = [ 'peer' => $update , 'file' => 'tests/swing.mp4' , 'message' => [ '_' => 'decryptedMessage' , 'ttl' => 0 , 'message' => '' , 'media' => [ '_' => 'decryptedMessageMediaDocument' , 'thumb' => file_get_contents ( 'tests/swing.preview.jpg' ), 'thumb_w' => 90 , 'thumb_h' => 90 , 'mime_type' => mime_content_type ( 'tests/swing.mp4' ), 'caption' => 'test' , 'file_name' => 'swing.mp4' , 'size' => filesize ( 'tests/swing.mp4' ), 'attributes' => [[ '_' => 'documentAttributeVideo' , 'duration' => 5 , 'w' => 1280 , 'h' => 720 ]]]]];
2020-10-18 15:41:06 +02:00
// audio, secret chat
2022-12-08 20:16:40 +01:00
$secret_media [ 'audio' ] = [ 'peer' => $update , 'file' => 'tests/mosconi.mp3' , 'message' => [ '_' => 'decryptedMessage' , 'ttl' => 0 , 'message' => '' , 'media' => [ '_' => 'decryptedMessageMediaDocument' , 'thumb' => file_get_contents ( 'tests/faust.preview.jpg' ), 'thumb_w' => 90 , 'thumb_h' => 90 , 'mime_type' => mime_content_type ( 'tests/mosconi.mp3' ), 'caption' => 'test' , 'file_name' => 'mosconi.mp3' , 'size' => filesize ( 'tests/mosconi.mp3' ), 'attributes' => [[ '_' => 'documentAttributeAudio' , 'voice' => false , 'duration' => 1 , 'title' => 'AH NON LO SO IO' , 'performer' => 'IL DIO GERMANO MOSCONI' ]]]]];
2020-10-18 15:41:06 +02:00
2022-12-08 20:16:40 +01:00
$secret_media [ 'voice' ] = [ 'peer' => $update , 'file' => 'tests/mosconi.mp3' , 'message' => [ '_' => 'decryptedMessage' , 'ttl' => 0 , 'message' => '' , 'media' => [ '_' => 'decryptedMessageMediaDocument' , 'thumb' => file_get_contents ( 'tests/faust.preview.jpg' ), 'thumb_w' => 90 , 'thumb_h' => 90 , 'mime_type' => mime_content_type ( 'tests/mosconi.mp3' ), 'caption' => 'test' , 'file_name' => 'mosconi.mp3' , 'size' => filesize ( 'tests/mosconi.mp3' ), 'attributes' => [[ '_' => 'documentAttributeAudio' , 'voice' => true , 'duration' => 1 , 'title' => 'AH NON LO SO IO' , 'performer' => 'IL DIO GERMANO MOSCONI' ]]]]];
2020-10-18 15:41:06 +02:00
2023-01-20 13:49:44 +01:00
$promises = [];
2020-10-18 15:41:06 +02:00
foreach ( $secret_media as $type => $smessage ) {
2023-01-20 13:49:44 +01:00
$promises [] = async ( $this -> messages -> sendEncryptedFile ( ... ), $smessage );
2020-10-18 15:41:06 +02:00
}
2023-01-20 13:49:44 +01:00
await ( $promises );
2020-10-18 15:41:06 +02:00
$i = 0 ;
while ( $i < 10 ) {
$this -> logger ( " SENDING MESSAGE $i TO " . $update [ 'message' ][ 'chat_id' ]);
// You can also use the sendEncrypted parameter for more options in secret chats
2023-01-20 13:49:44 +01:00
$this -> messages -> sendMessage ([ 'peer' => $update , 'message' => ( string ) ( $i ++ )]);
2020-10-18 15:41:06 +02:00
}
$this -> sent [ $update [ 'message' ][ 'chat_id' ]] = true ;
Documentation rework (#349)
* Documentation rework
* Apply fixes from StyleCI
* Documentation fixes
* Login as bot through web/cli API, allow using invite links in joinChannel, full invite links in importChatInvite and checkChatInvite, non-invite links in importChatInvite
* Apply fixes from StyleCI
* Logging fixes
* Build docs
* Add methods to modify start template, bugfix to logging and keyboard conversion
* Add TL documentator
* Document MTProto methods
* Documenting methods...
* 7% documented
* Bugfixes
* Update docs
* Update docs
* Simplify file management
* Implement automatic object conversion for media, and more awesome stuff
* Implement automatic object conversion for media, and more awesome stuff
* Implement event update handler and file upload/download callback
* Auto-detect mime type, duration, width and height of media
* Update docs
* Document new file functions
* Fix links
* Fix links
* Update bot.php to use event loop
* Implement webhook update handler and forking in main loop
* Build docs
* Better docs
* Fixes to secret chats
* Almost finished updating docs
* Bugfixes, implemented infinite loop for loop() method, almost finished docs
* Finish writing docs
* Add automatic documentation builder script
* Finished writing docs
2018-03-20 12:48:05 +01:00
}
2017-06-01 22:21:15 +02:00
}
Documentation rework (#349)
* Documentation rework
* Apply fixes from StyleCI
* Documentation fixes
* Login as bot through web/cli API, allow using invite links in joinChannel, full invite links in importChatInvite and checkChatInvite, non-invite links in importChatInvite
* Apply fixes from StyleCI
* Logging fixes
* Build docs
* Add methods to modify start template, bugfix to logging and keyboard conversion
* Add TL documentator
* Document MTProto methods
* Documenting methods...
* 7% documented
* Bugfixes
* Update docs
* Update docs
* Simplify file management
* Implement automatic object conversion for media, and more awesome stuff
* Implement automatic object conversion for media, and more awesome stuff
* Implement event update handler and file upload/download callback
* Auto-detect mime type, duration, width and height of media
* Update docs
* Document new file functions
* Fix links
* Fix links
* Update bot.php to use event loop
* Implement webhook update handler and forking in main loop
* Build docs
* Better docs
* Fixes to secret chats
* Almost finished updating docs
* Bugfixes, implemented infinite loop for loop() method, almost finished docs
* Finish writing docs
* Add automatic documentation builder script
* Finished writing docs
2018-03-20 12:48:05 +01:00
2021-12-09 13:25:14 +01:00
$settings = new Settings ;
2023-01-20 15:30:13 +01:00
$settings -> getLogger () -> setLevel ( Logger :: ULTRA_VERBOSE );
2018-03-30 18:07:54 +02:00
2021-12-09 13:25:14 +01:00
SecretHandler :: startAndLoop ( 'secret.madeline' , $settings );