client.TcpHandler = (address, port) =>
{
    var proxy = new Socks5ProxyClient(
        proxyHost, proxyPort, proxyUsername, proxyPassword);
    return System.Threading.Tasks.Task.FromResult(
        proxy.CreateConnection(address, port));
};
await client.LoginUserIfNeeded();

既存の WTelegram.Client を使い、選んだ互換 SOCKS ライブラリをインポートします。proxyHost、ポート、アカウントは中継側の情報です。lambda の address/port は WTelegram が要求する接続先を表します。

CreateConnection は、プロキシとのネゴシエーション後に接続済みの TcpClient を返す必要があります。プロキシのポートに到達しただけでは、この引き渡しはできません。

例ではライブラリの同期メソッドを使っています。結果を Task.FromResult で包んでも接続処理はノンブロッキングにはなりません。必要なら、対応する非同期メソッドを使ってください。

ログイン時だけでなく、後続の接続にも handler を残しておきます。Telegram アカウントの認証は SOCKS アカウントとは別です。

関連記事