Hi all!
I am writing (Python3.6) a bot that reads all messages sent to a channel, and then echos those messages back to the chat. I know there isn’t much use for this bot, but ideally it will serve as a skeleton for some future projects.
I currently have it connecting to a channel and reading all messages that are sent to that channel, but it’s have issues when it comes to sending messages to the channel chat (I actually had it working previously, but for some reason it is not working now). It prints what is seemingly the correctly formatted message to my command line output, but it never shows up in the channel chat. I’m thinking that I may be screwing up some formatting when I try to have it send a message.
I’ve checked the other topics here, triple checked to make sure that my channel and username are all lowercase, and that my oath key is correct. I’m hoping that someone can help point out the error that I can’t seem to find.
Sorry in advance for my formatting, this is my first post.
Behavior and output:
Run.py:
from Socket import openSocket, sendMessage
from Initialize import joinRoom
from Settings import RATE
import time, socket, string, re
s = openSocket()
joinRoom(s)
readbuffer=""
CHAT_MESSAGE=re.compile(r"^:\w+!\w+@\w+\.tmi\.twitch\.tv PRIVMSG #\w+ :")
while True:
#get all lines that come in
readbuffer=s.recv(1024).decode("utf-8")
print(readbuffer) #print everything that comes in
if readbuffer == "PING :tmi.twitch.tv\r\n":
print("WAS JUST PINGED, SENDING PONG")
s.send("PONG :tmi.twitch.tv\r\n".encode("utf-8"))
else:
username = re.search(r"\w+", readbuffer).group(0) #parse username and message
message = CHAT_MESSAGE.sub("", readbuffer)
print(username + ": " + message)
sendMessage(s, message) #copy what user says and send it!
Socket.py:
import socket
from Settings import HOST, PORT, PASS, BOT, CHANNEL
#opens socket, connects BOT to twitch,
#joins channel CHANNEL and returns socket.
def openSocket():
s=socket.socket()
s.connect((HOST, PORT))
password="PASS {}\r\n".format(PASS).encode()
s.send(password)
username="NICK {}\r\n".format(BOT).encode()
s.send(username)
joinChannel="JOIN #{}\r\n".format(CHANNEL).encode()
s.send(joinChannel)
return s
def sendMessage(s, message):
messageTemp="PRIVMSG #{} :{}\r\n".format(CHANNEL, message).encode()
s.send(messageTemp)
print("BOT SENT MESSAGE: "+messageTemp.decode())
Initialize.py:
import string
from Socket import sendMessage
def joinRoom(s):
readbuffer=""
Loading = True
#TODO clean this up
while Loading:
newbuffer = readbuffer.join(s.recv(1024).decode())
temp = newbuffer.split("\n")
newbuffer = temp.pop
for line in temp:
print(line)
Loading = loadingComplete(line)
if (not Loading):
break
#break
sendMessage(s, "Bot's first message to chat") #send Kappa upon joining room
print("JOINROOM END")
def loadingComplete(line):
if ("End of /NAMES list" in line):
return False
else:
return True
Settings.py
HOST="irc.twitch.tv"
PORT=6667
PASS="oauth:xxxxxxxxxxxxxxxxxxxxxx"
BOT="pikaboyden"
CHANNEL="loslobodev"
RATE=(20/30) #20 messages per 30 seconds
Any suggestions or help is appreciated, thanks for looking!
EDIT/UPDATE1: For some reason, the bot can send to it’s own channel, but cannot receive messages in it’s own channel. Here is the same program running but I’ve changed the channel from “loslobodev” (my main) to “pikaboyden”(my bot’s channel)
UPDATE2: It also is able to read all messages on a popular channel, but still cannot send from the bot. If I log into the account I can still manually type in chat and participate so I know the account is not banned.