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:
parent
a60c310995
commit
73e31db418
53
bot.py
53
bot.py
@ -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:]
|
||||||
|
Loading…
Reference in New Issue
Block a user