Last active
January 5, 2017 23:00
-
-
Save fabiocerqueira/9c479897d6d2540aa736306678577cee to your computer and use it in GitHub Desktop.
Example running bot on pyqt events
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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