\begin{Verbatim}[commandchars=\\\{\}] \PY{k+kn}{import}\PY{+w}{ }\PY{n+nn}{listen} \PY{k+kn}{import}\PY{+w}{ }\PY{n+nn}{discord} \PY{k+kn}{from}\PY{+w}{ }\PY{n+nn}{discord}\PY{n+nn}{.}\PY{n+nn}{ext}\PY{+w}{ }\PY{k+kn}{import} \PY{n}{commands} \PY{k+kn}{import}\PY{+w}{ }\PY{n+nn}{websockets} \PY{k+kn}{import}\PY{+w}{ }\PY{n+nn}{json} \PY{k+kn}{import}\PY{+w}{ }\PY{n+nn}{time} \PY{k+kn}{import}\PY{+w}{ }\PY{n+nn}{asyncio} \PY{n}{b} \PY{o}{=} \PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{\PYZdq{}} \PY{k}{class}\PY{+w}{ }\PY{n+nc}{listen}\PY{p}{:} \PY{+w}{ }\PY{l+s+sd}{\PYZdq{}\PYZdq{}\PYZdq{}Beta. Please don\PYZsq{}t run yet.\PYZdq{}\PYZdq{}\PYZdq{}} \PY{k}{def}\PY{+w}{ }\PY{n+nf+fm}{\PYZus{}\PYZus{}init\PYZus{}\PYZus{}}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,} \PY{n}{bot}\PY{p}{)}\PY{p}{:} \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{bot} \PY{o}{=} \PY{n}{bot} \PY{k}{async} \PY{k}{def}\PY{+w}{ }\PY{n+nf}{whiile}\PY{p}{(}\PY{n}{websocket}\PY{p}{,} \PY{n}{ctx}\PY{p}{,} \PY{n}{timee}\PY{p}{)}\PY{p}{:} \PY{n}{time}\PY{o}{.}\PY{n}{sleep}\PY{p}{(}\PY{n}{timee}\PY{o}{/}\PY{l+m+mi}{1000}\PY{p}{)} \PY{k}{await} \PY{n}{websocket}\PY{o}{.}\PY{n}{send}\PY{p}{(}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{\PYZob{}}\PY{l+s+s1}{ }\PY{l+s+s1}{\PYZdq{}}\PY{l+s+s1}{op}\PY{l+s+s1}{\PYZdq{}}\PY{l+s+s1}{: 9 \PYZcb{}}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} \PY{n}{c} \PY{o}{=} \PY{n}{json}\PY{o}{.}\PY{n}{loads}\PY{p}{(}\PY{k}{await} \PY{n}{websocket}\PY{o}{.}\PY{n}{recv}\PY{p}{(}\PY{p}{)}\PY{p}{)} \PY{n}{c} \PY{o}{=} \PY{n}{json}\PY{o}{.}\PY{n}{loads}\PY{p}{(}\PY{k}{await} \PY{n}{websocket}\PY{o}{.}\PY{n}{recv}\PY{p}{(}\PY{p}{)}\PY{p}{)} \PY{k}{if} \PY{n}{c}\PY{p}{[}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{op}\PY{l+s+s2}{\PYZdq{}}\PY{p}{]} \PY{o}{==} \PY{l+m+mi}{1}\PY{p}{:} \PY{k}{await} \PY{n}{ctx}\PY{o}{.}\PY{n}{send}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Currently playing: }\PY{l+s+s2}{\PYZdq{}} \PY{o}{+} \PY{n}{c}\PY{p}{[}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{d}\PY{l+s+s2}{\PYZdq{}}\PY{p}{]}\PY{p}{[}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{song}\PY{l+s+s2}{\PYZdq{}}\PY{p}{]}\PY{p}{[}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{title}\PY{l+s+s2}{\PYZdq{}}\PY{p}{]}\PY{p}{)} \PY{n+nd}{@commands}\PY{o}{.}\PY{n}{command}\PY{p}{(}\PY{p}{)} \PY{k}{async} \PY{k}{def}\PY{+w}{ }\PY{n+nf}{listen\PYZus{}moe}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,} \PY{n}{ctx}\PY{p}{)}\PY{p}{:} \PY{c+c1}{\PYZsh{} if ctx.message.author.voice.is\PYZus{}connected() == True:} \PY{c+c1}{\PYZsh{} await ctx.message.author.voice.disconnect()} \PY{k}{if} \PY{n}{ctx}\PY{o}{.}\PY{n}{message}\PY{o}{.}\PY{n}{author}\PY{o}{.}\PY{n}{voice} \PY{o}{==} \PY{k+kc}{None}\PY{p}{:} \PY{k}{await} \PY{n}{ctx}\PY{o}{.}\PY{n}{send}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{I}\PY{l+s+s2}{\PYZsq{}}\PY{l+s+s2}{m only going to play listen.moe if you}\PY{l+s+s2}{\PYZsq{}}\PY{l+s+s2}{re there to listen with me. ;\PYZhy{};}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)} \PY{k}{else}\PY{p}{:} \PY{n}{a} \PY{o}{=} \PY{k}{await} \PY{n}{ctx}\PY{o}{.}\PY{n}{message}\PY{o}{.}\PY{n}{author}\PY{o}{.}\PY{n}{voice}\PY{o}{.}\PY{n}{channel}\PY{o}{.}\PY{n}{connect}\PY{p}{(}\PY{p}{)} \PY{n}{a}\PY{o}{.}\PY{n}{play}\PY{p}{(}\PY{n}{discord}\PY{o}{.}\PY{n}{FFmpegPCMAudio}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{https://listen.moe/stream}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}\PY{p}{)} \PY{k}{async} \PY{k}{with} \PY{n}{websockets}\PY{o}{.}\PY{n}{connect}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{wss://listen.moe/gateway}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)} \PY{k}{as} \PY{n}{web}\PY{p}{:} \PY{k}{await} \PY{n}{web}\PY{o}{.}\PY{n}{send}\PY{p}{(}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{\PYZob{}}\PY{l+s+s1}{ }\PY{l+s+s1}{\PYZdq{}}\PY{l+s+s1}{op}\PY{l+s+s1}{\PYZdq{}}\PY{l+s+s1}{: 0, }\PY{l+s+s1}{\PYZdq{}}\PY{l+s+s1}{d}\PY{l+s+s1}{\PYZdq{}}\PY{l+s+s1}{: }\PY{l+s+s1}{\PYZob{}}\PY{l+s+s1}{\PYZdq{}}\PY{l+s+s1}{auth}\PY{l+s+s1}{\PYZdq{}}\PY{l+s+s1}{: }\PY{l+s+s1}{\PYZdq{}}\PY{l+s+s1}{\PYZdq{}}\PY{l+s+s1}{ \PYZcb{} \PYZcb{}}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} \PY{n}{b} \PY{o}{=} \PY{n}{json}\PY{o}{.}\PY{n}{loads}\PY{p}{(}\PY{k}{await} \PY{n}{web}\PY{o}{.}\PY{n}{recv}\PY{p}{(}\PY{p}{)}\PY{p}{)} \PY{n}{c} \PY{o}{=} \PY{n}{json}\PY{o}{.}\PY{n}{loads}\PY{p}{(}\PY{k}{await} \PY{n}{web}\PY{o}{.}\PY{n}{recv}\PY{p}{(}\PY{p}{)}\PY{p}{)} \PY{k}{await} \PY{n}{ctx}\PY{o}{.}\PY{n}{send}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Joined Listen.moe! Currently playing: }\PY{l+s+s2}{\PYZdq{}} \PY{o}{+} \PY{n}{c}\PY{p}{[}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{d}\PY{l+s+s2}{\PYZdq{}}\PY{p}{]}\PY{p}{[}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{song}\PY{l+s+s2}{\PYZdq{}}\PY{p}{]}\PY{p}{[}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{title}\PY{l+s+s2}{\PYZdq{}}\PY{p}{]}\PY{p}{)} \PY{n}{lsock} \PY{o}{=} \PY{n}{listen}\PY{o}{.}\PY{n}{whiile}\PY{p}{(}\PY{n}{web}\PY{p}{,} \PY{n}{ctx}\PY{p}{,} \PY{n}{b}\PY{p}{[}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{d}\PY{l+s+s2}{\PYZdq{}}\PY{p}{]}\PY{p}{[}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{heartbeat}\PY{l+s+s2}{\PYZdq{}}\PY{p}{]}\PY{p}{)} \PY{n}{asyncio}\PY{o}{.}\PY{n}{get\PYZus{}event\PYZus{}loop}\PY{p}{(}\PY{p}{)}\PY{o}{.}\PY{n}{run\PYZus{}until\PYZus{}complete}\PY{p}{(}\PY{n}{lsock}\PY{p}{)} \PY{n}{asyncio}\PY{o}{.}\PY{n}{get\PYZus{}event\PYZus{}loop}\PY{p}{(}\PY{p}{)}\PY{o}{.}\PY{n}{run\PYZus{}forever}\PY{p}{(}\PY{p}{)} \PY{n+nd}{@commands}\PY{o}{.}\PY{n}{command}\PY{p}{(}\PY{p}{)} \PY{k}{async} \PY{k}{def}\PY{+w}{ }\PY{n+nf}{stop}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,} \PY{n}{ctx}\PY{p}{)}\PY{p}{:} \PY{k}{if} \PY{n}{ctx}\PY{o}{.}\PY{n}{voice\PYZus{}client}\PY{p}{:} \PY{n}{ctx}\PY{o}{.}\PY{n}{voice\PYZus{}client}\PY{o}{.}\PY{n}{source}\PY{o}{.}\PY{n}{cleanup}\PY{p}{(}\PY{p}{)} \PY{k}{await} \PY{n}{ctx}\PY{o}{.}\PY{n}{voice\PYZus{}client}\PY{o}{.}\PY{n}{disconnect}\PY{p}{(}\PY{p}{)} \PY{k}{def}\PY{+w}{ }\PY{n+nf}{setup}\PY{p}{(}\PY{n}{bot}\PY{p}{)}\PY{p}{:} \PY{n}{bot}\PY{o}{.}\PY{n}{add\PYZus{}cog}\PY{p}{(}\PY{n}{listen}\PY{p}{(}\PY{n}{bot}\PY{p}{)}\PY{p}{)} \end{Verbatim}