Biblioteca Kotlin com objetivo de facilitar a criação de aplicações de Chat e Chatbots voltadas a Twitch.

Overview

Twitch4K

O Twitch4K é uma biblioteca Kotlin que tem como objetivo principal facilitar a criação de aplicações de Chat e Chatbots voltadas para a plataforma de stream Twitch.

Recursos

🔲 Conectar no servidor IRC da Twitch;

🔲 Conectar no servidor IRC da Twitch via SSL;

🔲 Ingressar em um canal da Twitch;

🔲 Ingressar em vários canais da Twitch simultaneamente;

🔲 Ser notificado quando conectado ao servidor da Twitch;

🔲 Ser notificado quando receber uma mensagem dos canais préviamente ingressados na Twitch.

You might also like...
Android Real Time Chat & Messaging SDK
Android Real Time Chat & Messaging SDK

Android Chat SDK Overview Applozic brings real-time engagement with chat, video, and voice to your web, mobile, and conversational apps. We power emer

Kommunicate.io Android Chat SDK for Customer Support
Kommunicate.io Android Chat SDK for Customer Support

Kommunicate Android Chat SDK for Customer Support An Open Source Android Live Chat SDK for Customer Support Overview Kommunicate provides open source

Wurst Plus 3 Chat Server

Wurst Plus 3 Chat Server This is a server for wurst + 3! Ideas/TODO Friend requests Secure key for clients DMs Global Chat Friend's Online Color/rainb

A hybrid chat android application based on the features of Instagram and Whatsapp having UI just as Telegram.
A hybrid chat android application based on the features of Instagram and Whatsapp having UI just as Telegram.

A hybrid chat android application based on the features of Instagram and Whatsapp having UI just as Telegram.

A private-chat-only Android App for Secure Scuttlebutt
A private-chat-only Android App for Secure Scuttlebutt

Tremola README Tremola is a Secure Scuttlebutt (SSB) client for Android that only supports private chat. Tremola aims at having the same functionality

Fire Chat
Fire Chat

Fire Chat A one-to-one chat app (similar to WhatsApp) built using Kotlin and Firebase. Sceenshots Whenever a user will enter the app a registration pa

 AvengersChat is a demo application based on modern Android tech stacks and Stream Chat SDK.
AvengersChat is a demo application based on modern Android tech stacks and Stream Chat SDK.

💙 Android sample Avengers chat application using Stream Chat SDK based on MVVM (ViewModel, Coroutines, Room, Hilt, Repository) architecture.

Jetchat is a sample chat app built with Jetpack Compose.
Jetchat is a sample chat app built with Jetpack Compose.

Jetchat sample Jetchat is a sample chat app built with Jetpack Compose. To try out this sample app, you need to use Android Studio Arctic Fox You can

This command line program can extract chat messages send on the Minecraft server HGLabor

HGLabor-Log-Extractor Das Programm durchläuft einmalig deine Minecraft-Logs und sammelt alle Nachrichten heraus, die auf HGLabor geschrieben wurden. K

Comments
  • Mais algumas organizações

    Mais algumas organizações

    Twitch4k

    Apenas algumas separações de código em métodos, isolando algumas responsabilidades como a criação do socket e das threads dos handlers

    Também utilizado o método .also do kotlin, funciona igual o .apply porém sem a troca do contexto this, ou seja, o código dentro do bloco { }, tem referencia ao próprio objeto porém com "it", exemplo dos 2 usos no método da criação do socket...

    // com o `apply`, dentro do bloco { }, o "this" é a referencia do próprio objeto (socket)
    Socket().apply {  
       receiveBufferSize = 4096
    }
    
    // com o `also`, dentro do bloco { }, o "this" é a referência da classe que está executando o código (no caso o Twitch4k)
    socket.also { 
       it.connect( ... )
    }
    

    TwitchHandler

    Mesma alteração com relação ao uso do .also (e um toque pessoal usando when ao invés do if else) Um ponto diferenciado do .also com relação ao .apply é a possibilidade de "nomear" a referencia

    // Sem nomear a referencia
    MessageHandlerDiscovery().also {  it.onReceivedChatMessageListener = onReceivedChatMessageListener } 
    
    // Nomeando a referencia
    MessageHandlerDiscovery().also { discovery -> 
        discovery.onReceivedChatMessageListener = onReceivedChatMessageListener 
    } 
    

    MessageHandlerDiscovery

    Apenas remoção do in ArrayOf(...) para os casos em que se testa apenas 1 string

    Chat

    Neste caso, como já temos de qual channel que veio a mensagem, já estou passando direto para o Chat, assim quem for implementar o bot não precisará passar o channel para o send(message: String)

    Ficando a chamada ao chat desta maneira

    chat.send("Hello World")
    

    Sem a necessidade de fazer isto

    chat.send(message.channel, "Hello World")
    

    A não ser que você queira deixar aberto ao criador do BOT definir pra qual dos canais cadastrados ele queira mandar a mensagem, mesmo "divergindo" da origem

    PrivateMessageHandler

    Neste foi implementado a solução para o Chat descrito acima

    OnReceivedChatMessageListener

    Transformando a interface em uma Functional Interface Assim como no java tem a anotação @FunctionalInterface para as interfaces, no Kotlin tem a fun interface, o que isto quer dizer?

    Garante que a interface terá apenas um método a ser implementado (abstrato) e isto permite a implementação da interface com lambda (sem a necessidade de criar uma classe para implementar o método, mas também não tira essa possibilidade)

    Exemplo de mudança: Antes

        class BotMessageListener : OnReceivedChatMessageListener { 
        
            fun onReceived(message: ChatMessage, chat: Chat) { 
                if (message.text.startsWith("test")) {
                    chat.send("Hello World")
                }
            }
            
        }
       
        fun main() {
            val t4k = Twitch4K(...)
            t4k.setOnReceivedChatMessageListener(BotMessageListener())
            t4k.start()
        }
    

    Depois

        fun main() {
            val t4k = Twitch4K(...)
        
            t4k.setOnReceivedChatMessageListener { message, chat ->
                if (message.text.startsWith("test")) {
                    chat.send("Hello World")
                }
            }
    
            t4k.start()
        }
    
    opened by FelipeNathan 1
  • Sugestões

    Sugestões

    A ideia neste PR é apenas dar sugestões de implementações:

    TwitchHandler

    Como são muitos os códigos que determinam o tipo de mensagem a ser tratada, deixar esta lógica dentro do TwitchHandler pode deixar esta classe muito extensa a longo prazo, visto que as comunicações ainda estão em desenvolvimento.

    Uma ideia é criar algo similar a um "service discovery" ou "strategy pattern", é ondeo MessageHandler entra:

    MessageHandler

    Criei a interface MessageHandler que contém o "identificador" de cada handler (neste caso pode ser vários, caso um identificador pode ter muito a ver com outro, usei desta forma devido aos comandos numéricos

     "002", "003", "004", "353", "366", "372", "375", "376"
    

    e também pelos comandos "USERSTATE" e "ROOMSTATE" que já estavam agrupados

    AbstractMessageHandler

    Criei este abstract pois notei que todos os handlers utilizam o mesmo logger com o mesmo ID, porém, pode-se remover este cara e criar um logger pra cada handler (seria mais facil pra identificar onde está o erro/info talvez)

    MessageHandlerDiscovery

    Cada Handler precisa implementar o "code" para o discovery conseguir identificar o handler E o método handle que será usado para executar o comando com o RawMessage

    Dentro do discovery foi criada a instancia de TODOS os handlers e adicionado a uma lista, é essa lista que o discovery percorrerá buscando pelo "code" enviado pela Twitch e identificará como executar a mensagem RawMessage

    RawMessage - Builder

    Neste caso apenas usei a validação de NullPointer direto na criação do objeto, isto fará o mesmo que validar se o raw e command é nulo com if como estava anteriormente

    RawMessage(
     raw = this.raw ?: throw NullPointerException("A propriedade raw não pode ser nula"),
     command = this.command ?: throw NullPointerException("A propriedade command não pode ser nula"),
     ...
    )
    

    RoomState

    Foi criado uma extension function do Boolean pra transformar o bool em texto lido por humanos Boolean.toHumanReadable: reduzindo duplicação de código (mesmo if pra vários lugares)

    E no isFollowersOnlyMode, fiz a conversão pra IntOrNull, uma forma talvez mais segura de validar se é followersOnly devido a flexibilidade do valor ser -1, 0, etc... "vai que vem um -2 aí, e nào ta tratado, ficaria como ativado"

    Ainda sobre este cara, a lista de roomState está sendo criado direto no Handler de USERSTATE e ROOMSTATE, mas, se posteriormente esta lista for utilizada em outros comandos, talvez seja necessário voltar ele pro TwitchHandler e repassá-lo para os handlers necessários seja por construtor (navegando pelo discovery) ou por setter

    opened by FelipeNathan 1
Owner
Kotlinautas
Boas-vindas a galáxia Kotlinzera. Somos uma comunidade do Brasil que tem como objetivo compartilhar conhecimento sobre Kotlin.
Kotlinautas
This is a Bluetooth operational Chat-App developed using Kotlin which shows the list of available devices nearby and paired devices, upon clicking you can start chat

This is a Bluetooth operational Chat-App developed using Kotlin which shows the list of available devices nearby and paired devices, upon clicking you can start chat ... VOILA ???? It is still in its early stages of development and currently let user to one-time chat at a time. It is under heavy development ??

Shalu Ambasta 3 Jan 10, 2022
Shit Chat is a realtime chat application made with Kotlin.

Shit Chat Shit Chat is a realtime chat application made with Kotlin. Screeshots : Login UI Sign Up UI User List UI Chat UI Features Store Chat on Fire

Vishal Singh 2 Oct 26, 2022
💙 Android sample Avengers chat application using Stream Chat SDK based on MVVM (ViewModel, Coroutines, Room, Hilt, Repository) architecture.

Avengers Chat AvengersChat is a demo application based on modern Android tech stacks and Stream Chat SDK. Previews Download Go to the Releases to down

Jaewoong Eum 352 Dec 25, 2022
Server/Client Chatting application that allows to choose to chat in a group chat or privately to a specific connected user

ktor_chatting_application Server/Client Chatting application that uses Ktor webs

null 10 Jun 14, 2022
Multi Lingual Chat app - A modern chat application that allows users to translate text messages into their preferred language

Multi Lingual Chat app - A modern chat application that allows users to translate text messages into their preferred language

Manjunath Nayak 0 Jan 18, 2022
Firebase-Chat-App-Final - An android real-time chat application implemented using firebase

Firebase-Chat-App-Final An android real-time chat application implemented using

Tanmay Nandanikar 4 Sep 10, 2022
Chat App is built to demonstrate a simple end-to-end chat encryption using RSA and AES algorithms

End-to-End Encrypted Chat ?? Chat App is built to demonstrate a simple end-to-end chat encryption using RSA and AES algorithms Built With ⚒️ Jetpack C

Team Matrix 6 Dec 23, 2022
Simple chat box written in kotlin, requires a redis server

Chat Box A simple chat box written in kotlin which requires a redis server to be used. Features Command Support Online User storage in Redis Easy to u

GrowlyX 2 Jul 17, 2022
A chat app for Android written in Kotlin using MVVM.

Chat App Android About A chat app for Android written in Kotlin using MVVM. Features Authentication: Email and password Google Auth Reset Password Sen

Sreshtha Mehrotra 14 Jul 3, 2022
A chat app for Android written in Kotlin using MVVM.

Chat App Android About A chat app for Android written in Kotlin using MVVM. Features Authentication: Email and password Google Auth Reset Password Sen

Sreshtha Mehrotra 14 Jul 3, 2022