feat: add 2fa support, recreate session
This commit is contained in:
parent
c511f846dd
commit
66bd1b7dcc
6 changed files with 30 additions and 9 deletions
|
|
@ -87,14 +87,19 @@ Before you can use the server, you need to connect to the Telegram API.
|
||||||
|
|
||||||
1. Get the API ID and hash from [Telegram API](https://my.telegram.org/auth)
|
1. Get the API ID and hash from [Telegram API](https://my.telegram.org/auth)
|
||||||
2. Run the following command:
|
2. Run the following command:
|
||||||
|
> __Note:__
|
||||||
|
> If you have 2FA enabled: add --password <2fa_password>
|
||||||
|
|
||||||
|
> __Note:__
|
||||||
|
> If you want to override existing session: add --new
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
telegram-mcp auth --app-id <your-api-id> --api-hash <your-api-hash> --phone <your-phone-number>
|
telegram-mcp auth --app-id <your-api-id> --api-hash <your-api-hash> --phone <your-phone-number>
|
||||||
```
|
```
|
||||||
|
|
||||||
Enter the code you received from Telegram to connect to the API.
|
📩 Enter the code you received from Telegram to connect to the API.
|
||||||
|
|
||||||
The password may be required if you have two-factor authentication enabled.
|
3. Done!
|
||||||
|
|
||||||
### Client Configuration
|
### Client Configuration
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ tasks:
|
||||||
tag:
|
tag:
|
||||||
desc: Create a new tag
|
desc: Create a new tag
|
||||||
cmds:
|
cmds:
|
||||||
- git tag -a v0.1.7
|
- git tag -a v0.1.8
|
||||||
- git push origin v0.1.7
|
- git push origin v0.1.8
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
4
auth.go
4
auth.go
|
|
@ -13,6 +13,8 @@ import (
|
||||||
|
|
||||||
func authCommand(_ context.Context, cmd *cli.Command) error {
|
func authCommand(_ context.Context, cmd *cli.Command) error {
|
||||||
phone := cmd.String("phone")
|
phone := cmd.String("phone")
|
||||||
|
newSession := cmd.Bool("new")
|
||||||
|
pass := cmd.String("password")
|
||||||
appID := cmd.Root().Int("app-id")
|
appID := cmd.Root().Int("app-id")
|
||||||
apiHash := cmd.Root().String("api-hash")
|
apiHash := cmd.Root().String("api-hash")
|
||||||
sessionPath := cmd.Root().String("session")
|
sessionPath := cmd.Root().String("session")
|
||||||
|
|
@ -24,7 +26,7 @@ func authCommand(_ context.Context, cmd *cli.Command) error {
|
||||||
Int64("app-id", appID).
|
Int64("app-id", appID).
|
||||||
Msg("Authenticate with Telegram")
|
Msg("Authenticate with Telegram")
|
||||||
|
|
||||||
err := tg.Auth(phone, appID, apiHash, sessionPath)
|
err := tg.Auth(phone, appID, apiHash, sessionPath, pass, newSession)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal().Err(err).Msg("Failed to authenticate with Telegram")
|
log.Fatal().Err(err).Msg("Failed to authenticate with Telegram")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,11 @@ import (
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Auth(phone string, appID int64, appHash string, sessionPath string) error {
|
func Auth(phone string, appID int64, appHash string, sessionPath string, password string, newSession bool) error {
|
||||||
|
if newSession {
|
||||||
|
_ = os.Remove(sessionPath)
|
||||||
|
}
|
||||||
|
|
||||||
client := telegram.NewClient(int(appID), appHash, telegram.Options{
|
client := telegram.NewClient(int(appID), appHash, telegram.Options{
|
||||||
SessionStorage: &telegram.FileSessionStorage{
|
SessionStorage: &telegram.FileSessionStorage{
|
||||||
Path: sessionPath,
|
Path: sessionPath,
|
||||||
|
|
@ -28,8 +32,8 @@ func Auth(phone string, appID int64, appHash string, sessionPath string) error {
|
||||||
|
|
||||||
if err := client.Run(context.Background(), func(ctx context.Context) error {
|
if err := client.Run(context.Background(), func(ctx context.Context) error {
|
||||||
// Authenticate if needed
|
// Authenticate if needed
|
||||||
flow := auth.NewFlow(auth.Constant(phone, "", auth.CodeAuthenticatorFunc(func(_ context.Context, _ *tg.AuthSentCode) (string, error) {
|
flow := auth.NewFlow(auth.Constant(phone, password, auth.CodeAuthenticatorFunc(func(_ context.Context, _ *tg.AuthSentCode) (string, error) {
|
||||||
fmt.Print("Enter code: ")
|
fmt.Print("📩 Enter code: ")
|
||||||
code, err := bufio.NewReader(os.Stdin).ReadString('\n')
|
code, err := bufio.NewReader(os.Stdin).ReadString('\n')
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("read code: %w", err)
|
return "", fmt.Errorf("read code: %w", err)
|
||||||
|
|
|
||||||
10
main.go
10
main.go
|
|
@ -77,6 +77,16 @@ func main() {
|
||||||
Required: true,
|
Required: true,
|
||||||
Aliases: []string{"p"},
|
Aliases: []string{"p"},
|
||||||
},
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "password",
|
||||||
|
Usage: "Password for 2FA if exists",
|
||||||
|
HideDefault: true,
|
||||||
|
},
|
||||||
|
&cli.BoolFlag{
|
||||||
|
Name: "new",
|
||||||
|
Usage: "Remove old session and create new one",
|
||||||
|
HideDefault: true,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Action: authCommand,
|
Action: authCommand,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
2
serve.go
2
serve.go
|
|
@ -48,7 +48,7 @@ func serve(ctx context.Context, cmd *cli.Command) error {
|
||||||
|
|
||||||
log.Info().RawJSON("answer", []byte(answer.Content[0].TextContent.Text)).Msg("Check GetDialogs: OK")
|
log.Info().RawJSON("answer", []byte(answer.Content[0].TextContent.Text)).Msg("Check GetDialogs: OK")
|
||||||
|
|
||||||
answer, err = client.GetHistory(tg.HistoryArguments{Name: "lalal", Offset: 5574})
|
answer, err = client.GetHistory(tg.HistoryArguments{Name: os.Getenv("TG_TEST_USERNAME")})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("get histore: %w", err)
|
return fmt.Errorf("get histore: %w", err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue