\begin{Verbatim}[commandchars=\\\{\}] import os import socket import ssl import time import openai import re openai.api\PYZus{}key = \PYZdq{}get your own!!!!!!\PYZdq{} server = \PYZdq{}irc.sageru.org\PYZdq{} port = 6697 channel = \PYZdq{}\PYZsh{}jp\PYZdq{} botnick = \PYZdq{}chatgpt2\PYZdq{} password = \PYZdq{}\PYZdq{} irc = socket.socket(socket.AF\PYZus{}INET, socket.SOCK\PYZus{}STREAM) irc.connect((server, port)) context = ssl.SSLContext(ssl.PROTOCOL\PYZus{}TLS\PYZus{}CLIENT) context.check\PYZus{}hostname = False context.verify\PYZus{}mode = ssl.CERT\PYZus{}NONE irc\PYZus{}ssl = context.wrap\PYZus{}socket(irc, server\PYZus{}hostname=server) irc\PYZus{}ssl.send((\PYZdq{}USER \PYZdq{} + botnick + \PYZdq{} \PYZdq{} + botnick + \PYZdq{} \PYZdq{} + botnick + \PYZdq{} :I am a bot!\PYZbs{}r\PYZbs{}n\PYZdq{}).encode()) irc\PYZus{}ssl.send((\PYZdq{}NICK \PYZdq{} + botnick + \PYZdq{}\PYZbs{}r\PYZbs{}n\PYZdq{}).encode()) while True: data = irc\PYZus{}ssl.recv(4096).decode(\PYZsq{}utf\PYZhy{}8\PYZsq{}) print(data) \PYZsh{} print all data received from server to console if data.find(\PYZdq{}PING\PYZdq{}) != \PYZhy{}1: irc\PYZus{}ssl.send((\PYZdq{}PONG \PYZdq{} + data.split()[1] + \PYZdq{}\PYZbs{}r\PYZbs{}n\PYZdq{}).encode()) elif data.find(\PYZdq{}422\PYZdq{}) != \PYZhy{}1 or data.find(\PYZdq{}376\PYZdq{}) != \PYZhy{}1: \PYZsh{} if no MOTD or end of MOTD irc\PYZus{}ssl.send((\PYZdq{}JOIN \PYZdq{} + channel + \PYZdq{}\PYZbs{}r\PYZbs{}n\PYZdq{}).encode()) elif data.find(\PYZdq{}PRIVMSG\PYZdq{}) != \PYZhy{}1: match = re.search(r\PYZsq{}\PYZca{}:(.*)!(.*)@(.*) PRIVMSG (.*) :(.*)\PYZsq{}, data) if match: user = match.group(1) message = match.group(5) if message.startswith(botnick + \PYZdq{}:\PYZdq{}): prompt = message.split(botnick + \PYZdq{}:\PYZdq{})[1] response = openai.Completion.create( engine=\PYZdq{}text\PYZhy{}davinci\PYZhy{}003\PYZdq{}, prompt=prompt, max\PYZus{}tokens=2048, n=1, stop=None, temperature=0.3, ) print(response) if response.choices and response.choices[0].text.strip(): text = response.choices[0].text.strip() lines = (line.strip() for line in text.split(\PYZdq{}\PYZbs{}n\PYZdq{}) if line.strip()) for i, line in enumerate(lines): if i \PYZgt{}= 10: irc\PYZus{}ssl.send(f\PYZdq{}PRIVMSG \PYZob{}channel\PYZcb{} :\PYZbs{}x0312Too many lines! Sorry sosu.\PYZbs{}x0F\PYZbs{}r\PYZbs{}n\PYZdq{}.encode()) break prefix = \PYZdq{}\PYZbs{}x0306[ChatGPT]\PYZbs{}x0F \PYZdq{} if i == 0 else \PYZdq{}\PYZdq{} irc\PYZus{}ssl.send(f\PYZdq{}PRIVMSG \PYZob{}channel\PYZcb{} :\PYZob{}prefix\PYZcb{}\PYZbs{}x0312\PYZob{}line\PYZcb{}\PYZbs{}x0F\PYZbs{}r\PYZbs{}n\PYZdq{}.encode()) time.sleep(1) \end{Verbatim}