You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.2 KiB
53 lines
1.2 KiB
package telegram |
|
|
|
import ( |
|
"context" |
|
"os" |
|
|
|
"github.com/go-faster/errors" |
|
) |
|
|
|
// RunUntilCanceled is client callback which |
|
// locks until client context is canceled. |
|
func RunUntilCanceled(ctx context.Context, client *Client) error { |
|
<-ctx.Done() |
|
return ctx.Err() |
|
} |
|
|
|
// BotFromEnvironment creates bot client using ClientFromEnvironment |
|
// connects to server and authenticates it. |
|
// |
|
// Variables: |
|
// BOT_TOKEN — token from BotFather. |
|
func BotFromEnvironment( |
|
ctx context.Context, |
|
opts Options, |
|
setup func(ctx context.Context, client *Client) error, |
|
cb func(ctx context.Context, client *Client) error, |
|
) error { |
|
client, err := ClientFromEnvironment(opts) |
|
if err != nil { |
|
return errors.Wrap(err, "create client") |
|
} |
|
|
|
if setup != nil { |
|
if err := setup(ctx, client); err != nil { |
|
return errors.Wrap(err, "setup") |
|
} |
|
} |
|
|
|
return client.Run(ctx, func(ctx context.Context) error { |
|
status, err := client.Auth().Status(ctx) |
|
if err != nil { |
|
return errors.Wrap(err, "auth status") |
|
} |
|
|
|
if !status.Authorized { |
|
if _, err := client.Auth().Bot(ctx, os.Getenv("BOT_TOKEN")); err != nil { |
|
return errors.Wrap(err, "login") |
|
} |
|
} |
|
|
|
return cb(ctx, client) |
|
}) |
|
}
|
|
|