Auties00 / Cobalt

Standalone unofficial fully-featured Whatsapp Web and Mobile API for Java and Kotlin
MIT License
625 stars 183 forks source link

SEVERE: Socket failure at LOGIN #282

Closed open-sudo closed 1 year ago

open-sudo commented 1 year ago

I keep getting the following execption when I run the BanBot example. As soon as I scan the QR code, the below exception pops up. Please help. Version is 3.3.1 and OS is ubunu 22 with openjdk version "17.0.6" 2023-01-17.

Disconnected: RECONNECTING
May 16, 2023 9:18:14 PM it.auties.whatsapp.api.ErrorHandler lambda$defaultErrorHandler$1
SEVERE: Socket failure at LOGIN
java.util.concurrent.CompletionException: java.util.NoSuchElementException: Unknown privacy option: calladd
        at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:315)
        at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:320)
        at java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1159)
        at java.base/java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:483)
        at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
        at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
        at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
        at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
        at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
Caused by: java.util.NoSuchElementException: Unknown privacy option: calladd
        at it.auties.whatsapp.socket.StreamHandler.lambda$addPrivacySetting$30(StreamHandler.java:443)
        at java.base/java.util.Optional.orElseThrow(Optional.java:403)
        at it.auties.whatsapp.socket.StreamHandler.addPrivacySetting(StreamHandler.java:443)
        at it.auties.whatsapp.socket.StreamHandler.lambda$parsePrivacySettings$48(StreamHandler.java:661)
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at java.base/java.util.LinkedList$LLSpliterator.forEachRemaining(LinkedList.java:1242)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575)
        at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
        at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616)
        at it.auties.whatsapp.socket.StreamHandler.parsePrivacySettings(StreamHandler.java:662)
        at java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1150)
        ... 6 more
May 16, 2023 9:18:14 PM it.auties.whatsapp.api.ErrorHandler lambda$defaultErrorHandler$1
WARNING: Ignored failure

My code is below:

public class BanBot {
    public static void main(String... args) throws ExecutionException, InterruptedException {

                var whatsapp = Whatsapp.webBuilder()
                .newConnection()
                .build()
                .addLoggedInListener(api -> System.out.printf("Connected: %s%n", api.store().privacySettings()))
                .addDisconnectedListener(reason -> System.out.printf("Disconnected: %s%n", reason))
                .connect()
                .join();
        System.out.println("Connected");
    }

    private static void onMessage(Whatsapp api, MessageInfo info) {
        if (!(info.message()
                .content() instanceof TextMessage textMessage)) {
            return;
        }

        if (!textMessage.text()
                .toLowerCase()
                .contains("/ban")) {
            return;
        }

        if (info.chatJid().hasServer(ContactJid.Server.GROUP)) {
            api.sendMessage(info.chatJid(), "[WhatsappBot] This command is only supported in groups", info);
            return;
        }

        var quoted = info.quotedMessage();
        if (quoted.isEmpty()) {
            api.sendMessage(info.chatJid(),
                    "[WhatsappBot] Please quote a message sent by the person that you want to ban", info);
            return;
        }

        var victim = quoted.get()
                .sender()
                .orElse(null);
        if (victim == null) {
            api.sendMessage(info.chatJid(), "[WhatsappBot] Missing contact, cannot ban target", info);
            return;
        }

        api.removeGroupParticipant(info.chat(), victim)
                .thenRunAsync(() -> api.sendMessage(info.chatJid(), "[WhatsappBot] The contact was successfully banned", info));
    }
}
open-sudo commented 1 year ago

Following code works well:


        var whatsapp = Whatsapp.webBuilder()
        .newConnection()
        .historyLength(WebHistoryLength.ONE_YEAR)
        .build()
        .addLoggedInListener(api -> {
            System.out.printf("Connected: %s%n", api.store().privacySettings());
        })
        .addNewMessageListener(message -> System.out.println(message.toJson()))
        .addContactsListener((api, contacts) -> System.out.printf("Contacts: %s%n", contacts.size()))
        .addChatsListener(chats -> System.out.printf("Chats: %s%n", chats.size()))
        .addNodeReceivedListener(incoming -> System.out.printf("Received node %s%n", incoming))
        .addNodeSentListener(outgoing -> System.out.printf("Sent node %s%n", outgoing))
        .addActionListener((action, info) -> System.out.printf("New action: %s, info: %s%n", action, info))
        .addSettingListener(setting -> System.out.printf("New setting: %s%n", setting))
        .addContactPresenceListener((chat, contact, status) -> System.out.printf("Status of %s changed in %s to %s%n", contact.name(), chat.name(), status.name()))
        .addAnyMessageStatusListener((chat, contact, info, status) -> System.out.printf("Message %s in chat %s now has status %s for %s %n", info.id(), info.chatName(), status, contact == null ? null : contact.name()))
        .addChatMessagesSyncListener((chat, last) -> System.out.printf("%s now has %s messages: %s%n", chat.name(), chat.messages().size(), !last ? "waiting for more" : "done"))
        .addDisconnectedListener(reason -> System.out.printf("Disconnected: %s%n", reason))
        .connect()
        .join();
System.out.println("Connected");
whatsapp.awaitDisconnection();
System.out.println("Disconnected");