Skip to content

Instantly share code, notes, and snippets.

@fabiocerqueira
Last active January 5, 2017 23:00
Show Gist options
  • Select an option

  • Save fabiocerqueira/9c479897d6d2540aa736306678577cee to your computer and use it in GitHub Desktop.

Select an option

Save fabiocerqueira/9c479897d6d2540aa736306678577cee to your computer and use it in GitHub Desktop.
Example running bot on pyqt events
import asyncio
import sys
import logging
from pathlib import Path
from PyQt5 import QtWidgets, uic
from quamash import QEventLoop
from PyIRC.signal import event
from PyIRC.io.asyncio import IRCProtocol
from PyIRC.extensions import bot_recommended
# Setup debugging level
logging.basicConfig(level="DEBUG")
# Create app and setup quamash event loop
app = QtWidgets.QApplication(sys.argv)
loop = QEventLoop(app)
asyncio.set_event_loop(loop)
# Getting UI Classes from main.ui
MainWindowUI, MainWindowBase = uic.loadUiType(Path('main.ui').absolute())
class MainWindow(MainWindowBase, MainWindowUI):
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
self._server_running = False
self._server = None
self._task = None
self.actionConnect.triggered.connect(self.connect)
self.actionDisconnect.triggered.connect(self.disconnect)
self.actionExit_2.triggered.connect(self.close)
self.mainStatus.setPlainText('teste')
def connect(self):
args = {
'serverport': ('weber.freenode.net', 6667),
'ssl': False,
'username': 'EchoBotTesting',
'nick': 'EchoBotTesting',
'gecos': 'I am a test, pls ignore :)',
'extensions': bot_recommended,
'join': ['#testingpyirc'],
}
self._server = EchoBotIRCProtocol(**args)
self._task = asyncio.ensure_future(self._server.connect())
self._server_running = True
def disconnect(self):
if self._server_running:
try:
self._server.send("QUIT", ["Bye!"])
self._server.close()
self._task.cancel()
except Exception as e:
logging.exception(e)
finally:
self._server_running = False
self._server = None
self._task = None
def close(self):
self.disconnect()
return super().close()
class EchoBotIRCProtocol(IRCProtocol):
@event("commands", "PRIVMSG")
def respond(self, event, line):
params = line.params
if len(params) < 2:
return
self.send("PRIVMSG", (line.hostmask.nick, params[1]))
def main_window():
window = MainWindow()
window.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main_window()
try:
loop.run_forever()
finally:
loop.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment