V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
MaskRay
V2EX  ›  JavaScript

telegramircd——用 IRC 客户端控制 Telegram

  •  
  •   MaskRay · 2016-05-07 21:05:49 +08:00 · 3354 次点击
    这是一个创建于 3157 天前的主题,其中的信息可能已经有所发展或是发生改变。

    telegramircd

    telegramircd 类似于 bitlbee ,在 web.telegram.org 和 IRC 间建起桥梁,可以使用 IRC 客户端收发朋友、群消息。

    原理

    修改https://web.telegram.org用的 JS ,通过 WebSocket 把信息发送到服务端,服务端兼做 IRC 服务端,把 IRC 客户端的命令通过 WebSocket 传送到网页版 JS 执行。未实现 IRC 客户端,因此无法把群的消息转发到另一个 IRC 服务器(打通两个群的 bot)。

    安装

    需要 Python 3.5 或以上,支持async/await语法 pip install -r requirements.txt安装依赖

    Arch Linux

    安装https://aur.archlinux.org/packages/telegramircd-git,会自动在/etc/telegramircd/下生成自签名证书(见下文),导入浏览器即可。

    其他发行版

    • openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -out cert.pem -subj '/CN=127.0.0.1' -dates 9999创建密钥与证书。
    • Chrome 访问chrome://settings/certificates,导入 cert.pem ,在 Authorities 标签页选择该证书, Edit->Trust this certificate for identifying websites.
    • Chrome 安装 Switcheroo Redirector 扩展,把https://web.telegram.org/js/app.js重定向至https://127.0.0.1:9003/app.js
    • ./telegramircd.py --tls-cert cert.pem --tls-key key.pem,会监听 127.1:6669 的 IRC 和 127.1:9003 的 HTTPS(兼 WebSocket over TLS)

    IRC 客户端

    • IRC 客户端连接 127.1:6669
    • 刷新https://web.telegram.org页面
    • 回到 IRC 客户端,会发现自动加入了+telegram channel

    +telegram发信并不会群发,只是为了方便查看有哪些朋友。

    IRC 命令

    telegramircd 是个简单的 IRC 服务器,可以执行通常的 IRC 命令,可以对其他客户端私聊,创建 standard channel(以#开头的 channel)。另外若用 token 与某个微信网页版连接的,就能看到微信联系人(朋友、群联系人)显示为特殊 nick 、群显示为特殊 channel(以&开头,根据群名自动设置名称)

    这些特殊 nick 与 channel 只有当前客户端能看到,因此一个服务端支持多个微信帐号同时登录,每个用不同的 IRC 客户端控制。另外,以下命令会有特殊作用:

    • 程序默认选项为--join auto,收到某个群的第一条消息后会自动加入对应的 channel ,即开始接收该群的消息。
    • /dcc send nick/channel filename,给 mutual friend 或群发图片 /文件。参见https://en.wikipedia.org/wiki/Direct_Client-to-Client#DCC_SEND
    • /list,列出所有群
    • /names,更新当前群成员列表
    • /part [channel]的 IRC 原义为离开 channel ,转换为微信代表在当前 IRC 会话中不再接收该群的消息。不用担心, telegramircd 并没有主动退出群的功能
    • /query nick打开与$nick的私聊窗口,与之私聊即为在微信上和他 /她 /它对话
    • /who channel,查看群成员列表

    显示

    vte 终端模拟器支持 URL 选择,但不能识别filesystem:https://。我修改的aur/vte3-ng-fullwidth-emoji添加了该类 URL 支持。

    termite C-S-Space URL 选择也不支持,可以用https://gist.github.com/MaskRay/9e1c57642bedd8b2b965e39b2d58fc82添加该类 URL 支持。感谢张酉夫的 ELF hack 指导。

    已知问题

    • supergroup 和普通 chat 的 message 格式不同,不含random_id字段,没法判断该消息是否由 IRC 客户端生成的。
    1 条回复    2016-05-08 08:57:10 +08:00
    uuair
        1
    uuair  
       2016-05-08 08:57:10 +08:00
    这些程序员就是这么折腾,明明 telegram 刚通过 bot 支持 irc ,这下又回来了。。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1559 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:00 · PVG 01:00 · LAX 09:00 · JFK 12:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.