Arm でも動くかな?と試してみました.
必要パッケージの導入
$ sudo apt install libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev libjansson-dev libpython-dev make libssl1.0-dev
sourceをcloneする
$ git clone --recursive https://github.com/vysheng/tg.git && cd tg
configure & make
$ ./configure $ make
build error1
tgl/crypto/rsa_pem_openssl.c: In function ‘TGLC_rsa_new’: tgl/crypto/rsa_pem_openssl.c:41:6: error: dereferencing pointer to incomplete type ‘RSA {aka struct rsa_st}’ ret->e = unwrap_bn (TGLC_bn_new ()); ^~ tgl/crypto/rsa_pem_openssl.c: In function ‘TGLC_rsa_n’: tgl/crypto/rsa_pem_openssl.c:52:1: error: control reaches end of non-void function [-Werror=return-type] RSA_GETTER(n); ^~~~~~~~~~ tgl/crypto/rsa_pem_openssl.c: In function ‘TGLC_rsa_e’: tgl/crypto/rsa_pem_openssl.c:53:1: error: control reaches end of non-void function [-Werror=return-type] RSA_GETTER(e); ^~~~~~~~~~ cc1: all warnings being treated as errors Makefile.tgl:20: recipe for target 'objs/crypto/rsa_pem_openssl.o' failed make: *** [objs/crypto/rsa_pem_openssl.o] Error 1
libssl-dev(1.1.1)では動作しないのでlibssl1.0-devに入れ替える. sudo apt install libssl1.0-dev
build error2
gcc -I. -I. -I./tgl -w -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Werror -Wextra -Wno-missing-field-initializers -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl/tl-parser -c -MP -MD -MF dep/tl-parser.d -MQ objs/tl-parser.o -o objs/tl-parser.o tgl/tl-parser/tl-parser.c tgl/tl-parser/tl-parser.c:37:10: fatal error: zlib.h: そのようなファイルやディレクトリはありません #include <zlib.h> ^~~~~~~~ compilation terminated. make: *** [Makefile.tl-parser:4: objs/tl-parser.o] エラー 1
zlib1g-dev を導入する. sudo apt install zlib1g-dev
Raspbian stretchでの実行時エラー(32bit環境での不具合?)
$ bin/telegram-cli Telegram-cli version 1.4.1, Copyright (C) 2013-2015 Vitaly Valtman Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license'. This is free software, and you are welcome to redistribute it under certain conditions; type `show_license' for details. Telegram-cli uses libtgl version 2.1.0 Telegram-cli includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/) I: config dir=[/home/pi/.telegram-cli] > telegram-cli: tgl/mtproto-utils.c:101: BN2ull: Assertion `0' failed. SIGNAL received
以下の修正を行い, make clean
して build しなおす.
$ diff -ud tgl/mtproto-utils.c.org tgl/mtproto-utils.c --- tgl/mtproto-utils.c.org 2018-09-19 21:01:44.878560077 +0900 +++ tgl/mtproto-utils.c 2018-09-19 20:59:55.778295550 +0900 @@ -98,13 +98,13 @@ if (sizeof (unsigned long) == 8) { return TGLC_bn_get_word (b); } else if (sizeof (unsigned long long) == 8) { - assert (0); // As long as nobody ever uses this code, assume it is broken. + assert (0); As long as nobody ever uses this code, assume it is broken. unsigned long long tmp; /* Here be dragons, but it should be okay due to be64toh */ TGLC_bn_bn2bin (b, (unsigned char *) &tmp); return be64toh (tmp); } else { - assert (0); +// assert (0); } }
$ make clean $ ./configure $ make
初回実行時はSMS認証が必要
$ bin/telegram-cli Telegram-cli version 1.4.1, Copyright (C) 2013-2015 Vitaly Valtman Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license'. This is free software, and you are welcome to redistribute it under certain conditions; type `show_license' for details. Telegram-cli uses libtgl version 2.1.0 Telegram-cli includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/) I: config dir=[/home/mk/.telegram-cli] [/home/mk/.telegram-cli] created [/home/mk/.telegram-cli/downloads] created phone number: +81-9000000000 code ('CALL' for phone code): 16802 User matoken updated flags User matoken online (was online [2018/09/18 23:55:32]) User matoken offline (was online [2018/09/18 23:50:35])
認証を行うとメッセージが飛んでくる
matoken, We detected a login into your account from a new device on 19/09/2018 at 12:28:55 UTC. Device: Unix Console Location: Shizuoka, Japan (IP = 180.131.110.140) If this wasn't you, you can go to Settings - Privacy and Security - Sessions and terminate that session. If you think that somebody logged in to your account against your will, you can enable two-step verification in Privacy and Security settings. Sincerely, The Telegram Team
メッセージを送信してみる
> msg @matoken hello
telegram-cli の help
$ bin/telegram-cli --help telegram-cli Usage --phone/-u specify username (would not be asked during authorization) --rsa-key/-k specify location of public key (possible multiple entries) --verbosity/-v increase verbosity (0-ERROR 1-WARNIN 2-NOTICE 3+-DEBUG-levels) --enable-msg-id/-N message num mode --config/-c config file name --profile/-p use specified profile --log-level/-l log level --sync-from-start/-f during authorization fetch all messages since registration --disable-auto-accept/-E disable auto accept of encrypted chats --lua-script/-s lua script file --wait-dialog-list/-W send dialog_list query and wait for answer before reading input --disable-colors/-C disable color output --disable-readline/-R disable readline --alert/-A enable bell notifications --daemonize/-d daemon mode --logname/-L <log-name> log file name --username/-U <user-name> change uid after start --groupname/-G <group-name> change gid after start --disable-output/-D disable output --tcp-port/-P <port> port to listen for input commands --udp-socket/-S <socket-name> unix socket to create --exec/-e <commands> make commands end exit --disable-names/-I use user and chat IDs in updates instead of names --enable-ipv6/-6 use ipv6 (may be unstable) --help/-h prints this help --accept-any-tcp accepts tcp connections from any src (only loopback by default) --disable-link-preview disables server-side previews to links --bot/-b bot mode --json prints answers and values in json format --permanent-msg-ids use permanent msg ids --permanent-peer-ids use permanent peer ids
telegram-cli 起動時のhelp
$ bin/telegram-cli -e help Telegram-cli version 1.4.1, Copyright (C) 2013-2015 Vitaly Valtman Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license'. This is free software, and you are welcome to redistribute it under certain conditions; type `show_license' for details. Telegram-cli uses libtgl version 2.1.0 Telegram-cli includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/) I: config dir=[/home/pi/.telegram-cli] [33;1maccept_secret_chat <secret chat> Accepts secret chat. Only useful with -E option add_contact <phone> <first name> <last name> Tries to add user to contact list block_user <user> Blocks user broadcast <user>+ <text> Sends text to several users at once channel_get_admins <channel> [limit=100] [offset=0] Gets channel admins channel_get_members <channel> [limit=100] [offset=0] Gets channel members channel_info <channel> Prints info about channel (id, members, admin, etc.) channel_invite <channel> <user> Invites user to channel channel_join <channel> Joins to channel channel_kick <channel> <user> Kicks user from channel channel_leave <channel> Leaves from channel channel_list [limit=100] [offset=0] List of last channels channel_set_about <channel> <about> Sets channel about info. channel_set_admin <channel> <admin> <type> Sets channel admin. 0 - not admin, 1 - moderator, 2 - editor channel_set_username <channel> <username> Sets channel username info. channel_set_photo <channel> <filename> Sets channel photo. Photo will be cropped to square chat_add_user <chat> <user> [msgs-to-forward] Adds user to chat. Sends him last msgs-to-forward message from this chat. Default 100 chat_del_user <chat> <user> Deletes user from chat chat_info <chat> Prints info about chat (id, members, admin, etc.) chat_set_photo <chat> <filename> Sets chat photo. Photo will be cropped to square chat_upgrade <chat> Upgrades chat to megagroup chat_with_peer <peer> Interface option. All input will be treated as messages to this peer. Type /quit to end this mode clear Clears all data and exits. For debug. contact_list Prints contact list contact_search username Searches user by username create_channel <name> <about> <user>+ Creates channel with users create_group_chat <name> <user>+ Creates group chat with users create_secret_chat <user> Starts creation of secret chat del_contact <user> Deletes contact from contact list delete_msg <msg-id> Deletes message dialog_list [limit=100] [offset=0] List of last conversations export_card Prints card that can be imported by another user with import_card method export_channel_link Prints channel link that can be used to join to channel export_chat_link Prints chat link that can be used to join to chat fwd <peer> <msg-id>+ Forwards message to peer. Forward to secret chats is forbidden fwd_media <peer> <msg-id> Forwards message media to peer. Forward to secret chats is forbidden. Result slightly differs from fwd get_terms_of_service Prints telegram's terms of service get_message <msg-id> Get message by id get_self Get our user info help [command] Prints this help history <peer> [limit] [offset] Prints messages with this peer (most recent message lower). Also marks messages as read import_card <card> Gets user by card and prints it name. You can then send messages to him as usual import_chat_link <hash> Joins to chat by link import_channel_link <hash> Joins to channel by link load_audio <msg-id> Downloads file to downloads dirs. Prints file name after download end load_channel_photo <channel> Downloads file to downloads dirs. Prints file name after download end load_chat_photo <chat> Downloads file to downloads dirs. Prints file name after download end load_document <msg-id> Downloads file to downloads dirs. Prints file name after download end load_document_thumb <msg-id> Downloads file to downloads dirs. Prints file name after download end load_file <msg-id> Downloads file to downloads dirs. Prints file name after download end load_file_thumb <msg-id> Downloads file to downloads dirs. Prints file name after download end load_photo <msg-id> Downloads file to downloads dirs. Prints file name after download end load_user_photo <user> Downloads file to downloads dirs. Prints file name after download end load_video <msg-id> Downloads file to downloads dirs. Prints file name after download end load_video_thumb <msg-id> Downloads file to downloads dirs. Prints file name after download end main_session Sends updates to this connection (or terminal). Useful only with listening socket mark_read <peer> Marks messages with peer as read msg <peer> <text> Sends text message to peer msg <peer> <kbd> <text> Sends text message to peer with custom kbd post <peer> <text> Sends text message to peer as admin post_audio <peer> <file> Posts audio to peer post_document <peer> <file> Posts document to peer post_file <peer> <file> Sends document to peer post_location <peer> <latitude> <longitude> Sends geo location post_photo <peer> <file> Sends photo to peer post_text <peer> <file> Sends contents of text file as plain text message post_video <peer> <file> Sends video to peer quit Quits immediately rename_channel <channel> <new name> Renames channel rename_chat <chat> <new name> Renames chat rename_contact <user> <first name> <last name> Renames contact reply <msg-id> <text> Sends text reply to message reply_audio <msg-id> <file> Sends audio to peer reply_contact <msg-id> <phone> <first-name> <last-name> Sends contact (not necessary telegram user) reply_document <msg-id> <file> Sends document to peer reply_file <msg-id> <file> Sends document to peer reply_location <msg-id> <latitude> <longitude> Sends geo location reply_photo <msg-id> <file> Sends photo to peer reply_video <msg-id> <file> Sends video to peer resolve_username username Searches user by username safe_quit Waits for all queries to end, then quits search [peer] [limit] [from] [to] [offset] pattern Search for pattern in messages from date from to date to (unixtime) in messages with peer (if peer not present, in all messages) send_audio <peer> <file> Sends audio to peer send_contact <peer> <phone> <first-name> <last-name> Sends contact (not necessary telegram user) send_document <peer> <file> Sends document to peer send_file <peer> <file> Sends document to peer send_location <peer> <latitude> <longitude> Sends geo location send_photo <peer> <file> Sends photo to peer send_text <peer> <file> Sends contents of text file as plain text message send_typing <peer> [status] Sends typing notification. You can supply a custom status (range 0-10): none, typing, cancel, record video, upload video, recor d audio, upload audio, upload photo, upload document, geo, choose contact. send_typing_abort <peer> Sends typing notification abort send_video <peer> <file> Sends video to peer set <param> <value> Sets value of param. Currently available: log_level, debug_verbosity, alarm, msg_num set_password <hint> Sets password set_profile_name <first-name> <last-name> Sets profile name. set_profile_photo <filename> Sets profile photo. Photo will be cropped to square set_ttl <secret chat> Sets secret chat ttl. Client itself ignores ttl set_username <name> Sets username. set_phone_number <phone> Changes the phone number of this account show_license Prints contents of GPL license start_bot <bot> <chat> <data> Adds bot to chat stats For debug purpose status_online Sets status as online status_offline Sets status as offline unblock_user <user> Unblocks user user_info <user> Prints info about user (id, last online, phone) version Prints client and library version view_audio <msg-id> Downloads file to downloads dirs. Then tries to open it with system default action view_channel_photo <channel> Downloads file to downloads dirs. Then tries to open it with system default action view_chat_photo <chat> Downloads file to downloads dirs. Then tries to open it with system default action view_document <msg-id> Downloads file to downloads dirs. Then tries to open it with system default action view_document_thumb <msg-id> Downloads file to downloads dirs. Then tries to open it with system default action view_file <msg-id> Downloads file to downloads dirs. Then tries to open it with system default action view_file_thumb <msg-id> Downloads file to downloads dirs. Then tries to open it with system default action view_photo <msg-id> Downloads file to downloads dirs. Then tries to open it with system default action view_user_photo <user> Downloads file to downloads dirs. Then tries to open it with system default action view_video <msg-id> Downloads file to downloads dirs. Then tries to open it with system default action view_video_thumb <msg-id> Downloads file to downloads dirs. Then tries to open it with system default action view <msg-id> Tries to view message contents visualize_key <secret chat> Prints visualization of encryption key (first 16 bytes sha1 of it in fact) [0mAll done. Exit halt
大抵のことは出来る感じです.
試した環境1
$ git log --decorate|head -7 commit 6547c0b21b977b327b3c5e8142963f4bc246187a (HEAD -> master, origin/master, origin/HEAD) Merge: 443793d 160231b Author: V V <vvaltman@aurum> Date: Wed Mar 23 14:42:53 2016 +0300 Merge github.com:vysheng/tg $ dpkg-query -W libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev libjansson-dev libpython-dev make libssl1.0-dev libconfig-dev:armhf 1.5-0.3 libevent-dev 2.0.21-stable-3 libjansson-dev:armhf 2.9-1 liblua5.2-dev:armhf 5.2.4-1.1 libpython-dev:armhf 2.7.13-2 libreadline-dev:armhf 7.0-3 libssl-dev libssl1.0-dev:armhf 1.0.2l-2+deb9u3 lua5.2 5.2.4-1.1 make 4.1-9.1 $ lsb_release -d Description: Raspbian GNU/Linux 9.4 (stretch) $ uname -m armv7l $ cat /proc/device-tree/model ;echo Raspberry Pi 2 Model B Rev 1.1
試した環境2
$ git log --decorate|head -7 commit 6547c0b21b977b327b3c5e8142963f4bc246187a (HEAD -> master, origin/master, origin/HEAD) Merge: 443793d 160231b Author: V V <vvaltman@aurum> Date: Wed Mar 23 14:42:53 2016 +0300 Merge github.com:vysheng/tg $ dpkg-query -W libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev libjansson-dev libpython-dev make libssl1.0-dev libconfig-dev:amd64 1.5-0.4 libevent-dev 2.1.8-stable-4build1 libjansson-dev:amd64 2.11-1 liblua5.2-dev:amd64 5.2.4-1.1build1 libpython-dev:amd64 2.7.15~rc1-1 libreadline-dev:amd64 7.0-3 libssl-dev libssl1.0-dev:amd64 1.0.2n-1ubuntu5.1 lua5.2 5.2.4-1.1build1 make 4.1-9.1ubuntu1 $ lsb_release -d Description: Ubuntu 18.04.1 LTS (mk)-(jobs:0)-(~/src/tg) $ uname -m x86_64
One thought to “Telegram の非公式cli client の telegram-cli を試す”