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()