element_music_bot

An element chatbot written in Python.
Log | Files | Refs | README

music.py (2059B)


      1 #!/usr/bin/env python3
      2 
      3 import sys
      4 import re
      5 import configparser
      6 import functions.element as element
      7 from functions.extract_info import (
      8         get_video_info,
      9         get_artist_song,
     10         get_artist_info,
     11         get_tags
     12         )
     13 
     14 from matrix_client.client import MatrixClient
     15 from matrix_client.api import MatrixRequestError
     16 
     17 
     18 def parse_config():
     19     config = configparser.ConfigParser()
     20     config.read('config.ini')
     21 
     22     server = config['server']
     23     host = server['url']
     24     user = server['username']
     25     password = server['password']
     26     room_id = server['room_id']
     27 
     28     return host, user, password, room_id
     29 
     30 
     31 def youtube(event):
     32     message = event['content']['body']
     33     message = message.split()
     34     url = message[0]
     35     
     36     title, desc = get_video_info(url)
     37     song_info = [title]
     38 
     39     artist, song = get_artist_song(title)
     40 
     41     if artist:
     42         tags = get_tags(artist)
     43         bio = get_artist_info(artist)
     44 
     45         if tags and bio:
     46             song_info.append("Genre: " + tags)
     47             song_info.append(re.sub('<.*?>', '', bio))
     48     else:
     49         song_info.append(desc)
     50 
     51     return song_info
     52 
     53 
     54 def send_message(room, message):
     55     for m in message:
     56         room.send_text(m)
     57 
     58 
     59 def on_message(room, event):
     60     if event['type'] == 'm.room.message':
     61         if event['content']['msgtype'] == "m.text":
     62             if 'youtube.com' in event['content']['body'] or 'youtu.be' in event['content']['body']:
     63                 message = youtube(event)
     64                 send_message(room, message)
     65 
     66 
     67 def main():
     68     host, user, password, room_id = parse_config()
     69 
     70     client = MatrixClient(host)
     71 
     72     try:
     73         client.login_with_password(user, password)
     74     except MatrixRequestError as e:
     75         print(e)
     76         sys.exit(1)
     77 
     78     try:
     79         room = client.join_room(room_id)
     80     except MatrixRequestError as e:
     81         print(e)
     82         sys.exit(1)
     83 
     84     room.add_listener(on_message)
     85     client.start_listener_thread()
     86 
     87     while True:
     88         msg = element.get_input()
     89         room.send_text(msg)
     90 
     91 
     92 if __name__ == '__main__':
     93     main()