| 64 | } |
| 65 | |
| 66 | func main() { |
| 67 | dbLog := waLog.Stdout("Database", "DEBUG", true) |
| 68 | // Make sure you add appropriate DB connector imports, e.g. github.com/mattn/go-sqlite3 for SQLite |
| 69 | container, err := sqlstore.New("sqlite3", "file:examplestore.db?_foreign_keys=on", dbLog) |
| 70 | if err != nil { |
| 71 | panic(err) |
| 72 | } |
| 73 | // If you want multiple sessions, remember their JIDs and use .GetDevice(jid) or .GetAllDevices() instead. |
| 74 | deviceStore, err := container.GetFirstDevice() |
| 75 | if err != nil { |
| 76 | panic(err) |
| 77 | } |
| 78 | clientLog := waLog.Stdout("Client", "DEBUG", true) |
| 79 | client := whatsmeow.NewClient(deviceStore, clientLog) |
| 80 | // add the eventHandler |
| 81 | mycli := &MyClient{WAClient: client} |
| 82 | mycli.register() |
| 83 | |
| 84 | if client.Store.ID == nil { |
| 85 | // No ID stored, new login |
| 86 | qrChan, _ := client.GetQRChannel(context.Background()) |
| 87 | err = client.Connect() |
| 88 | if err != nil { |
| 89 | panic(err) |
| 90 | } |
| 91 | for evt := range qrChan { |
| 92 | if evt.Event == "code" { |
| 93 | // Render the QR code here |
| 94 | // e.g. qrterminal.GenerateHalfBlock(evt.Code, qrterminal.L, os.Stdout) |
| 95 | // or just manually `echo 2@... | qrencode -t ansiutf8` in a terminal |
| 96 | qrterminal.GenerateHalfBlock(evt.Code, qrterminal.L, os.Stdout) |
| 97 | // fmt.Println("QR code:", evt.Code) |
| 98 | } else { |
| 99 | fmt.Println("Login event:", evt.Event) |
| 100 | } |
| 101 | } |
| 102 | } else { |
| 103 | // Already logged in, just connect |
| 104 | err = client.Connect() |
| 105 | if err != nil { |
| 106 | panic(err) |
| 107 | } |
| 108 | } |
| 109 | |
| 110 | // Listen to Ctrl+C (you can also do something else that prevents the program from exiting) |
| 111 | c := make(chan os.Signal) |
| 112 | signal.Notify(c, os.Interrupt, syscall.SIGTERM) |
| 113 | <-c |
| 114 | |
| 115 | client.Disconnect() |
| 116 | } |