Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
TelegramBot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kulya
TelegramBot
Commits
692bd605
Commit
692bd605
authored
Apr 19, 2016
by
Marco Boretto
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #150 from jacklul/feature/whoisid_clean
Add /whois command
parents
bc076e05
d42c9b6f
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
222 additions
and
20 deletions
+222
-20
ChatsCommand.php
src/Commands/AdminCommands/ChatsCommand.php
+17
-10
WhoisCommand.php
src/Commands/AdminCommands/WhoisCommand.php
+159
-0
GenericCommand.php
src/Commands/SystemCommands/GenericCommand.php
+6
-1
DB.php
src/DB.php
+40
-9
No files found.
src/Commands/AdminCommands/ChatsCommand.php
View file @
692bd605
...
...
@@ -41,11 +41,13 @@ class ChatsCommand extends AdminCommand
$text
=
trim
(
$message
->
getText
(
true
));
$results
=
DB
::
selectChats
(
true
,
//Se
nd to
groups (group chat)
true
,
//Se
nd to supergroups (single
chat)
true
,
//Se
nd to
users (single chat)
true
,
//Se
lect
groups (group chat)
true
,
//Se
lect supergroups (super group
chat)
true
,
//Se
lect
users (single chat)
null
,
//'yyyy-mm-dd hh:mm:ss' date range from
null
//'yyyy-mm-dd hh:mm:ss' date range to
null
,
//'yyyy-mm-dd hh:mm:ss' date range to
null
,
//Specific chat_id to select
(
$text
===
''
||
$text
==
'*'
)
?
null
:
$text
//Text to search in user/group name
);
$user_chats
=
0
;
...
...
@@ -65,21 +67,26 @@ class ChatsCommand extends AdminCommand
$result
[
'id'
]
=
$result
[
'chat_id'
];
$chat
=
new
Chat
(
$result
);
if
(
$chat
->
isPrivateChat
()
&&
(
$text
===
''
||
$text
==
'*'
||
strpos
(
strtolower
(
$chat
->
tryMention
()),
strtolower
(
$text
))
!==
false
||
strpos
(
strtolower
(
$chat
->
getFirstName
()),
strtolower
(
$text
))
!==
false
||
strpos
(
strtolower
(
$chat
->
getLastName
()),
strtolower
(
$text
))
!==
false
))
{
$whois
=
$chat
->
getId
();
if
(
$this
->
telegram
->
getCommandObject
(
'whois'
))
{
$whois
=
'/whois'
.
str_replace
(
'-'
,
'g'
,
$chat
->
getId
());
//We can't use '-' in command because part of it will become unclickable
}
if
(
$chat
->
isPrivateChat
())
{
if
(
$text
!=
''
)
{
$text_back
.=
'- P '
.
$chat
->
tryMention
()
.
'
('
.
$chat
->
getId
()
.
')
'
.
"
\n
"
;
$text_back
.=
'- P '
.
$chat
->
tryMention
()
.
'
['
.
$whois
.
']
'
.
"
\n
"
;
}
++
$user_chats
;
}
elseif
(
$chat
->
isSuperGroup
()
&&
(
$text
===
''
||
$text
==
'*'
||
strpos
(
strtolower
(
$chat
->
tryMention
()),
strtolower
(
$text
))
!==
false
)
)
{
}
elseif
(
$chat
->
isSuperGroup
())
{
if
(
$text
!=
''
)
{
$text_back
.=
'- S '
.
$chat
->
getTitle
()
.
'
('
.
$chat
->
getId
()
.
')
'
.
"
\n
"
;
$text_back
.=
'- S '
.
$chat
->
getTitle
()
.
'
['
.
$whois
.
']
'
.
"
\n
"
;
}
++
$super_group_chats
;
}
elseif
(
$chat
->
isGroupChat
()
&&
(
$text
===
''
||
$text
==
'*'
||
strpos
(
strtolower
(
$chat
->
tryMention
()),
strtolower
(
$text
))
!==
false
)
)
{
}
elseif
(
$chat
->
isGroupChat
())
{
if
(
$text
!=
''
)
{
$text_back
.=
'- G '
.
$chat
->
getTitle
()
.
'
('
.
$chat
->
getId
()
.
')
'
.
"
\n
"
;
$text_back
.=
'- G '
.
$chat
->
getTitle
()
.
'
['
.
$whois
.
']
'
.
"
\n
"
;
}
++
$group_chats
;
...
...
src/Commands/AdminCommands/WhoisCommand.php
0 → 100644
View file @
692bd605
<?php
/**
* This file is part of the TelegramBot package.
*
* (c) Avtandil Kikabidze aka LONGMAN <akalongman@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*
* Written by Jack'lul <jacklul@jacklul.com>
*/
namespace
Longman\TelegramBot\Commands\AdminCommands
;
use
Longman\TelegramBot\Commands\AdminCommand
;
use
Longman\TelegramBot\DB
;
use
Longman\TelegramBot\Entities\Chat
;
use
Longman\TelegramBot\Request
;
/**
* Admin "/whois" command
*/
class
WhoisCommand
extends
AdminCommand
{
/**#@+
* {@inheritdoc}
*/
protected
$name
=
'whois'
;
protected
$description
=
'Lookup user or group info'
;
protected
$usage
=
'/whois <id> or /whois <search string>'
;
protected
$version
=
'1.1.0'
;
protected
$need_mysql
=
true
;
/**#@-*/
/**
* {@inheritdoc}
*/
public
function
execute
()
{
$message
=
$this
->
getMessage
();
$chat_id
=
$message
->
getChat
()
->
getId
();
$command
=
$message
->
getCommand
();
$text
=
trim
(
$message
->
getText
(
true
));
$data
=
[
'chat_id'
=>
$chat_id
];
//No point in replying to messages in private chats
if
(
!
$message
->
getChat
()
->
isPrivateChat
())
{
$data
[
'reply_to_message_id'
]
=
$message
->
getMessageId
();
}
if
(
$command
!==
'whois'
)
{
$text
=
substr
(
$command
,
5
);
//We need that '-' now, bring it back
if
((
substr
(
$text
,
0
,
1
)
==
'g'
))
{
$text
=
str_replace
(
'g'
,
'-'
,
$text
);
}
}
if
(
$text
===
''
)
{
$text
=
'Provide the id to lookup: /whois <id>'
;
}
else
{
$user_id
=
$text
;
if
(
is_numeric
(
$text
))
{
$result
=
DB
::
selectChats
(
true
,
//Select groups (group chat)
true
,
//Select supergroups (super group chat)
true
,
//Select users (single chat)
null
,
//'yyyy-mm-dd hh:mm:ss' date range from
null
,
//'yyyy-mm-dd hh:mm:ss' date range to
$user_id
//Specific chat_id to select
);
$result
=
$result
[
0
];
}
else
{
$results
=
DB
::
selectChats
(
true
,
//Select groups (group chat)
true
,
//Select supergroups (super group chat)
true
,
//Select users (single chat)
null
,
//'yyyy-mm-dd hh:mm:ss' date range from
null
,
//'yyyy-mm-dd hh:mm:ss' date range to
null
,
//Specific chat_id to select
$text
//Text to search in user/group name
);
if
(
is_array
(
$results
)
&&
count
(
$results
)
==
1
)
{
$result
=
$results
[
0
];
}
}
if
(
is_array
(
$result
))
{
$result
[
'id'
]
=
$result
[
'chat_id'
];
$chat
=
new
Chat
(
$result
);
$user_id
=
$result
[
'id'
];
$created_at
=
$result
[
'chat_created_at'
];
$updated_at
=
$result
[
'chat_updated_at'
];
$old_id
=
$result
[
'old_id'
];
}
if
(
$chat
!=
null
)
{
if
(
$chat
->
isPrivateChat
())
{
$text
=
'User ID: '
.
$user_id
.
"
\n
"
;
$text
.=
'Name: '
.
$chat
->
getFirstName
()
.
' '
.
$chat
->
getLastName
()
.
"
\n
"
;
if
(
$chat
->
getUsername
()
!=
''
)
{
$text
.=
'Username: @'
.
$chat
->
getUsername
()
.
"
\n
"
;
}
$text
.=
'First time seen: '
.
$created_at
.
"
\n
"
;
$text
.=
'Last activity: '
.
$updated_at
.
"
\n
"
;
//Code from Whoami command
$limit
=
10
;
$offset
=
null
;
$ServerResponse
=
Request
::
getUserProfilePhotos
([
'user_id'
=>
$user_id
,
'limit'
=>
$limit
,
'offset'
=>
$offset
,
]);
if
(
$ServerResponse
->
isOk
())
{
$UserProfilePhoto
=
$ServerResponse
->
getResult
();
$totalcount
=
$UserProfilePhoto
->
getTotalCount
();
}
else
{
$totalcount
=
0
;
}
if
(
$totalcount
>
0
)
{
$photos
=
$UserProfilePhoto
->
getPhotos
();
$photo
=
$photos
[
0
][
2
];
$file_id
=
$photo
->
getFileId
();
$data
[
'photo'
]
=
$file_id
;
$data
[
'caption'
]
=
$text
;
return
Request
::
sendPhoto
(
$data
);
}
}
elseif
(
$chat
->
isGroupChat
())
{
$text
=
'Chat ID: '
.
$user_id
.
(
!
empty
(
$old_id
)
?
' (previously: '
.
$old_id
.
')'
:
''
)
.
"
\n
"
;
$text
.=
'Type: '
.
ucfirst
(
$chat
->
getType
())
.
"
\n
"
;
$text
.=
'Title: '
.
$chat
->
getTitle
()
.
"
\n
"
;
$text
.=
'First time added to group: '
.
$created_at
.
"
\n
"
;
$text
.=
'Last activity: '
.
$updated_at
.
"
\n
"
;
}
}
elseif
(
is_array
(
$results
)
&&
count
(
$results
)
>
1
)
{
$text
=
'Multiple chats matched!'
;
}
else
{
$text
=
'Chat not found!'
;
}
}
$data
[
'text'
]
=
$text
;
return
Request
::
sendMessage
(
$data
);
}
}
src/Commands/SystemCommands/GenericCommand.php
View file @
692bd605
...
...
@@ -34,8 +34,13 @@ class GenericCommand extends SystemCommand
$message
=
$this
->
getMessage
();
//You can use $command as param
$command
=
$message
->
getCommand
();
$chat_id
=
$message
->
getChat
()
->
getId
();
$user_id
=
$message
->
getFrom
()
->
getId
();
$command
=
$message
->
getCommand
();
if
(
in_array
(
$user_id
,
$this
->
telegram
->
getAdminList
())
&&
strtolower
(
substr
(
$command
,
0
,
5
))
==
'whois'
)
{
return
$this
->
telegram
->
executeCommand
(
'whois'
,
$this
->
update
);
}
$data
=
[
'chat_id'
=>
$chat_id
,
...
...
src/DB.php
View file @
692bd605
...
...
@@ -704,7 +704,9 @@ class DB
$select_super_groups
=
true
,
$select_users
=
true
,
$date_from
=
null
,
$date_to
=
null
$date_to
=
null
,
$chat_id
=
null
,
$text
=
null
)
{
if
(
!
self
::
isDbConnected
())
{
return
false
;
...
...
@@ -717,26 +719,40 @@ class DB
try
{
$query
=
'SELECT * ,
'
.
TB_CHAT
.
'.`id` AS `chat_id`,
'
.
TB_CHAT
.
'.`updated_at` AS `chat_updated_at`,
'
.
TB_USER
.
'.`id` AS `user_id`
FROM `'
.
TB_CHAT
.
'` LEFT JOIN `'
.
TB_USER
.
'`
ON '
.
TB_CHAT
.
'.`id`='
.
TB_USER
.
'.`id`'
;
'
.
TB_CHAT
.
'.`created_at` AS `chat_created_at`,
'
.
TB_CHAT
.
'.`updated_at` AS `chat_updated_at`
'
.
((
$select_users
)
?
', '
.
TB_USER
.
'.`id` AS `user_id` FROM `'
.
TB_CHAT
.
'` LEFT JOIN `'
.
TB_USER
.
'`
ON '
.
TB_CHAT
.
'.`id`='
.
TB_USER
.
'.`id`'
:
'FROM `'
.
TB_CHAT
.
'`'
);
//Building parts of query
$chat_or_user
=
''
;
$where
=
[];
$tokens
=
[];
if
(
!
$select_groups
||
!
$select_users
||
!
$select_super_groups
)
{
$chat_or_user
=
''
;
if
(
$select_groups
)
{
$
where
[]
=
TB_CHAT
.
'.`type` = "group"'
;
$
chat_or_user
.
=
TB_CHAT
.
'.`type` = "group"'
;
}
if
(
$select_super_groups
)
{
$where
[]
=
TB_CHAT
.
'.`type` = "supergroup"'
;
if
(
!
empty
(
$chat_or_user
))
{
$chat_or_user
.=
' OR '
;
}
$chat_or_user
.=
TB_CHAT
.
'.`type` = "supergroup"'
;
}
if
(
$select_users
)
{
$where
[]
=
TB_CHAT
.
'.`type` = "private"'
;
if
(
!
empty
(
$chat_or_user
))
{
$chat_or_user
.=
' OR '
;
}
$chat_or_user
.=
TB_CHAT
.
'.`type` = "private"'
;
}
$where
[]
=
'('
.
$chat_or_user
.
')'
;
}
if
(
!
is_null
(
$date_from
))
{
...
...
@@ -749,6 +765,21 @@ class DB
$tokens
[
':date_to'
]
=
$date_to
;
}
if
(
!
is_null
(
$chat_id
))
{
$where
[]
=
TB_CHAT
.
'.`id` = :chat_id'
;
$tokens
[
':chat_id'
]
=
$chat_id
;
}
if
(
!
is_null
(
$text
))
{
if
(
$select_users
)
{
$where
[]
=
'(LOWER('
.
TB_CHAT
.
'.`title`) LIKE :text OR LOWER('
.
TB_USER
.
'.`first_name`) LIKE :text OR LOWER('
.
TB_USER
.
'.`last_name`) LIKE :text OR LOWER('
.
TB_USER
.
'.`username`) LIKE :text)'
;
}
else
{
$where
[]
=
'LOWER('
.
TB_CHAT
.
'.`title`) LIKE :text'
;
}
$tokens
[
':text'
]
=
'%'
.
strtolower
(
$text
)
.
'%'
;
}
$a
=
0
;
foreach
(
$where
as
$part
)
{
if
(
$a
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment