Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import socket
- import threading
- from flask import Flask, request, jsonify
- from flask_socketio import SocketIO, emit
- app = Flask(__name__)
- socketio = SocketIO(app, cors_allowed_origins="*")
- irc_socket = None
- irc_server = ""
- irc_port = 6667
- irc_nick = ""
- irc_channel = ""
- irc_messages = []
- def connect_to_irc(server, port, nick, channel):
- global irc_socket, irc_server, irc_port, irc_nick, irc_channel
- irc_server = server
- irc_port = port
- irc_nick = nick
- irc_channel = channel
- try:
- irc_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- irc_socket.connect((irc_server, int(irc_port)))
- irc_socket.sendall(f"NICK {irc_nick}\r\n".encode("utf-8"))
- irc_socket.sendall(f"USER {irc_nick} 0 * :CC-IRC Bot\r\n".encode("utf-8"))
- irc_socket.sendall(f"JOIN {irc_channel}\r\n".encode("utf-8"))
- threading.Thread(target=listen_to_irc).start()
- return {"status": "Connected to IRC"}
- except Exception as e:
- return {"error": str(e)}
- def listen_to_irc():
- global irc_socket, irc_messages
- while True:
- try:
- response = irc_socket.recv(2048).decode("utf-8")
- if response.startswith("PING"):
- irc_socket.sendall(f"PONG {response.split()[1]}\r\n".encode("utf-8"))
- else:
- print(response.strip())
- irc_messages.append(response.strip())
- socketio.emit('new_message', {'message': response.strip()})
- except Exception as e:
- print(f"Error: {e}")
- break
- @app.route("/config", methods=["POST"])
- def configure_irc():
- data = request.json
- server = data.get("server", "")
- port = data.get("port", 6667)
- nick = data.get("nick", "")
- channel = data.get("channel", "")
- if not all([server, port, nick, channel]):
- return jsonify({"error": "Invalid configuration"}), 400
- result = connect_to_irc(server, port, nick, channel)
- return jsonify(result)
- @app.route("/send", methods=["POST"])
- def send_message():
- global irc_socket, irc_channel
- data = request.json
- message = data.get("message", "")
- if message and irc_socket:
- try:
- irc_socket.sendall(f"PRIVMSG {irc_channel} :{message}\r\n".encode("utf-8"))
- return jsonify({"status": "Message sent!"}), 200
- except Exception as e:
- return jsonify({"error": str(e)}), 500
- return jsonify({"error": "No message provided or not connected"}), 400
- @app.route("/messages", methods=["GET"])
- def get_messages():
- global irc_messages
- messages_to_return = list(irc_messages)
- irc_messages.clear()
- return jsonify({"messages": messages_to_return})
- if __name__ == "__main__":
- socketio.run(app, host="0.0.0.0", port=8000)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement