0%

介绍

Telegram是一款免费的即时通讯应用程序,类似于微信。但Telegram有丰富的组/频道/机器人,开放的API也使得很方便创建自己的,同时比较自由。因此工作之外,TG是个很好的获取资讯和提升效率的工具。

注册

推荐使用国外手机号,比如走Google Voice号码注册

推荐频道/机器人

TG的频道,机器人都很强大,这里推荐一些。

  1. 合租拼车-https://t.me/hezu2

  2. 阿里云盘资源分享-https://t.me/yunpanpan

    推荐完整姿势,频道里找到目标电影资源=>访问云盘链接,添加到个人云盘=>TV/Mac直接访问alist即可开始观影。

  3. YouTube视频下载-https://t.me/Youtube_dwnldr_bot

    查看到任何喜欢的YouTube视频,直接发送链接到该Bot,选择对应格式分辨率,点击下载即可

  4. Vultr-https://t.me/vultr_helper_bot

​ 绑定个人Vultr账号,方便查看用量/余额信息

除了以上频道/机器人,剩下的就是自己根据需求创建属于自己的。

比如GitHub 仓库CI部署Bot,Zlibrary个人Bot,个人ChatGPT Bot等等

常用设置

  • Proxy

    如果系统代理等有问题,也可以在TG层面直接进行代理设置,解决网络问题

  • Username设置为空,避免接收匿名人发送信息

昨天OpenAI官方上架了ChatGPT iOS App,这里我第一时间安装了下,觉得非常不错,这里总结下使用。

安装要求

  1. 美区账号,官方消息之后会上架其它国家,鉴于国内政策,中国大陆没戏
  2. iOS系统16.1及以上
  3. 下载地址戳👉这里
https://static.1991421.cn/2023/2023-05-20-095802.JPG

Plus订阅

以当前仅支持的美区为例,可以在美国Apple官网购买礼品卡,之后充值到美区账号即可。对于走美国虚拟信用卡无开卡费,手续费,且充值金额灵活些。

使用技巧

  1. 左屏幕边缘向右划,调出历史记录

  2. 右屏幕边缘向左划,打开新对话

  3. 目前不直接支持插件,但可以Hack使用。可以利用历史记录。比如PC网页上开启插件的会话,iOS端选择该历史会话继续使用即可

写在最后

期待ChatGPT iOS App继续迭代,比如支持shortcuts及直接支持插件。

ChatGPT使用太不稳定了,为了避免不可用时耽误事,搭建个私人TG Bot备用。调研发现chatgpt-telegram-bot不错,因此选择服务来搭建

https://static.1991421.cn/2023/2023-04-26-231541.jpeg

搭建步骤

  1. TG下访问@BotFather创建Bot

  2. TG下访问@useridinfobot,获取个人账号UserID,注意不是名字

  3. 选择HK或者境外服务器,拉取镜像

    1
    docker pull n3d1117/chatgpt-telegram-bot:latest
  4. 创建.env文件,配置环境变量,参考https://github.com/n3d1117/chatgpt-telegram-bot/blob/main/.env.example

    主要是这四个配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # Your OpenAI API key
    OPENAI_API_KEY=XXX

    # Your Telegram bot token obtained using @BotFather
    TELEGRAM_BOT_TOKEN=XXX

    # Telegram user ID of admins, or - to assign no admin
    ADMIN_USER_IDS=ADMIN_1_USER_ID,ADMIN_2_USER_ID

    # Comma separated list of telegram user IDs, or * to allow all
    ALLOWED_TELEGRAM_USER_IDS=USER_ID_1,USER_ID_2
  5. 启动容器

    1
    docker run  -d --name "chatgpt-telegram-bot" --env-file ./.env n3d1117/chatgpt-telegram-bot:latest
  6. 此时,TG下访问Bot就可以玩了

配置更新,服务自动重启

目前的版本是docker run container,环境变量对应的配置文件更新,容器是不会自更新的。因此需要解决配置更新-服务重新创建的问题。这里使用inotify-tools解决。这里以CentOS7为例

  1. sudo yum -y install inotify-tools
  2. 创建watch_env.sh文件
1
2
3
4
5
6
7
8
9
#!/bin/sh
while true; do
inotifywait -e modify .env
echo ".env file has been modified. Restarting the container..."
docker stop chatgpt-telegram-bot
docker rm chatgpt-telegram-bot
docker run -d --name "chatgpt-telegram-bot" --env-file /root/chatgpt-telegram-bot/.env n3d1117/chatgpt-telegram-bot:latest
done

  1. 创建watch-env.service
1
sudo vi /etc/systemd/system/watch-env.service

服务配置如下

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=Watch and restart Docker container on .env file changes

[Service]
Type=simple
ExecStart=/bin/bash /root/chatgpt-telegram-bot/watch_env.sh
Restart=always
User=root

[Install]
WantedBy=multi-user.target
  1. 服务自启动/运行
1
2
3
4
5
sudo systemctl daemon-reload

sudo systemctl enable watch-env.service

sudo systemctl start watch-env.service

GPT4

需要申请获取权限后,修改.envOPENAI_MODEL=gpt-4

申请地址:https://openai.com/waitlist/gpt-4-api

写在最后

到此,个人bot就有了,虽然也付费,但相对算稳定。期待API-GPT4早点拿到资格,这样更香了。

ssh2包中提供了HTTPAgent,使用该HTTP Agent是可以接管请求,底层再通过SSH建立的与目标机器连接,从而实现内网穿透。

最近需要开发自定义的HTTP Agent,因此这里研究下实现。

整个HTTPAgent实现是在项目下的lib/http-agents.js

1
2
3
4
5
6
7
8
const { Agent: HttpAgent } = require('http');
const { Agent: HttpsAgent } = require('https');

for (const ctor of [HttpAgent, HttpsAgent]) {

...
exports[ctor === HttpAgent ? 'SSHTTPAgent' : 'SSHTTPSAgent'] = SSHAgent;
}

这里可以看到for循环将nodejs下的Agent进行改造并重新导出。

nodejs下的Agent构造函数如下

1
new Agent([options])

这里因为底层还需要SSH的配置,因此构造函数就是2个参数

1
2
3
4
5
6
constructor(connectCfg, agentOptions) {
super(agentOptions);

this._connectCfg = connectCfg;
this._defaultSrcIP = (agentOptions && agentOptions.srcIP) || 'localhost';
}

第一个参数connectCfg即SSH连接需要的参数,第二个是丢给了nodejs下的Agent,因此具体配置直接查看nodejs文档即可,ssh2这里主要是丢给了父类即Agent.

agentOptions中的srcIP在nodejs下是没有的,这个参数是ssh2这里增加的,主要用于底层TCP连接。

createConnection(options, cb)是Agent根据连接池策略动态创建。这里主要就是将TCP连接socket以回调形式返回为第二个参数cb。

这里是new了一个SSH的client,根据connectCfg建立连接,ready后,执行forwardOut,然后得到了TCP连接的socket,在cb(null, decorateStream(stream, ctor, options)); 这里的stream即socket。

之所以还走decorateStream,我理解是socket转为HTTP Agent需要的socket还需要一些属性方法,因此走空方法赋值。

针对异常部分的处理。

  1. 如果tcp连接通讯中出现了异常,cb的第一个参数即error返回,同时会主动断掉ssh的client连接
  2. 如果tcp连接关闭了,则主动断掉ssh的client连接,此时不用cb返回error.

tcp本地起服务是需要占用端口的,这里即localPort,如果没有明确指定则都0,但0不代表最终端口是0而是系统找寻空置的端口。

1
const srcPort = (options && options.localPort) || 0;

去年针对WebShell做了编辑器功能,截止到目前才算是稳定。这里总结下

调研

  1. 终端类产品很少有做编辑器支持的,仅仅只是支持了SFTP。
  2. Google

设计

https://static.1991421.cn/2023/2023-04-05-132407.jpeg

实现

这里列下关键的实现点

  1. 服务端SSH连接用户机器执行code-server安装运行
  2. 服务端SSH forward内网支持代理访问内网code-server服务
  3. 服务端搭建代理服务器接收浏览器请求再转发到用户机器从而访问code-server服务

写在最后