update
This commit is contained in:
105
TwitchChannelPointsMiner/classes/Chat.py
Normal file
105
TwitchChannelPointsMiner/classes/Chat.py
Normal file
@ -0,0 +1,105 @@
|
||||
import logging
|
||||
import time
|
||||
from enum import Enum, auto
|
||||
from threading import Thread
|
||||
|
||||
from irc.bot import SingleServerIRCBot
|
||||
|
||||
from TwitchChannelPointsMiner.constants import IRC, IRC_PORT
|
||||
from TwitchChannelPointsMiner.classes.Settings import Events, Settings
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class ChatPresence(Enum):
|
||||
ALWAYS = auto()
|
||||
NEVER = auto()
|
||||
ONLINE = auto()
|
||||
OFFLINE = auto()
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class ClientIRC(SingleServerIRCBot):
|
||||
def __init__(self, username, token, channel):
|
||||
self.token = token
|
||||
self.channel = "#" + channel
|
||||
self.__active = False
|
||||
|
||||
super(ClientIRC, self).__init__(
|
||||
[(IRC, IRC_PORT, f"oauth:{token}")], username, username
|
||||
)
|
||||
|
||||
def on_welcome(self, client, event):
|
||||
client.join(self.channel)
|
||||
|
||||
def start(self):
|
||||
self.__active = True
|
||||
self._connect()
|
||||
while self.__active:
|
||||
try:
|
||||
self.reactor.process_once(timeout=0.2)
|
||||
time.sleep(0.01)
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
f"Exception raised: {e}. Thread is active: {self.__active}"
|
||||
)
|
||||
|
||||
def die(self, msg="Bye, cruel world!"):
|
||||
self.connection.disconnect(msg)
|
||||
self.__active = False
|
||||
|
||||
"""
|
||||
def on_join(self, connection, event):
|
||||
logger.info(f"Event: {event}", extra={"emoji": ":speech_balloon:"})
|
||||
"""
|
||||
|
||||
# """
|
||||
def on_pubmsg(self, connection, event):
|
||||
msg = event.arguments[0]
|
||||
mention = None
|
||||
|
||||
if Settings.disable_at_in_nickname is True:
|
||||
mention = f"{self._nickname.lower()}"
|
||||
else:
|
||||
mention = f"@{self._nickname.lower()}"
|
||||
|
||||
# also self._realname
|
||||
# if msg.startswith(f"@{self._nickname}"):
|
||||
if mention != None and mention in msg.lower():
|
||||
# nickname!username@nickname.tmi.twitch.tv
|
||||
nick = event.source.split("!", 1)[0]
|
||||
# chan = event.target
|
||||
|
||||
logger.info(f"{nick} at {self.channel} wrote: {msg}", extra={
|
||||
"emoji": ":speech_balloon:", "event": Events.CHAT_MENTION})
|
||||
# """
|
||||
|
||||
|
||||
class ThreadChat(Thread):
|
||||
def __deepcopy__(self, memo):
|
||||
return None
|
||||
|
||||
def __init__(self, username, token, channel):
|
||||
super(ThreadChat, self).__init__()
|
||||
|
||||
self.username = username
|
||||
self.token = token
|
||||
self.channel = channel
|
||||
|
||||
self.chat_irc = None
|
||||
|
||||
def run(self):
|
||||
self.chat_irc = ClientIRC(self.username, self.token, self.channel)
|
||||
logger.info(
|
||||
f"Join IRC Chat: {self.channel}", extra={"emoji": ":speech_balloon:"}
|
||||
)
|
||||
self.chat_irc.start()
|
||||
|
||||
def stop(self):
|
||||
if self.chat_irc is not None:
|
||||
logger.info(
|
||||
f"Leave IRC Chat: {self.channel}", extra={"emoji": ":speech_balloon:"}
|
||||
)
|
||||
self.chat_irc.die()
|
||||
Reference in New Issue
Block a user