43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
import json
|
|
import asyncio
|
|
from nio import (AsyncClient, RoomMessageText)
|
|
import logging
|
|
|
|
log_format = '%(asctime)s ||| %(name)s | %(levelname)s | %(message)s'
|
|
logging.basicConfig(format=log_format, level=logging.INFO)
|
|
logger = logging.getLogger('geeksbot')
|
|
logger.setLevel(logging.INFO)
|
|
|
|
|
|
class Geeksbot(AsyncClient):
|
|
def __init__(self, base_url, username, password):
|
|
self.base_url = base_url
|
|
self.username = username
|
|
self.password = password
|
|
super(Geeksbot, self).__init__(self.base_url, self.username)
|
|
self.add_event_callback(self.on_message, RoomMessageText)
|
|
|
|
async def login(self):
|
|
await super(Geeksbot, self).login(self.password)
|
|
|
|
async def on_message(self, room, event):
|
|
logger.info(f'Message recieved for room {room.display_name} | {room.user_name(event.sender)}: {event.body}')
|
|
if event.body.startswith('$say '):
|
|
msg = {
|
|
"body": event.body.split(' ', 1)[1],
|
|
"msgtype": 'm.text'
|
|
}
|
|
print(msg)
|
|
resp = await self.room_send(room.room_id, 'm.room.message', msg)
|
|
print(resp)
|
|
|
|
|
|
async def main():
|
|
with open('config.json') as f:
|
|
config = json.load(f)
|
|
client = Geeksbot(**config)
|
|
|
|
await client.login()
|
|
await client.sync_forever(timeout=1000)
|
|
|
|
asyncio.get_event_loop().run_until_complete(main()) |