1
0
mirror of https://github.com/MrDetonia/Maki.git synced 2024-11-25 12:40:46 -05:00

v0.17.0 added last.fm now playing command

This commit is contained in:
Zac Herd 2016-12-01 19:29:58 +00:00
parent a60c310995
commit 73e31db418

53
bot.py
View File

@ -11,6 +11,8 @@ import discord
import asyncio import asyncio
import os import os
import io import io
import urllib3
from html.parser import HTMLParser
import sys import sys
import shlex import shlex
import subprocess import subprocess
@ -24,13 +26,13 @@ import logging
import markov import markov
# file in this directory called "secret.py" should contain these variables # file in this directory called "secret.py" should contain these variables
from secret import token from secret import token, lfmkey
# CONFIGURATION # CONFIGURATION
# bot version # bot version
version = "v0.16.8" version = "v0.17.0"
# text shown by .help command # text shown by .help command
helptext = """I am a Discord bot written in Python helptext = """I am a Discord bot written in Python
@ -45,9 +47,10 @@ My commands are:
.seen <user> - prints when user was last seen .seen <user> - prints when user was last seen
.say <msg> - say something .say <msg> - say something
.sayy <msg> - say something a e s t h e t i c a l l y .sayy <msg> - say something a e s t h e t i c a l l y
.markov [<user>] - generate markov chain over chat history; a blank user will use you .markov [<user>] - generate markov chain over chat history for you or another user
.roll <x>d<y> - roll x number of y sided dice .roll <x>d<y> - roll x number of y sided dice
.qr <msg> - generate a QR code .qr <msg> - generate a QR code
.np [<user>] - fetch now playing from last.fm for you or a specific username
```""" ```"""
# IDs of admin users # IDs of admin users
@ -72,6 +75,8 @@ handler = logging.FileHandler(filename='discord.log', encoding='utf-8', mode='w'
handler.setFormatter(logging.Formatter('%(asctime)s:%(levelname)s:%(name)s: %(message)s')) handler.setFormatter(logging.Formatter('%(asctime)s:%(levelname)s:%(name)s: %(message)s'))
logger.addHandler(handler) logger.addHandler(handler)
# init urllib3 pool manager
http = urllib3.PoolManager()
# FUNCTIONS # FUNCTIONS
@ -83,6 +88,40 @@ def strfromdt(dt):
def dtfromts(ts): def dtfromts(ts):
return datetime.datetime.fromtimestamp(ts) return datetime.datetime.fromtimestamp(ts)
# gets now playing information from last.fm
def lastfm_np(username):
# fetch xml from last.fm
r = http.request("GET", "https://ws.audioscrobbler.com/2.0/?method=user.getRecentTracks&user=" + username + "&limit=1&api_key=" + lfmkey)
if r.status != 200:
return "Couldn't get last.fm data for " + username
xml = r.data.decode('utf-8')
# un-fuck text
h = HTMLParser()
xml = h.unescape(xml)
# isolate fields
username = xml.split('" page="')[0].split('<recenttracks user="')[1]
artist = xml.split('</artist>')[0].split('>')[-1]
song = xml.split('</name>')[0].split('<name>')[1]
album = xml.split('</album>')[0].split('>')[-1]
# grammar
if album != "":
albumtext = "` from the album `" + album + "`"
else:
albumtext = "`"
if xml.find("track nowplaying=\"true\">") == -1:
nowplaying = " last listened"
else:
nowplaying = " is listening"
# construct string
return username + nowplaying + " to `" + song + "` by `" + artist + albumtext
# EVENT HANDLERS # EVENT HANDLERS
@ -242,6 +281,14 @@ def on_message(message):
else: else:
response = 'you did it wrong!' response = 'you did it wrong!'
elif message.content.startswith('.np'):
tmp = message.content[4:]
if tmp == '':
response = lastfm_np(message.author.name)
else:
response = lastfm_np(tmp)
elif message.content.startswith('.qr '): elif message.content.startswith('.qr '):
# generate QR code - DANGEROUS, CHECK CAREFULLY HERE # generate QR code - DANGEROUS, CHECK CAREFULLY HERE
tmp = message.content[4:] tmp = message.content[4:]