From 4056f60cd8e420769844c9866c78b3e951230a84 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Wed, 20 Jan 2021 21:55:42 -0500 Subject: [PATCH 01/61] duplicated statping functions for mmr monitor --- r0b3bot.py | 239 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 239 insertions(+) diff --git a/r0b3bot.py b/r0b3bot.py index 300ebd6..6060225 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -905,6 +905,245 @@ async def get_stp_status(service): if not found: return "service not found" +# +# Begin functions for MMR sub/alerts +# +@bot.command() +async def mmrsub(ctx, service = "NONE"): + + mmrsublist = {} # MMR Subscription list to be read in from file + # Structure of spsublist nested dictionary + # spsublist[service name][list of channel ids][a state value] + # dict = {'Plex': {'state' : 'online', 'channels' : ['1232', '43234']} + # 'Space Eingineers' : {'state' : online', 'channels' : ['2343', '54563']}} + # + mmrcurrentsub_request = [] # list of elements detailing the current sub request + datestring = datetime.now() + datestring = datestring.strftime("%m/%d/%Y-%H:%M:%S") + + # replace _ with sapces + service = service.replace("_"," ") + + print(f"[{datestring}]: {ctx.message.author.display_name} called '$mmrsub '{service}'''") + + # Only work on this if the user has supplied a service name to monitor, a value of NONE + # means nothing was specified + if service != "NONE" and service != "-list" and not service.startswith('-del '): + + print(f">> Querying status of '{service}' to see if it exists") + service_state = await get_stp_status(service) + + if service != "NONE": + + if service == "-list": + # List the serivces that this channel is subscribed to + # Read in mmrsublist + mmrsublist = '' + async with aiof.open('mmrsublist.dat', 'rb') as datafile: + pickled_mmrsublist = await datafile.read() + mmrsublist = pickle.loads(pickled_mmrsublist) + + for service in mmrsublist.keys(): + + for channel in mmrsublist[service]['channels']: + if channel == ctx.channel.id: + mmrsublist += f"'{service}' " + + await ctx.send(f"This channel is subscribed to: {sublist}") + + elif service.startswith('-del:'): + # Delete the service from this channels subscriptions + service_toremove = service[5:] + print(f"{service_toremove}") + + # Open the data file for read in + async with aiof.open('mmrsublist.dat', 'rb') as datafile: + pickled_mmrsublist = await datafile.read() + mmrsublist = pickle.loads(pickled_mmrsublist) + + # We haven't found either the channel or servic; mark as false + found_service = False + found_channel = False + + # Iterate through the service names in the data + for service in mmrsublist.keys(): + + # If the service we want to unsub from is the same as the service in the data, we need to search for the channel + if service.lower() == service_toremove.lower(): + + # We've found the service match, mark as true + found_service = True + + # Iterate through the channels that are subbed to this service + for channel in mmrsublist[service]['channels']: + + # If a channel listed in the service matches the current users channel id, we've found our match + if channel == ctx.channel.id: + + # Marking channel as found + found_channel = True + # Get the proper name of the service + service_toremove = service + #Remove the current users channel from this service + mmrsublist[service]['channels'].remove(ctx.channel.id) + # Break since we're done. + break + + # If we got to the point of finding the channel, we're done. + if found_channel: + break + + if found_service and found_channel: + print(">> Saving dictionary to mmrsublist.dat") + async with aiof.open('mmrsublist.dat', 'wb') as datafile: + pickled_mmrsublist = pickle.dumps(mmrsublist, protocol=4) + await datafile.write(pickled_mmrsublist) + #await datafile.fsync() + await datafile.flush() + await ctx.send(f"This channel is unsubscribed from '{service}' alerts.") + else: + await ctx.send(f"This channel is not subscribed to alerts for '{service_toremove}''") + + # If the service exists, proceed with adding it to the list. + elif service_state != "service not found": + + print(f">> '{service}' is a valid Hanlde on Whatismymmr.com.") + print(f">> Checking if it has already been subscribed to") + #await ctx.send(f"'{service_state['name']}' added to monitored services") + mmrcurrentsub_request.append(ctx.channel.id) + mmrcurrentsub_request.append(service_state['name']) + mmrcurrentsub_request.append("online") + print(f">> Channel ID: {mmrcurrentsub_request[0]}") + print(f">> Service Name: {mmrcurrentsub_request[1]}") + print(f">> Initial State to set: {mmrcurrentsub_request[2]}") + + # read in data file containing dict of subscriptions + print(">> Checking for mmrsublist.dat") + if os.path.exists('mmrsublist.dat'): + + print(">> Data file exists, reading it in.") + # Read in mmrsublist + async with aiof.open('mmrsublist.dat', 'rb') as datafile: + pickled_mmrsublist = await datafile.read() + mmrspsublist = pickle.loads(pickled_mmrsublist) + + print(f">> Checking if handle is already in datafile") + found_service = False + found_channel = False + for service in mmrsublist.keys(): + print(f">> Does {service.lower()} == {mmrcurrentsub_request[1].lower()}") + + if service.lower() == mmrcurrentsub_request[1].lower(): + found_service = True + # This service matched what the user is trying to subscribe to + # Now we need to check if this is for the same channel + print(f">> Found {service} in data file, checking for channel") + + for channel in mmrsublist[service]['channels']: + if channel == mmrcurrentsub_request[0]: + print(f">> This channel is already subscribed to {service}") + await ctx.send(f"This channel is already subscribed to {service} alerts") + found_channel = True + break + if not found_channel: + # Append the current channel id to the list for this service + print(f">> Adding handle '{mmrcurrentsub_request[1]}' to {ctx.channel.id}") + await ctx.send(f"{service} has been added to monitored handles for this channel") + mmrsublist[service]['channels'].append(mmrcurrentsub_request[0]) + break + + if not found_service: + # Append the current channel id to the list for this service + print(f">> Adding handle '{mmrcurrentsub_request[1]}' to {ctx.channel.id}") + await ctx.send(f"{mmrcurrentsub_request[1]} has been added to monitored handle for this channel") + #newsub = {} + #newsub[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} + mmrsublist[mmrcurrentsub_request[1]] = {'state' : 'online', 'channels' : [mmrcurrentsub_request[0]]} + + else: + + print(">> mmrsublist.dat does not exist, new file will be created") + + # append new subscription to dict + print(">> Creating new dictionary") + mmrsublist[mmrcurrentsub_request[1]] = {'state' : 'online', 'channels' : [mmrcurrentsub_request[0]]} + print(f">> {service} subscription has been saved") + await ctx.send(f"{service} has been added to monitored handles for this channel") + + #Write updated array to data file + print(">> Saving dictionary to mmrsublist.dat") + async with aiof.open('mmrsublist.dat', 'wb') as datafile: + pickled_mmrsublist = pickle.dumps(mmrsublist, protocol=4) + await datafile.write(pickled_mmrsublist) + #await datafile.fsync() + await datafile.flush() + + print(">> Done") + #await ctx.send(f"'{service_state['name']}' added to monitored services") + + else: + print(f">> '{service}' does not exist, cancelling subscription") + await ctx.send(f"{service} was not found") + +async def mmr_monitor(sublist): + + # Checks the services listed in spsublist for status change + # Sublist is a list of 3 items: + # - ctx (used to send alert to channel) + # - service (the name of the service to check) + # - status string (last status of the service, either 'online' or 'offline') + + ctx = sublist[0] + + + while True: + + status = await get_stp_status(spsublist[1]) + if status['online'] and spsublist[2] == "online": + # nothing has changed, no alert needed + await asyncio.sleep(1) + elif not status['online'] and spsublist[2] == "offline": + # again, nothing has changed no alert needed + await asyncio.sleep(1) + else: + print(f"Status of {status['name']}' has changed") + if status['online']: + embed = discord.Embed(title=f"{status['name']} Service Alert", description=f"{spsublist[1]} is Online!", color=0x00ff40) + await ctx.send(embed=embed) + #await ctx.send(f"{spsublist[1]} is Online!") + spsublist[2] = "online" + elif not status['online']: + embed = discord.Embed(title=f"{status['name']} Service Alert", description=f"{spsublist[1]} is Offline!", color=0xff2200) + await ctx.send(embed=embed) + #await ctx.send(f"{spsublist[1]} is Offline!") + spsublist[2] = "offline" + else: + embed = discord.Embed(title=f"{status['name']} Service Alert", description=f"{spsublist[1]} is in an unknown state!", color=0xffff00) + await ctx.send(embed=embed) + #await ctx.send(f"Unknown state for service {spsublist[1]}") + await asyncio.sleep(60) + +async def get_mmr_status(mmrhandle): + + # Get StatPing status via REST API + mmrhandle_array = requests.get(mmrURL, headers=mmrHEADERS) + found = False + + # spservice_array is json data, need to treat it as such + for handle in mmrhandle_array.json(): + + # using lower() to eliminate any case mismatch problems + if mmrhandle['name'].lower() == handle.lower(): + + found = True + return mmrhandle + + # Want to alert user if the service was not found + if not found: + return "Handle not found" +# +# +# @bot.command() async def help(ctx): -- 2.39.5 From affbf366a1e22b044b201d3ca549fe48009fc272 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 14 Feb 2021 21:37:17 -0500 Subject: [PATCH 02/61] adding base code for mmr_checker --- r0b3bot.py | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/r0b3bot.py b/r0b3bot.py index 6060225..a25f4cd 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1141,6 +1141,78 @@ async def get_mmr_status(mmrhandle): # Want to alert user if the service was not found if not found: return "Handle not found" + +async def MMR_Monitor(): + + # reads in "mmrsublist.dat" every 3 hours then iterates + # through to check for mmr status changes. This function will need to check + # that "spsublist.dat" exists and is not empty. This function should be called + # in bot.on_ready + + # read in data file containing list of subscriptions + while True: + print("MMR Monitor: Reading in mmrsublist.dat") + if os.path.exists('mmrsublist.dat'): + async with aiof.open('mmrsublist.dat', 'rb') as datafile: + pickled_mmrsublist = await datafile.read() + mmrsublist = pickle.loads(pickled_mmrsublist) + + for handle in mmrsublist.keys(): + # service used to be subscription + status = await get_mmr_status(handle) + print(f">> {handle} Online: {handle['online']} | Previous state: {mmrsublist[handle]['state']}") + if status != 'handle not found': + if status['online'] and mmrsublist[handle]['state'] == 'online': + + # nothing has changed, no alert needed + await asyncio.sleep(1) + elif not status['online'] and mmrsublist[handle]['state'] == "offline": + + # again, nothing has changed no alert needed + await asyncio.sleep(1) + else: + + print(f">> Status of '{handle}' has changed, notifying subscribed channels") + + if status['online']: + mmrsublist[handle]['state'] = 'online' + for channel in mmrsublist[handle]['channels']: + ctx = bot.get_channel(channel) + print(f">> Alerting {ctx} that {handle} is Online") + embed = discord.Embed(title=f"MMR Alert", description=f"{handle} is Online!", color=0x00ff40) + await ctx.send(embed=embed) + + elif not status['online']: + mmrsublist[handle]['state'] = 'offline' + for channel in mmrsublist[handle]['channels']: + ctx = bot.get_channel(channel) + print(f">> Alerting {ctx} that {handle} is Offline") + embed = discord.Embed(title=f"MMR Alert", description=f"{handle} is Offline!", color=0xff2200) + await ctx.send(embed=embed) + + else: + for channel in mmrsublist[handle]['channels']: + ctx = bot.get_channel(channel) + print(f">> Alerting {ctx} that {handle} is an Unknown state") + embed = discord.Embed(title=f"MMR Alert", description=f"{handle} is in an unknown state!", color=0xffff00) + await ctx.send(embed=embed) + print(">> Done") + + #new_spsublist.append(subscription) + + # Write status changes to spsublist.dat + async with aiof.open('mmrsublist.dat', 'wb') as datafile: + pickled_mmrsublist = pickle.dumps(mmrsublist) + await datafile.write(pickled_mmrsublist) + #await datafile.fsync() + await datafile.flush() + + else: + print(">> mmrsublist.dat does not exist, nothing to do.") + + # 10800 seconds == 3 hours :) + await asyncio.sleep(10800) + # # # -- 2.39.5 From fa2a34c951d0720f88b762878e4b4a33b7533168 Mon Sep 17 00:00:00 2001 From: Rich O Date: Fri, 19 Mar 2021 22:24:04 -0400 Subject: [PATCH 03/61] adding mmr api variable --- bot_config.conf.example | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bot_config.conf.example b/bot_config.conf.example index af77115..b7804b1 100644 --- a/bot_config.conf.example +++ b/bot_config.conf.example @@ -18,4 +18,5 @@ hass_token = hass_light = octoprint_ip_address = statping_url = -statping_api_key = \ No newline at end of file +statping_api_key = +mmr_api_url = -- 2.39.5 From 544f7b583394004cac3940db300f2ae34c1925b5 Mon Sep 17 00:00:00 2001 From: Rich O Date: Fri, 19 Mar 2021 22:43:02 -0400 Subject: [PATCH 04/61] I think all of the necessary changes have been made to add the mmr checker... needs to test now? --- r0b3bot.py | 137 ++++++++++++++++++++++++++--------------------------- 1 file changed, 68 insertions(+), 69 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index a25f4cd..5bc9785 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -61,6 +61,12 @@ statpingHEADERS = { 'content-type': 'application/json', } +mmrURLBASE = ('bot-config', 'mmr_api_url') +mmrHEADERS = { + 'User-Agent': 'Linux:com.r0b3bot:v.01a' + 'content-type': 'application/json' +} + # Configure bot bot = commands.Bot(command_prefix=BOT_COMMAND_PREFIX, description='A derpy derp of a bot.') @@ -914,7 +920,7 @@ async def mmrsub(ctx, service = "NONE"): mmrsublist = {} # MMR Subscription list to be read in from file # Structure of spsublist nested dictionary # spsublist[service name][list of channel ids][a state value] - # dict = {'Plex': {'state' : 'online', 'channels' : ['1232', '43234']} + # dict = {'Handle': {'AvgRank' : 'value', 'channels' : ['1232', '43234']} # 'Space Eingineers' : {'state' : online', 'channels' : ['2343', '54563']}} # mmrcurrentsub_request = [] # list of elements detailing the current sub request @@ -922,20 +928,20 @@ async def mmrsub(ctx, service = "NONE"): datestring = datestring.strftime("%m/%d/%Y-%H:%M:%S") # replace _ with sapces - service = service.replace("_"," ") + handle = handle.replace("_"," ") - print(f"[{datestring}]: {ctx.message.author.display_name} called '$mmrsub '{service}'''") + print(f"[{datestring}]: {ctx.message.author.display_name} called '$mmrsub '{handle}'''") # Only work on this if the user has supplied a service name to monitor, a value of NONE # means nothing was specified - if service != "NONE" and service != "-list" and not service.startswith('-del '): + if handle != "NONE" and handle != "-list" and not handle.startswith('-del '): - print(f">> Querying status of '{service}' to see if it exists") - service_state = await get_stp_status(service) + print(f">> Querying status of '{handle}' to see if it exists") + service_state = await get_stp_status(handle) - if service != "NONE": + if handle != "NONE": - if service == "-list": + if handle == "-list": # List the serivces that this channel is subscribed to # Read in mmrsublist mmrsublist = '' @@ -943,18 +949,18 @@ async def mmrsub(ctx, service = "NONE"): pickled_mmrsublist = await datafile.read() mmrsublist = pickle.loads(pickled_mmrsublist) - for service in mmrsublist.keys(): + for handle in mmrsublist.keys(): - for channel in mmrsublist[service]['channels']: + for channel in mmrsublist[handle]['channels']: if channel == ctx.channel.id: - mmrsublist += f"'{service}' " + mmrsublist += f"'{handle}' " - await ctx.send(f"This channel is subscribed to: {sublist}") + await ctx.send(f"This channel is subscribed to: {mmrsublist}") - elif service.startswith('-del:'): + elif handle.startswith('-del:'): # Delete the service from this channels subscriptions - service_toremove = service[5:] - print(f"{service_toremove}") + handle_toremove = handle[5:] + print(f"{handle_toremove}") # Open the data file for read in async with aiof.open('mmrsublist.dat', 'rb') as datafile: @@ -962,20 +968,20 @@ async def mmrsub(ctx, service = "NONE"): mmrsublist = pickle.loads(pickled_mmrsublist) # We haven't found either the channel or servic; mark as false - found_service = False + found_handle = False found_channel = False # Iterate through the service names in the data - for service in mmrsublist.keys(): + for handle in mmrsublist.keys(): # If the service we want to unsub from is the same as the service in the data, we need to search for the channel - if service.lower() == service_toremove.lower(): + if handle.lower() == handle_toremove.lower(): # We've found the service match, mark as true - found_service = True + found_handle = True # Iterate through the channels that are subbed to this service - for channel in mmrsublist[service]['channels']: + for channel in mmrsublist[handle]['channels']: # If a channel listed in the service matches the current users channel id, we've found our match if channel == ctx.channel.id: @@ -983,9 +989,9 @@ async def mmrsub(ctx, service = "NONE"): # Marking channel as found found_channel = True # Get the proper name of the service - service_toremove = service + handle_toremove = service #Remove the current users channel from this service - mmrsublist[service]['channels'].remove(ctx.channel.id) + mmrsublist[handle]['channels'].remove(ctx.channel.id) # Break since we're done. break @@ -993,21 +999,21 @@ async def mmrsub(ctx, service = "NONE"): if found_channel: break - if found_service and found_channel: + if found_handle and found_channel: print(">> Saving dictionary to mmrsublist.dat") async with aiof.open('mmrsublist.dat', 'wb') as datafile: pickled_mmrsublist = pickle.dumps(mmrsublist, protocol=4) await datafile.write(pickled_mmrsublist) #await datafile.fsync() await datafile.flush() - await ctx.send(f"This channel is unsubscribed from '{service}' alerts.") + await ctx.send(f"This channel is unsubscribed from '{handle}' alerts.") else: - await ctx.send(f"This channel is not subscribed to alerts for '{service_toremove}''") + await ctx.send(f"This channel is not subscribed to alerts for '{handle_toremove}''") # If the service exists, proceed with adding it to the list. - elif service_state != "service not found": + elif handle_state != "service not found": - print(f">> '{service}' is a valid Hanlde on Whatismymmr.com.") + print(f">> '{handle}' is a valid Hanlde on Whatismymmr.com.") print(f">> Checking if it has already been subscribed to") #await ctx.send(f"'{service_state['name']}' added to monitored services") mmrcurrentsub_request.append(ctx.channel.id) @@ -1028,31 +1034,31 @@ async def mmrsub(ctx, service = "NONE"): mmrspsublist = pickle.loads(pickled_mmrsublist) print(f">> Checking if handle is already in datafile") - found_service = False + found_handle = False found_channel = False for service in mmrsublist.keys(): - print(f">> Does {service.lower()} == {mmrcurrentsub_request[1].lower()}") + print(f">> Does {handle.lower()} == {mmrcurrentsub_request[1].lower()}") - if service.lower() == mmrcurrentsub_request[1].lower(): - found_service = True + if handle.lower() == mmrcurrentsub_request[1].lower(): + found_handle = True # This service matched what the user is trying to subscribe to # Now we need to check if this is for the same channel - print(f">> Found {service} in data file, checking for channel") + print(f">> Found {handle} in data file, checking for channel") - for channel in mmrsublist[service]['channels']: + for channel in mmrsublist[handle]['channels']: if channel == mmrcurrentsub_request[0]: - print(f">> This channel is already subscribed to {service}") - await ctx.send(f"This channel is already subscribed to {service} alerts") + print(f">> This channel is already subscribed to {handle}") + await ctx.send(f"This channel is already subscribed to {handle} alerts") found_channel = True break if not found_channel: # Append the current channel id to the list for this service print(f">> Adding handle '{mmrcurrentsub_request[1]}' to {ctx.channel.id}") - await ctx.send(f"{service} has been added to monitored handles for this channel") + await ctx.send(f"{handle} has been added to monitored handles for this channel") mmrsublist[service]['channels'].append(mmrcurrentsub_request[0]) break - if not found_service: + if not found_handle: # Append the current channel id to the list for this service print(f">> Adding handle '{mmrcurrentsub_request[1]}' to {ctx.channel.id}") await ctx.send(f"{mmrcurrentsub_request[1]} has been added to monitored handle for this channel") @@ -1067,8 +1073,8 @@ async def mmrsub(ctx, service = "NONE"): # append new subscription to dict print(">> Creating new dictionary") mmrsublist[mmrcurrentsub_request[1]] = {'state' : 'online', 'channels' : [mmrcurrentsub_request[0]]} - print(f">> {service} subscription has been saved") - await ctx.send(f"{service} has been added to monitored handles for this channel") + print(f">> {handle} subscription has been saved") + await ctx.send(f"{handle} has been added to monitored handles for this channel") #Write updated array to data file print(">> Saving dictionary to mmrsublist.dat") @@ -1082,8 +1088,8 @@ async def mmrsub(ctx, service = "NONE"): #await ctx.send(f"'{service_state['name']}' added to monitored services") else: - print(f">> '{service}' does not exist, cancelling subscription") - await ctx.send(f"{service} was not found") + print(f">> '{handle}' does not exist, cancelling subscription") + await ctx.send(f"{handle} was not found") async def mmr_monitor(sublist): @@ -1126,21 +1132,14 @@ async def mmr_monitor(sublist): async def get_mmr_status(mmrhandle): # Get StatPing status via REST API - mmrhandle_array = requests.get(mmrURL, headers=mmrHEADERS) - found = False - - # spservice_array is json data, need to treat it as such - for handle in mmrhandle_array.json(): - - # using lower() to eliminate any case mismatch problems - if mmrhandle['name'].lower() == handle.lower(): - - found = True - return mmrhandle - - # Want to alert user if the service was not found - if not found: - return "Handle not found" + #need to replace spaces with %20 before just inserting into URL + mmrhandle.replace(" ", "%20") + mmrURL = mmrURLBASE + mmrhandle + response = requests.get(mmrURL, headers=mmrHEADERS) + mmr_stats = json.loads(response.text) + + return mmr_stats['ranked']['avg'] + async def MMR_Monitor(): @@ -1160,13 +1159,13 @@ async def MMR_Monitor(): for handle in mmrsublist.keys(): # service used to be subscription status = await get_mmr_status(handle) - print(f">> {handle} Online: {handle['online']} | Previous state: {mmrsublist[handle]['state']}") + print(f">> {handle} Average Rank: {handle['AvgRank']} | Previous state: {mmrsublist[handle]['AvgRank']}") if status != 'handle not found': - if status['online'] and mmrsublist[handle]['state'] == 'online': + if status['AvgRank'] == mmrsublist[handle]['AvgTank']: # nothing has changed, no alert needed await asyncio.sleep(1) - elif not status['online'] and mmrsublist[handle]['state'] == "offline": + elif not status['AvgRank'] != mmrsublist[handle]['AvgRank']: # again, nothing has changed no alert needed await asyncio.sleep(1) @@ -1174,27 +1173,27 @@ async def MMR_Monitor(): print(f">> Status of '{handle}' has changed, notifying subscribed channels") - if status['online']: - mmrsublist[handle]['state'] = 'online' + if status['AvgRank'] > mmrsublist[handle]['AvgRank']: + mmrsublist[handle]['AvgRank'] = status['AvgRank'] for channel in mmrsublist[handle]['channels']: ctx = bot.get_channel(channel) - print(f">> Alerting {ctx} that {handle} is Online") - embed = discord.Embed(title=f"MMR Alert", description=f"{handle} is Online!", color=0x00ff40) + print(f">> Alerting {ctx} that {handle} Average Rank has Increased!") + embed = discord.Embed(title=f"MMR Alert", description=f"{handle}'s rank is {status['AvgRank']}", color=0x00ff40) await ctx.send(embed=embed) - elif not status['online']: - mmrsublist[handle]['state'] = 'offline' + elif status['AvgRank'] < mmrsublist[handle]['AvgRank']: + mmrsublist[handle]['state'] = status['AvgRank'] for channel in mmrsublist[handle]['channels']: ctx = bot.get_channel(channel) - print(f">> Alerting {ctx} that {handle} is Offline") - embed = discord.Embed(title=f"MMR Alert", description=f"{handle} is Offline!", color=0xff2200) + print(f">> Alerting {ctx} that {handle}'s Average Rank has Decreased!") + embed = discord.Embed(title=f"MMR Alert", description=f"{handle}'s rank is {status['AvgRank']}", color=0xff2200) await ctx.send(embed=embed) else: for channel in mmrsublist[handle]['channels']: ctx = bot.get_channel(channel) - print(f">> Alerting {ctx} that {handle} is an Unknown state") - embed = discord.Embed(title=f"MMR Alert", description=f"{handle} is in an unknown state!", color=0xffff00) + print(f">> Alerting {ctx} that {handle}'s rank is an unknown state") + embed = discord.Embed(title=f"MMR Alert", description=f"{handle}'s rank is in an unknown state!", color=0xffff00) await ctx.send(embed=embed) print(">> Done") -- 2.39.5 From 4cf45b26843ba30b672188674bd2459e69866924 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 10:01:34 -0400 Subject: [PATCH 05/61] added enable/disable options for mmr checker and statping monitor --- bot_config.conf.example | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bot_config.conf.example b/bot_config.conf.example index b7804b1..2697304 100644 --- a/bot_config.conf.example +++ b/bot_config.conf.example @@ -17,6 +17,8 @@ hass_url = hass_token = hass_light = octoprint_ip_address = +statping_enable = statping_url = statping_api_key = +mmr_checker_enable = mmr_api_url = -- 2.39.5 From cf3757ce114c7c6e7d52def09f9b2857e9ba63d2 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 10:02:08 -0400 Subject: [PATCH 06/61] added enable/disable check before starting mmr checker and statping monitor --- r0b3bot.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 5bc9785..dd921bd 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -53,6 +53,7 @@ hassHEADERS = { OCTOPRINT_IP_ADDRESS = config.get('bot-config', 'octoprint_ip_address') DISCORD_AUTH_TOKEN = config.get('bot-config', 'discord_auth_token') BOT_COMMAND_PREFIX = config.get('bot-config', 'bot_command_prefix') +statping_enable = config.get('bot-config', 'statping_enable') STATPING_URL = config.get('bot-config', 'statping_url') STATPING_API_KEY = config.get('bot-config', 'statping_api_key') statpingURL = STATPING_URL + "/api/services" @@ -61,6 +62,7 @@ statpingHEADERS = { 'content-type': 'application/json', } +mmr_checker_enable = config.get('bot-config', 'mmr_checker_enable') mmrURLBASE = ('bot-config', 'mmr_api_url') mmrHEADERS = { 'User-Agent': 'Linux:com.r0b3bot:v.01a' @@ -95,8 +97,12 @@ async def on_ready(): runtime = time.time() - start_time if runtime <= 15: #Run StatPing_Monitor - print("Starting StatPing Monitor.") - await StatPing_Monitor() + if statping_enable: + print("Statping Monitor enabled, starting StatPing Monitor.") + await StatPing_Monitor() + if mmr_checker_enable: + print("MMR Checker enables, starting MMR Checker.") + await MMR_Monitor() else: print(f">> Bot has been running for more than {int(runtime)} seconds. Not restarting monitor.") -- 2.39.5 From 55419dbafb8aabdf72fc803bfeee88920de2f83e Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 10:03:45 -0400 Subject: [PATCH 07/61] correcting syntax error --- r0b3bot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index dd921bd..8a3d2bd 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -65,8 +65,8 @@ statpingHEADERS = { mmr_checker_enable = config.get('bot-config', 'mmr_checker_enable') mmrURLBASE = ('bot-config', 'mmr_api_url') mmrHEADERS = { - 'User-Agent': 'Linux:com.r0b3bot:v.01a' - 'content-type': 'application/json' + 'User-Agent': 'Linux:com.r0b3bot:v.01a', + 'content-type': 'application/json', } # Configure bot -- 2.39.5 From 0cf348570bed6d0c14c323dd6b7f8055b1de293e Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 11:39:17 -0400 Subject: [PATCH 08/61] tweaks --- r0b3bot.py | 58 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 8a3d2bd..02ffe8b 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -63,7 +63,7 @@ statpingHEADERS = { } mmr_checker_enable = config.get('bot-config', 'mmr_checker_enable') -mmrURLBASE = ('bot-config', 'mmr_api_url') +mmrURLBASE = config.get('bot-config', 'mmr_api_url') mmrHEADERS = { 'User-Agent': 'Linux:com.r0b3bot:v.01a', 'content-type': 'application/json', @@ -77,10 +77,12 @@ print(f"HomeAssistant URL: {hassURL}") print(f"HomeAssistant URL HEADERS: {hassHEADERS}") print(f"HomeAssistant Light: {HASS_LIGHT}") print(f"OctoPrint IP Address: {OCTOPRINT_IP_ADDRESS}") +print(f"StatPing Monitor Enabled: {statping_enable}") print(f"StatPing Server: {STATPING_URL}") print(f"StatPing API Key: {STATPING_API_KEY}") print(f"StatPing URL Headers: {statpingHEADERS}") - +print(f"MMR Checker Enabled: {mmr_checker_enable}") +print(f"MMR Checker URL BASE: {mmrURLBASE}") # On Ready @bot.event async def on_ready(): @@ -97,15 +99,23 @@ async def on_ready(): runtime = time.time() - start_time if runtime <= 15: #Run StatPing_Monitor - if statping_enable: + if statping_enable == 'True': print("Statping Monitor enabled, starting StatPing Monitor.") await StatPing_Monitor() - if mmr_checker_enable: - print("MMR Checker enables, starting MMR Checker.") - await MMR_Monitor() + + else: - print(f">> Bot has been running for more than {int(runtime)} seconds. Not restarting monitor.") + print(f">> Bot has been running for more than {int(runtime)} seconds. Not starting StatPing Monitor.") + + #Run MMR Montor + if runtime <= 15: + if mmr_checker_enable == 'True': + print("MMR Checker enabled, starting MMR Checker.") + await MMR_Monitor() + else: + print(f">> Bot has been running for more than {int(runtime)} seconds. Not starting MMR Checker.") + print(">> Startup complete.") @bot.command() async def greetings(ctx): @@ -921,7 +931,7 @@ async def get_stp_status(service): # Begin functions for MMR sub/alerts # @bot.command() -async def mmrsub(ctx, service = "NONE"): +async def mmrsub(ctx, handle = "NONE"): mmrsublist = {} # MMR Subscription list to be read in from file # Structure of spsublist nested dictionary @@ -943,7 +953,7 @@ async def mmrsub(ctx, service = "NONE"): if handle != "NONE" and handle != "-list" and not handle.startswith('-del '): print(f">> Querying status of '{handle}' to see if it exists") - service_state = await get_stp_status(handle) + handle_state = await get_mmr_status(handle) if handle != "NONE": @@ -1023,11 +1033,11 @@ async def mmrsub(ctx, service = "NONE"): print(f">> Checking if it has already been subscribed to") #await ctx.send(f"'{service_state['name']}' added to monitored services") mmrcurrentsub_request.append(ctx.channel.id) - mmrcurrentsub_request.append(service_state['name']) - mmrcurrentsub_request.append("online") + mmrcurrentsub_request.append(handle) + mmrcurrentsub_request.append(handle_state) print(f">> Channel ID: {mmrcurrentsub_request[0]}") - print(f">> Service Name: {mmrcurrentsub_request[1]}") - print(f">> Initial State to set: {mmrcurrentsub_request[2]}") + print(f">> Handle: {mmrcurrentsub_request[1]}") + print(f">> Current Ranked Average: {mmrcurrentsub_request[2]}") # read in data file containing dict of subscriptions print(">> Checking for mmrsublist.dat") @@ -1042,7 +1052,7 @@ async def mmrsub(ctx, service = "NONE"): print(f">> Checking if handle is already in datafile") found_handle = False found_channel = False - for service in mmrsublist.keys(): + for handle in mmrsublist.keys(): print(f">> Does {handle.lower()} == {mmrcurrentsub_request[1].lower()}") if handle.lower() == mmrcurrentsub_request[1].lower(): @@ -1070,7 +1080,7 @@ async def mmrsub(ctx, service = "NONE"): await ctx.send(f"{mmrcurrentsub_request[1]} has been added to monitored handle for this channel") #newsub = {} #newsub[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} - mmrsublist[mmrcurrentsub_request[1]] = {'state' : 'online', 'channels' : [mmrcurrentsub_request[0]]} + mmrsublist[mmrcurrentsub_request[1]] = {'AvgRank' : mmrcurrentsub_request[2], 'channels' : [mmrcurrentsub_request[0]]} else: @@ -1078,7 +1088,7 @@ async def mmrsub(ctx, service = "NONE"): # append new subscription to dict print(">> Creating new dictionary") - mmrsublist[mmrcurrentsub_request[1]] = {'state' : 'online', 'channels' : [mmrcurrentsub_request[0]]} + mmrsublist[mmrcurrentsub_request[1]] = {'AvgRank' : mmrcurrentsub_request[2], 'channels' : [mmrcurrentsub_request[0]]} print(f">> {handle} subscription has been saved") await ctx.send(f"{handle} has been added to monitored handles for this channel") @@ -1133,14 +1143,15 @@ async def mmr_monitor(sublist): embed = discord.Embed(title=f"{status['name']} Service Alert", description=f"{spsublist[1]} is in an unknown state!", color=0xffff00) await ctx.send(embed=embed) #await ctx.send(f"Unknown state for service {spsublist[1]}") - await asyncio.sleep(60) + #Sleep for 3 hours + await asyncio.sleep(10800) async def get_mmr_status(mmrhandle): # Get StatPing status via REST API #need to replace spaces with %20 before just inserting into URL mmrhandle.replace(" ", "%20") - mmrURL = mmrURLBASE + mmrhandle + mmrURL = ''.join(mmrURLBASE) + mmrhandle response = requests.get(mmrURL, headers=mmrHEADERS) mmr_stats = json.loads(response.text) @@ -1165,13 +1176,14 @@ async def MMR_Monitor(): for handle in mmrsublist.keys(): # service used to be subscription status = await get_mmr_status(handle) - print(f">> {handle} Average Rank: {handle['AvgRank']} | Previous state: {mmrsublist[handle]['AvgRank']}") + print(f"{handle} | {mmrsublist[handle]}") + print(f">> {handle} Average Rank: {status} | Previous state: {mmrsublist[handle]['AvgRank']}") if status != 'handle not found': - if status['AvgRank'] == mmrsublist[handle]['AvgTank']: + if status == mmrsublist[handle]['AvgRank']: # nothing has changed, no alert needed await asyncio.sleep(1) - elif not status['AvgRank'] != mmrsublist[handle]['AvgRank']: + elif not status != mmrsublist[handle]['AvgRank']: # again, nothing has changed no alert needed await asyncio.sleep(1) @@ -1179,7 +1191,7 @@ async def MMR_Monitor(): print(f">> Status of '{handle}' has changed, notifying subscribed channels") - if status['AvgRank'] > mmrsublist[handle]['AvgRank']: + if status > mmrsublist[handle]['AvgRank']: mmrsublist[handle]['AvgRank'] = status['AvgRank'] for channel in mmrsublist[handle]['channels']: ctx = bot.get_channel(channel) @@ -1187,7 +1199,7 @@ async def MMR_Monitor(): embed = discord.Embed(title=f"MMR Alert", description=f"{handle}'s rank is {status['AvgRank']}", color=0x00ff40) await ctx.send(embed=embed) - elif status['AvgRank'] < mmrsublist[handle]['AvgRank']: + elif status < mmrsublist[handle]['AvgRank']: mmrsublist[handle]['state'] = status['AvgRank'] for channel in mmrsublist[handle]['channels']: ctx = bot.get_channel(channel) -- 2.39.5 From 1e496efbee44b0e36b8908a134a0359c0a4ebfbe Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 12:11:30 -0400 Subject: [PATCH 09/61] added interval option for mmr checker, cleaned up some output --- bot_config.conf.example | 1 + r0b3bot.py | 27 ++++++++++++++++----------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/bot_config.conf.example b/bot_config.conf.example index 2697304..a894807 100644 --- a/bot_config.conf.example +++ b/bot_config.conf.example @@ -21,4 +21,5 @@ statping_enable = statping_url = statping_api_key = mmr_checker_enable = +mmr_checker_interval = mmr_api_url = diff --git a/r0b3bot.py b/r0b3bot.py index 02ffe8b..1d5897e 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -63,6 +63,7 @@ statpingHEADERS = { } mmr_checker_enable = config.get('bot-config', 'mmr_checker_enable') +mmr_checker_interval = config.get('bot-config', 'mmr_checker_interval') mmrURLBASE = config.get('bot-config', 'mmr_api_url') mmrHEADERS = { 'User-Agent': 'Linux:com.r0b3bot:v.01a', @@ -73,16 +74,20 @@ mmrHEADERS = { bot = commands.Bot(command_prefix=BOT_COMMAND_PREFIX, description='A derpy derp of a bot.') # Printing configuration details to console -print(f"HomeAssistant URL: {hassURL}") -print(f"HomeAssistant URL HEADERS: {hassHEADERS}") -print(f"HomeAssistant Light: {HASS_LIGHT}") -print(f"OctoPrint IP Address: {OCTOPRINT_IP_ADDRESS}") -print(f"StatPing Monitor Enabled: {statping_enable}") -print(f"StatPing Server: {STATPING_URL}") -print(f"StatPing API Key: {STATPING_API_KEY}") -print(f"StatPing URL Headers: {statpingHEADERS}") -print(f"MMR Checker Enabled: {mmr_checker_enable}") -print(f"MMR Checker URL BASE: {mmrURLBASE}") +print("=== 3D Printer Status config ===") +print(f" HomeAssistant URL: {hassURL}") +print(f" HomeAssistant URL HEADERS: {hassHEADERS}") +print(f" HomeAssistant Light: {HASS_LIGHT}") +print(f" OctoPrint IP Address: {OCTOPRINT_IP_ADDRESS}") +print("=== StatPing Monitor Config ===") +print(f" Enabled: {statping_enable}") +print(f" SServer: {STATPING_URL}") +print(f" API Key: {STATPING_API_KEY}") +print(f" URL Headers: {statpingHEADERS}") +print("=== MMR Checker Config ===") +print(f" Enabled: {mmr_checker_enable}") +print(f" Checker Interval: {mmr_checker_interval}") +print(f" API URL BASE: {mmrURLBASE}") # On Ready @bot.event async def on_ready(): @@ -1228,7 +1233,7 @@ async def MMR_Monitor(): print(">> mmrsublist.dat does not exist, nothing to do.") # 10800 seconds == 3 hours :) - await asyncio.sleep(10800) + await asyncio.sleep(mmr_checker_interval) # # -- 2.39.5 From 7628f8d1aeb827d331bf7c3c84d6768303b3f6be Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 12:14:52 -0400 Subject: [PATCH 10/61] setting variable to int --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 1d5897e..c88da21 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1233,7 +1233,7 @@ async def MMR_Monitor(): print(">> mmrsublist.dat does not exist, nothing to do.") # 10800 seconds == 3 hours :) - await asyncio.sleep(mmr_checker_interval) + await asyncio.sleep(int(mmr_checker_interval)) # # -- 2.39.5 From 5b917e032f538d624b872175f097730fd1510c77 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 12:16:36 -0400 Subject: [PATCH 11/61] fixing minor typo --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index c88da21..fecfddd 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -81,7 +81,7 @@ print(f" HomeAssistant Light: {HASS_LIGHT}") print(f" OctoPrint IP Address: {OCTOPRINT_IP_ADDRESS}") print("=== StatPing Monitor Config ===") print(f" Enabled: {statping_enable}") -print(f" SServer: {STATPING_URL}") +print(f" Server: {STATPING_URL}") print(f" API Key: {STATPING_API_KEY}") print(f" URL Headers: {statpingHEADERS}") print("=== MMR Checker Config ===") -- 2.39.5 From f6e15d9c35cd7d3c1a5bb375376c0c0a456a10f5 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 12:38:21 -0400 Subject: [PATCH 12/61] output formatting --- r0b3bot.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index fecfddd..4eb9f91 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1182,7 +1182,7 @@ async def MMR_Monitor(): # service used to be subscription status = await get_mmr_status(handle) print(f"{handle} | {mmrsublist[handle]}") - print(f">> {handle} Average Rank: {status} | Previous state: {mmrsublist[handle]['AvgRank']}") + print(f">> '{handle}'s Average Rank: {status} | Previous state: {mmrsublist[handle]['AvgRank']}") if status != 'handle not found': if status == mmrsublist[handle]['AvgRank']: @@ -1200,7 +1200,7 @@ async def MMR_Monitor(): mmrsublist[handle]['AvgRank'] = status['AvgRank'] for channel in mmrsublist[handle]['channels']: ctx = bot.get_channel(channel) - print(f">> Alerting {ctx} that {handle} Average Rank has Increased!") + print(f">> Alerting {ctx} that '{handle}'s Average Rank has Increased!") embed = discord.Embed(title=f"MMR Alert", description=f"{handle}'s rank is {status['AvgRank']}", color=0x00ff40) await ctx.send(embed=embed) @@ -1208,7 +1208,7 @@ async def MMR_Monitor(): mmrsublist[handle]['state'] = status['AvgRank'] for channel in mmrsublist[handle]['channels']: ctx = bot.get_channel(channel) - print(f">> Alerting {ctx} that {handle}'s Average Rank has Decreased!") + print(f">> Alerting {ctx} that '{handle}'s Average Rank has Decreased!") embed = discord.Embed(title=f"MMR Alert", description=f"{handle}'s rank is {status['AvgRank']}", color=0xff2200) await ctx.send(embed=embed) -- 2.39.5 From 0950092f6d7c9e41abfa6dc33df2fe92c61c5428 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 12:46:47 -0400 Subject: [PATCH 13/61] more tweaks to output --- r0b3bot.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 4eb9f91..6cca0f7 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -88,15 +88,16 @@ print("=== MMR Checker Config ===") print(f" Enabled: {mmr_checker_enable}") print(f" Checker Interval: {mmr_checker_interval}") print(f" API URL BASE: {mmrURLBASE}") + # On Ready @bot.event async def on_ready(): print('Logged in as') - print(bot.user.name) - print(bot.user.id) - print('------') - print("Setting activity to 'Listenting to your commands'") - activity = discord.Activity(name="your $commands",type=discord.ActivityType.listening) + print(f" User: {bot.user.name}") + print(f" ID: {bot.user.id}") + print(f"------\n") + print(f"Setting activity to 'Listenting to your {BOT_COMMAND_PREFIX}commands'") + activity = discord.Activity(name=f"your {BOT_COMMAND_PREFIX}commands",type=discord.ActivityType.listening) await bot.change_presence(activity=activity) -- 2.39.5 From 803e8d552dc0c53a28bb76352a4d8a434a90d49d Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 12:48:19 -0400 Subject: [PATCH 14/61] more tweaks to output --- r0b3bot.py | 1 + 1 file changed, 1 insertion(+) diff --git a/r0b3bot.py b/r0b3bot.py index 6cca0f7..4a3b35d 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -92,6 +92,7 @@ print(f" API URL BASE: {mmrURLBASE}") # On Ready @bot.event async def on_ready(): + print(":::: Config Loaded ::::\n") print('Logged in as') print(f" User: {bot.user.name}") print(f" ID: {bot.user.id}") -- 2.39.5 From 2cabbbf6f11182a6bc19b913eb1b074f25088a1e Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 12:49:19 -0400 Subject: [PATCH 15/61] more tweaks to output --- r0b3bot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 4a3b35d..e0efc3e 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -92,11 +92,11 @@ print(f" API URL BASE: {mmrURLBASE}") # On Ready @bot.event async def on_ready(): - print(":::: Config Loaded ::::\n") + print("\n:::: Config Loaded ::::\n") print('Logged in as') print(f" User: {bot.user.name}") print(f" ID: {bot.user.id}") - print(f"------\n") + print(f"\n\n") print(f"Setting activity to 'Listenting to your {BOT_COMMAND_PREFIX}commands'") activity = discord.Activity(name=f"your {BOT_COMMAND_PREFIX}commands",type=discord.ActivityType.listening) await bot.change_presence(activity=activity) -- 2.39.5 From 5c0e61d4666e70d8722fcd1ffd629481b3023052 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 12:51:43 -0400 Subject: [PATCH 16/61] adding newlines --- r0b3bot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index e0efc3e..dd4fc40 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -79,12 +79,12 @@ print(f" HomeAssistant URL: {hassURL}") print(f" HomeAssistant URL HEADERS: {hassHEADERS}") print(f" HomeAssistant Light: {HASS_LIGHT}") print(f" OctoPrint IP Address: {OCTOPRINT_IP_ADDRESS}") -print("=== StatPing Monitor Config ===") +print("\n=== StatPing Monitor Config ===") print(f" Enabled: {statping_enable}") print(f" Server: {STATPING_URL}") print(f" API Key: {STATPING_API_KEY}") print(f" URL Headers: {statpingHEADERS}") -print("=== MMR Checker Config ===") +print("\n=== MMR Checker Config ===") print(f" Enabled: {mmr_checker_enable}") print(f" Checker Interval: {mmr_checker_interval}") print(f" API URL BASE: {mmrURLBASE}") -- 2.39.5 From ab7009e43fca9bc2b0aa9951cf35512ae3824ce4 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 16:25:36 -0400 Subject: [PATCH 17/61] fixing assignment --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index dd4fc40..61b0d87 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1207,7 +1207,7 @@ async def MMR_Monitor(): await ctx.send(embed=embed) elif status < mmrsublist[handle]['AvgRank']: - mmrsublist[handle]['state'] = status['AvgRank'] + mmrsublist[handle]['AvgRank'] = status['AvgRank'] for channel in mmrsublist[handle]['channels']: ctx = bot.get_channel(channel) print(f">> Alerting {ctx} that '{handle}'s Average Rank has Decreased!") -- 2.39.5 From 0207424d328995d69f01eefb10ca8fda803109cf Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 16:28:50 -0400 Subject: [PATCH 18/61] fixing assignment again --- r0b3bot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 61b0d87..9b26f53 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1199,7 +1199,7 @@ async def MMR_Monitor(): print(f">> Status of '{handle}' has changed, notifying subscribed channels") if status > mmrsublist[handle]['AvgRank']: - mmrsublist[handle]['AvgRank'] = status['AvgRank'] + mmrsublist[handle]['AvgRank'] = str(status['AvgRank']) for channel in mmrsublist[handle]['channels']: ctx = bot.get_channel(channel) print(f">> Alerting {ctx} that '{handle}'s Average Rank has Increased!") @@ -1207,7 +1207,7 @@ async def MMR_Monitor(): await ctx.send(embed=embed) elif status < mmrsublist[handle]['AvgRank']: - mmrsublist[handle]['AvgRank'] = status['AvgRank'] + mmrsublist[handle]['AvgRank'] = str(status['AvgRank']) for channel in mmrsublist[handle]['channels']: ctx = bot.get_channel(channel) print(f">> Alerting {ctx} that '{handle}'s Average Rank has Decreased!") -- 2.39.5 From 1785162cea9e6c91fde3266d277229b0e7f566ce Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 16:30:15 -0400 Subject: [PATCH 19/61] fixing assignment again... hopefully for the last time --- r0b3bot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 9b26f53..8ccbc38 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1199,7 +1199,7 @@ async def MMR_Monitor(): print(f">> Status of '{handle}' has changed, notifying subscribed channels") if status > mmrsublist[handle]['AvgRank']: - mmrsublist[handle]['AvgRank'] = str(status['AvgRank']) + mmrsublist[handle]['AvgRank'] = status for channel in mmrsublist[handle]['channels']: ctx = bot.get_channel(channel) print(f">> Alerting {ctx} that '{handle}'s Average Rank has Increased!") @@ -1207,7 +1207,7 @@ async def MMR_Monitor(): await ctx.send(embed=embed) elif status < mmrsublist[handle]['AvgRank']: - mmrsublist[handle]['AvgRank'] = str(status['AvgRank']) + mmrsublist[handle]['AvgRank'] = status for channel in mmrsublist[handle]['channels']: ctx = bot.get_channel(channel) print(f">> Alerting {ctx} that '{handle}'s Average Rank has Decreased!") -- 2.39.5 From 8f41991a3d35d7b4eee0b89843f8c0d4691e2a2d Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 16:31:09 -0400 Subject: [PATCH 20/61] fixing assignment again... hopefully for the last time, again --- r0b3bot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 8ccbc38..9273a36 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1203,7 +1203,7 @@ async def MMR_Monitor(): for channel in mmrsublist[handle]['channels']: ctx = bot.get_channel(channel) print(f">> Alerting {ctx} that '{handle}'s Average Rank has Increased!") - embed = discord.Embed(title=f"MMR Alert", description=f"{handle}'s rank is {status['AvgRank']}", color=0x00ff40) + embed = discord.Embed(title=f"MMR Alert", description=f"{handle}'s rank is {status}", color=0x00ff40) await ctx.send(embed=embed) elif status < mmrsublist[handle]['AvgRank']: @@ -1211,7 +1211,7 @@ async def MMR_Monitor(): for channel in mmrsublist[handle]['channels']: ctx = bot.get_channel(channel) print(f">> Alerting {ctx} that '{handle}'s Average Rank has Decreased!") - embed = discord.Embed(title=f"MMR Alert", description=f"{handle}'s rank is {status['AvgRank']}", color=0xff2200) + embed = discord.Embed(title=f"MMR Alert", description=f"{handle}'s rank is {status}", color=0xff2200) await ctx.send(embed=embed) else: -- 2.39.5 From 3f9a976742424a1371f8d828ec86480fba0145da Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 17:17:49 -0400 Subject: [PATCH 21/61] clarifying alert text --- r0b3bot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 9273a36..e0df879 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1203,7 +1203,7 @@ async def MMR_Monitor(): for channel in mmrsublist[handle]['channels']: ctx = bot.get_channel(channel) print(f">> Alerting {ctx} that '{handle}'s Average Rank has Increased!") - embed = discord.Embed(title=f"MMR Alert", description=f"{handle}'s rank is {status}", color=0x00ff40) + embed = discord.Embed(title=f"MMR Alert", description=f"{handle}'s rank increased to {status}!", color=0x00ff40) await ctx.send(embed=embed) elif status < mmrsublist[handle]['AvgRank']: @@ -1211,7 +1211,7 @@ async def MMR_Monitor(): for channel in mmrsublist[handle]['channels']: ctx = bot.get_channel(channel) print(f">> Alerting {ctx} that '{handle}'s Average Rank has Decreased!") - embed = discord.Embed(title=f"MMR Alert", description=f"{handle}'s rank is {status}", color=0xff2200) + embed = discord.Embed(title=f"MMR Alert", description=f"{handle}'s rank decreased to {status}!", color=0xff2200) await ctx.send(embed=embed) else: -- 2.39.5 From 25abfb2a59da9e1d84605158ad8caeeecb5ac2b4 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 18:23:30 -0400 Subject: [PATCH 22/61] updating info command --- r0b3bot.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index e0df879..0e1b0e4 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1243,7 +1243,13 @@ async def MMR_Monitor(): @bot.command() async def help(ctx): - embed = discord.Embed(title="R0b3BOT", description="List of commands are:", color=0xeee657) + embed = discord.Embed(title='R0b3BOT Core & Debug Commands:', description="Core commands for info and debug", color=0xeee657) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}info", value="Gives a little info about the bot", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}help", value="Gives this message", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}last_error", value="Will display the real error message the bot has last encountered for additional debugging info") + await ctx.send(embed=embed) + + embed = discord.Embed(title="R0b3BOT Sound Commands", description="To play a sound in a chat channel, use one of the following:", color=0xeee657) embed.add_field(name=f"{BOT_COMMAND_PREFIX}printstat", value="Uploads a snapshot of Rich's 3D printer and current stats", inline=False) embed.add_field(name=f"{BOT_COMMAND_PREFIX}explain", value="Displays Dalek EXPLAIN gif", inline=False) embed.add_field(name=f"{BOT_COMMAND_PREFIX}holyshit", value="Displays Marty McFly HOLY SHIT gif", inline=False) @@ -1260,14 +1266,19 @@ async def help(ctx): embed.add_field(name=f"{BOT_COMMAND_PREFIX}heavy @member", value="Plays 'Poppy ooo heavy'") embed.add_field(name=f"{BOT_COMMAND_PREFIX}iran @member", value="Plays Trump 'I Ran'") embed.add_field(name=f"{BOT_COMMAND_PREFIX}big @member", value="Plays 'Wiz Khalifa clip'") - embed.add_field(name=f"{BOT_COMMAND_PREFIX}info", value="Gives a little info about the bot", inline=False) - embed.add_field(name=f"{BOT_COMMAND_PREFIX}help", value="Gives this message", inline=False) - embed.add_field(name=f"{BOT_COMMAND_PREFIX}last_error", value="Will display the real error message the bot has last encountered for additional debugging info") + await ctx.send(embed=embed) + + embed = discord.Embed(title="A note about sound clips:", description="Sound clips are only played in voice channels. If a user is not specified when calling the command, the sound will played in the channel of that issuing user is currently joined to. When a username is specified, the bot will play the sound in the channel that user is currently in.") + await ctx.send(embed=embed) + + embed = discord.Embed(title="StatPing Service Monitor Commands", description="Commands for managing the StatPing Service Monitor", color=0xeee657) embed.add_field(name=f"{BOT_COMMAND_PREFIX}spstatus servicename", value="Retrieves status of service from StatPing") embed.add_field(name=f"{BOT_COMMAND_PREFIX}spsub service", value="Allows user to subscribe to service status change alerts for the channel. Can replace with -list and -del:service to manage alerts. NOTICE:Replace spaces in service names w/ '_'!") await ctx.send(embed=embed) - embed = discord.Embed(title="A note about sound clips:", description="Sound clips are only played in voice channels. If a user is not specified when calling the command, the sound will played in the channel of that issuing user is currently joined to. When a username is specified, the bot will play the sound in the channel that user is currently in.") + embed = discord.Embed(title="MMR Monitor Commands", description="Commands for managing the MMR Checker", color=0xeee657) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}mmrstatus handle", value="Queries the MMR API for the handle specified and returns the current Ranked Average") + embed.add_field(name=f"{BOT_COMMAND_PREFIX}mmrsub handle", value="Subscribe to receive alerts of ranked average changes for the specified handle") await ctx.send(embed=embed) # Function to run shell command and return stdout or sterr -- 2.39.5 From 8d91336b43f6d50b31c32899fc3526472e10d65d Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 18:31:41 -0400 Subject: [PATCH 23/61] Added mmrstatus command --- r0b3bot.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/r0b3bot.py b/r0b3bot.py index 0e1b0e4..68b4ce3 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -937,6 +937,24 @@ async def get_stp_status(service): # # Begin functions for MMR sub/alerts # + +@bot.command() +async def mmrstatus(ctx, handle = "NONE"): + + if handle != "NONE": + + #await get_stp_status(ctx, service.lower()) + result = await get_mmr_status(handle) + + if result == "handle not found": + await ctx.send(f"'{service}' was not found") + else: + await ctx.send(f"'{handle}'s Ranked Average is: {result}") + + else: + await ctx.send("Please speficy a service name to query.") + + @bot.command() async def mmrsub(ctx, handle = "NONE"): -- 2.39.5 From 403aa9a362d58774e28e6328cc65300f03ea4d2a Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 19:00:42 -0400 Subject: [PATCH 24/61] check if handle was actually found --- r0b3bot.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 68b4ce3..f989368 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -954,7 +954,6 @@ async def mmrstatus(ctx, handle = "NONE"): else: await ctx.send("Please speficy a service name to query.") - @bot.command() async def mmrsub(ctx, handle = "NONE"): @@ -1173,12 +1172,16 @@ async def mmr_monitor(sublist): async def get_mmr_status(mmrhandle): - # Get StatPing status via REST API + # Get MMR status status via API #need to replace spaces with %20 before just inserting into URL mmrhandle.replace(" ", "%20") mmrURL = ''.join(mmrURLBASE) + mmrhandle response = requests.get(mmrURL, headers=mmrHEADERS) mmr_stats = json.loads(response.text) + + if int(response.find("No MMR data")) < 0: + mmr_stats = "handle not found" + return mmr_stats['ranked']['avg'] -- 2.39.5 From fcb0051c874428af78cf701f614fe39de06ca819 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 19:03:15 -0400 Subject: [PATCH 25/61] fixing --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index f989368..78ddff0 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1179,7 +1179,7 @@ async def get_mmr_status(mmrhandle): response = requests.get(mmrURL, headers=mmrHEADERS) mmr_stats = json.loads(response.text) - if int(response.find("No MMR data")) < 0: + if int(str.response.find("No MMR data")) < 0: mmr_stats = "handle not found" -- 2.39.5 From 6823161897af0faa55d420b378e3b1d24ec97634 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 19:03:52 -0400 Subject: [PATCH 26/61] fixing... --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 78ddff0..1b4f056 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1179,7 +1179,7 @@ async def get_mmr_status(mmrhandle): response = requests.get(mmrURL, headers=mmrHEADERS) mmr_stats = json.loads(response.text) - if int(str.response.find("No MMR data")) < 0: + if int(str(response).find("No MMR data")) < 0: mmr_stats = "handle not found" -- 2.39.5 From ba014f4c98c671464c9f2f79e477e9ed8643d1d4 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 19:05:27 -0400 Subject: [PATCH 27/61] fixing... --- r0b3bot.py | 1 + 1 file changed, 1 insertion(+) diff --git a/r0b3bot.py b/r0b3bot.py index 1b4f056..9ff87ac 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1181,6 +1181,7 @@ async def get_mmr_status(mmrhandle): if int(str(response).find("No MMR data")) < 0: mmr_stats = "handle not found" + return mmr_stats return mmr_stats['ranked']['avg'] -- 2.39.5 From dfa82dbe969107cfe1f78513e4db7bfe4de57624 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 19:06:59 -0400 Subject: [PATCH 28/61] correcting variable being used --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 9ff87ac..d4fa8b1 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -947,7 +947,7 @@ async def mmrstatus(ctx, handle = "NONE"): result = await get_mmr_status(handle) if result == "handle not found": - await ctx.send(f"'{service}' was not found") + await ctx.send(f"'{handle}' was not found") else: await ctx.send(f"'{handle}'s Ranked Average is: {result}") -- 2.39.5 From 0077f1a80b354d3c438048d03bd20ce49a1a9abe Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 19:09:34 -0400 Subject: [PATCH 29/61] troubleshooting response check --- r0b3bot.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index d4fa8b1..b3299a3 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1179,7 +1179,8 @@ async def get_mmr_status(mmrhandle): response = requests.get(mmrURL, headers=mmrHEADERS) mmr_stats = json.loads(response.text) - if int(str(response).find("No MMR data")) < 0: + print(f"{str(response).find("No MMR data")}") + if str(response).find("No MMR data") < 0: mmr_stats = "handle not found" return mmr_stats -- 2.39.5 From b6d5ce6836776a9da0c593db586cd8971d8acf42 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 19:11:16 -0400 Subject: [PATCH 30/61] troubleshooting response check: fixing syntax --- r0b3bot.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index b3299a3..b0303b8 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1179,8 +1179,9 @@ async def get_mmr_status(mmrhandle): response = requests.get(mmrURL, headers=mmrHEADERS) mmr_stats = json.loads(response.text) - print(f"{str(response).find("No MMR data")}") - if str(response).find("No MMR data") < 0: + checked = str(response).find("No MMR data") + print(f"{checked}") + if checked < 0: mmr_stats = "handle not found" return mmr_stats -- 2.39.5 From 5ada6cfb3681965a7b310a1f69c379ffa8ec26b0 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 19:13:08 -0400 Subject: [PATCH 31/61] troubleshooting response check: welp, had that backwards --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index b0303b8..6189e98 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1181,7 +1181,7 @@ async def get_mmr_status(mmrhandle): checked = str(response).find("No MMR data") print(f"{checked}") - if checked < 0: + if checked > 0: mmr_stats = "handle not found" return mmr_stats -- 2.39.5 From 667126c916f854cf3c0f7cf6a9d94d80dca2cdd5 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 19:18:31 -0400 Subject: [PATCH 32/61] dunno --- r0b3bot.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 6189e98..f07b0a0 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -941,6 +941,8 @@ async def get_stp_status(service): @bot.command() async def mmrstatus(ctx, handle = "NONE"): + print(f">> {BOT_COMMAND_PREFIX}mmrstatus was called for {handle}") + if handle != "NONE": #await get_stp_status(ctx, service.lower()) @@ -1179,9 +1181,9 @@ async def get_mmr_status(mmrhandle): response = requests.get(mmrURL, headers=mmrHEADERS) mmr_stats = json.loads(response.text) - checked = str(response).find("No MMR data") + checked = str(response).find("error") print(f"{checked}") - if checked > 0: + if checked == -1: mmr_stats = "handle not found" return mmr_stats -- 2.39.5 From 1e64e992dde1d1d9ac5ced3944cab8c15f8f621e Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 19:25:05 -0400 Subject: [PATCH 33/61] let's try it this way --- r0b3bot.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index f07b0a0..79174aa 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1181,13 +1181,9 @@ async def get_mmr_status(mmrhandle): response = requests.get(mmrURL, headers=mmrHEADERS) mmr_stats = json.loads(response.text) - checked = str(response).find("error") - print(f"{checked}") - if checked == -1: - mmr_stats = "handle not found" - return mmr_stats + if "error" in mmr_status: + return "handle not found" - return mmr_stats['ranked']['avg'] -- 2.39.5 From 5e1164d98cd0d3f6f8ea95a68d5f986ef254632e Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 20 Mar 2021 19:25:50 -0400 Subject: [PATCH 34/61] typo --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 79174aa..345ea45 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1181,7 +1181,7 @@ async def get_mmr_status(mmrhandle): response = requests.get(mmrURL, headers=mmrHEADERS) mmr_stats = json.loads(response.text) - if "error" in mmr_status: + if "error" in mmr_stats: return "handle not found" return mmr_stats['ranked']['avg'] -- 2.39.5 From 37e9512d82a9d81f6f5a1439b7437827e9d0fea9 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sun, 21 Mar 2021 07:44:27 -0400 Subject: [PATCH 35/61] troubleshooting -list command --- r0b3bot.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 345ea45..8db4e0a 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -603,11 +603,7 @@ bot.remove_command('help') @bot.command() async def spstatus(ctx, service = "NONE"): -#async def spalert(ctx, cmd = "NONE", arg = "NONE"): - # if cmd != "NONE": - # if cmd == "add": - # spalert += if service != "NONE": #await get_stp_status(ctx, service.lower()) @@ -963,7 +959,7 @@ async def mmrsub(ctx, handle = "NONE"): # Structure of spsublist nested dictionary # spsublist[service name][list of channel ids][a state value] # dict = {'Handle': {'AvgRank' : 'value', 'channels' : ['1232', '43234']} - # 'Space Eingineers' : {'state' : online', 'channels' : ['2343', '54563']}} + # 'twtv iddosu2x' : {'AvgRank' : '1082', 'channels' : ['2343', '54563']}} # mmrcurrentsub_request = [] # list of elements detailing the current sub request datestring = datetime.now() @@ -992,10 +988,11 @@ async def mmrsub(ctx, handle = "NONE"): mmrsublist = pickle.loads(pickled_mmrsublist) for handle in mmrsublist.keys(): - + print{f"current handle: {handle}") for channel in mmrsublist[handle]['channels']: + print(f">> {channel}") if channel == ctx.channel.id: - mmrsublist += f"'{handle}' " + mmrsublist += f"'{handle}'" await ctx.send(f"This channel is subscribed to: {mmrsublist}") -- 2.39.5 From d961698d404d348e26057f1ab7e9fd506c52559f Mon Sep 17 00:00:00 2001 From: Rich O Date: Sun, 21 Mar 2021 07:45:15 -0400 Subject: [PATCH 36/61] typo --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 8db4e0a..b1de05a 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -988,7 +988,7 @@ async def mmrsub(ctx, handle = "NONE"): mmrsublist = pickle.loads(pickled_mmrsublist) for handle in mmrsublist.keys(): - print{f"current handle: {handle}") + print(f"current handle: {handle}") for channel in mmrsublist[handle]['channels']: print(f">> {channel}") if channel == ctx.channel.id: -- 2.39.5 From 3b5ecf4b6b29f3dd9e5fc947c41ae14cb0ab2458 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sun, 21 Mar 2021 07:46:56 -0400 Subject: [PATCH 37/61] more debug --- r0b3bot.py | 1 + 1 file changed, 1 insertion(+) diff --git a/r0b3bot.py b/r0b3bot.py index b1de05a..9a5f1f9 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -992,6 +992,7 @@ async def mmrsub(ctx, handle = "NONE"): for channel in mmrsublist[handle]['channels']: print(f">> {channel}") if channel == ctx.channel.id: + print(f">>>> {channel} == {ctx.channel.id}") mmrsublist += f"'{handle}'" await ctx.send(f"This channel is subscribed to: {mmrsublist}") -- 2.39.5 From 5767d2d606f4fc2bcf119d683bed4d54ad879d60 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sun, 21 Mar 2021 07:53:06 -0400 Subject: [PATCH 38/61] was using wrong varibale --- r0b3bot.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 9a5f1f9..0d4c7a0 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -985,15 +985,15 @@ async def mmrsub(ctx, handle = "NONE"): mmrsublist = '' async with aiof.open('mmrsublist.dat', 'rb') as datafile: pickled_mmrsublist = await datafile.read() - mmrsublist = pickle.loads(pickled_mmrsublist) + sublist = pickle.loads(pickled_mmrsublist) - for handle in mmrsublist.keys(): + for handle in sublist.keys(): print(f"current handle: {handle}") for channel in mmrsublist[handle]['channels']: print(f">> {channel}") if channel == ctx.channel.id: print(f">>>> {channel} == {ctx.channel.id}") - mmrsublist += f"'{handle}'" + mmrsublist += f"'{handle}' " await ctx.send(f"This channel is subscribed to: {mmrsublist}") -- 2.39.5 From 9421b22cff6cb2bac0e492938d3e96859206a4c9 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sun, 21 Mar 2021 07:54:10 -0400 Subject: [PATCH 39/61] was using wrong varibale... missed ong --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 0d4c7a0..bb0d540 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -989,7 +989,7 @@ async def mmrsub(ctx, handle = "NONE"): for handle in sublist.keys(): print(f"current handle: {handle}") - for channel in mmrsublist[handle]['channels']: + for channel in sublist[handle]['channels']: print(f">> {channel}") if channel == ctx.channel.id: print(f">>>> {channel} == {ctx.channel.id}") -- 2.39.5 From e9a2165f78e70b657df9ffe03aca749203424bf3 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sun, 21 Mar 2021 11:41:45 -0400 Subject: [PATCH 40/61] found some issues --- r0b3bot.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index bb0d540..089fe85 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1029,7 +1029,7 @@ async def mmrsub(ctx, handle = "NONE"): # Marking channel as found found_channel = True # Get the proper name of the service - handle_toremove = service + handle_toremove = handle #Remove the current users channel from this service mmrsublist[handle]['channels'].remove(ctx.channel.id) # Break since we're done. @@ -1051,7 +1051,7 @@ async def mmrsub(ctx, handle = "NONE"): await ctx.send(f"This channel is not subscribed to alerts for '{handle_toremove}''") # If the service exists, proceed with adding it to the list. - elif handle_state != "service not found": + elif handle_state != "handle not found": print(f">> '{handle}' is a valid Hanlde on Whatismymmr.com.") print(f">> Checking if it has already been subscribed to") @@ -1095,7 +1095,7 @@ async def mmrsub(ctx, handle = "NONE"): # Append the current channel id to the list for this service print(f">> Adding handle '{mmrcurrentsub_request[1]}' to {ctx.channel.id}") await ctx.send(f"{handle} has been added to monitored handles for this channel") - mmrsublist[service]['channels'].append(mmrcurrentsub_request[0]) + mmrsublist[handle]['channels'].append(mmrcurrentsub_request[0]) break if not found_handle: -- 2.39.5 From 86e79448370c5cb2f8f3c46079f3a3d7c39eb244 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sun, 21 Mar 2021 12:05:31 -0400 Subject: [PATCH 41/61] editing output for clarity --- r0b3bot.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 089fe85..602fb41 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1077,9 +1077,9 @@ async def mmrsub(ctx, handle = "NONE"): found_handle = False found_channel = False for handle in mmrsublist.keys(): - print(f">> Does {handle.lower()} == {mmrcurrentsub_request[1].lower()}") + print(f">> Does {handle} == {mmrcurrentsub_request[1]}") - if handle.lower() == mmrcurrentsub_request[1].lower(): + if handle == mmrcurrentsub_request[1]: found_handle = True # This service matched what the user is trying to subscribe to # Now we need to check if this is for the same channel @@ -1087,20 +1087,20 @@ async def mmrsub(ctx, handle = "NONE"): for channel in mmrsublist[handle]['channels']: if channel == mmrcurrentsub_request[0]: - print(f">> This channel is already subscribed to {handle}") + print(f">> Handle exists, channel ({mmrcurrentsub_request[0]}) is already subscribed to {handle}") await ctx.send(f"This channel is already subscribed to {handle} alerts") found_channel = True break if not found_channel: # Append the current channel id to the list for this service - print(f">> Adding handle '{mmrcurrentsub_request[1]}' to {ctx.channel.id}") + print(f">> Handle exists, channel not subbed, adding handle '{mmrcurrentsub_request[1]}' to {ctx.channel.id}") await ctx.send(f"{handle} has been added to monitored handles for this channel") mmrsublist[handle]['channels'].append(mmrcurrentsub_request[0]) break if not found_handle: # Append the current channel id to the list for this service - print(f">> Adding handle '{mmrcurrentsub_request[1]}' to {ctx.channel.id}") + print(f">> Handle does not exist, adding new entry for '{mmrcurrentsub_request[1]}' to {ctx.channel.id}") await ctx.send(f"{mmrcurrentsub_request[1]} has been added to monitored handle for this channel") #newsub = {} #newsub[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} -- 2.39.5 From 45d8d5702c4b0059ebf43c8b5f53c0e43951d047 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sun, 21 Mar 2021 12:11:24 -0400 Subject: [PATCH 42/61] found typo --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 602fb41..d894661 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1071,7 +1071,7 @@ async def mmrsub(ctx, handle = "NONE"): # Read in mmrsublist async with aiof.open('mmrsublist.dat', 'rb') as datafile: pickled_mmrsublist = await datafile.read() - mmrspsublist = pickle.loads(pickled_mmrsublist) + mmrsublist = pickle.loads(pickled_mmrsublist) print(f">> Checking if handle is already in datafile") found_handle = False -- 2.39.5 From e00da208701940abb71f44d7d133475576e5d567 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sun, 21 Mar 2021 12:17:00 -0400 Subject: [PATCH 43/61] Cleaning up output text --- r0b3bot.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index d894661..54d97a0 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1077,17 +1077,17 @@ async def mmrsub(ctx, handle = "NONE"): found_handle = False found_channel = False for handle in mmrsublist.keys(): - print(f">> Does {handle} == {mmrcurrentsub_request[1]}") + print(f">> Does '{handle}'' == '{mmrcurrentsub_request[1]}'?") if handle == mmrcurrentsub_request[1]: found_handle = True # This service matched what the user is trying to subscribe to # Now we need to check if this is for the same channel - print(f">> Found {handle} in data file, checking for channel") + print(f">> Yes, checking if channel {mmrcurrentsub_request[0]} is already subscribed") for channel in mmrsublist[handle]['channels']: if channel == mmrcurrentsub_request[0]: - print(f">> Handle exists, channel ({mmrcurrentsub_request[0]}) is already subscribed to {handle}") + print(f">> Channel ({mmrcurrentsub_request[0]}) is already subscribed to {handle}") await ctx.send(f"This channel is already subscribed to {handle} alerts") found_channel = True break -- 2.39.5 From a53cab8343a183d43fde61ae2f5dd1444ff70f06 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sun, 21 Mar 2021 12:24:03 -0400 Subject: [PATCH 44/61] working on mmrstatus --- r0b3bot.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/r0b3bot.py b/r0b3bot.py index 54d97a0..ba35d18 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -945,11 +945,14 @@ async def mmrstatus(ctx, handle = "NONE"): result = await get_mmr_status(handle) if result == "handle not found": + print(f">> {handle} was not found") await ctx.send(f"'{handle}' was not found") else: + print(f">> {handle} found!") await ctx.send(f"'{handle}'s Ranked Average is: {result}") else: + print(f">> User did not speficy handle") await ctx.send("Please speficy a service name to query.") @bot.command() -- 2.39.5 From 2cbaef99c086bad1f27f2780c3c7f0034442ed0e Mon Sep 17 00:00:00 2001 From: Rich O Date: Sun, 21 Mar 2021 12:26:25 -0400 Subject: [PATCH 45/61] working on mmrstatus --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index ba35d18..f072062 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -946,7 +946,7 @@ async def mmrstatus(ctx, handle = "NONE"): if result == "handle not found": print(f">> {handle} was not found") - await ctx.send(f"'{handle}' was not found") + await ctx.send(f"'{handle}' was not found. Try wrapping handle in double quotes") else: print(f">> {handle} found!") await ctx.send(f"'{handle}'s Ranked Average is: {result}") -- 2.39.5 From ad05b2f4276fe5d1348636aba5e9b92d97ba8de9 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sun, 21 Mar 2021 12:37:20 -0400 Subject: [PATCH 46/61] updating help command details --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index f072062..9853448 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1301,7 +1301,7 @@ async def help(ctx): embed = discord.Embed(title="MMR Monitor Commands", description="Commands for managing the MMR Checker", color=0xeee657) embed.add_field(name=f"{BOT_COMMAND_PREFIX}mmrstatus handle", value="Queries the MMR API for the handle specified and returns the current Ranked Average") - embed.add_field(name=f"{BOT_COMMAND_PREFIX}mmrsub handle", value="Subscribe to receive alerts of ranked average changes for the specified handle") + embed.add_field(name=f"{BOT_COMMAND_PREFIX}mmrsub handle", value="Subscribe to receive alerts of ranked average changes for the specified handle. Can run command with just '-list' to list handle the current channel is subbed to. Use -del:service to unsub from a handle. NOTICE:Replace spaces in service names w/ '_'!"") await ctx.send(embed=embed) # Function to run shell command and return stdout or sterr -- 2.39.5 From 15d0a01dcb717660e7b363fca4b94b8c65213589 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sun, 21 Mar 2021 12:37:56 -0400 Subject: [PATCH 47/61] typo --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 9853448..8b34a06 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1301,7 +1301,7 @@ async def help(ctx): embed = discord.Embed(title="MMR Monitor Commands", description="Commands for managing the MMR Checker", color=0xeee657) embed.add_field(name=f"{BOT_COMMAND_PREFIX}mmrstatus handle", value="Queries the MMR API for the handle specified and returns the current Ranked Average") - embed.add_field(name=f"{BOT_COMMAND_PREFIX}mmrsub handle", value="Subscribe to receive alerts of ranked average changes for the specified handle. Can run command with just '-list' to list handle the current channel is subbed to. Use -del:service to unsub from a handle. NOTICE:Replace spaces in service names w/ '_'!"") + embed.add_field(name=f"{BOT_COMMAND_PREFIX}mmrsub handle", value="Subscribe to receive alerts of ranked average changes for the specified handle. Can run command with just '-list' to list handle the current channel is subbed to. Use -del:service to unsub from a handle. NOTICE:Replace spaces in service names w/ '_'!") await ctx.send(embed=embed) # Function to run shell command and return stdout or sterr -- 2.39.5 From 8bb132be24743a8a490c9762fcb86125a7ffe93e Mon Sep 17 00:00:00 2001 From: Rich O Date: Sun, 21 Mar 2021 12:44:49 -0400 Subject: [PATCH 48/61] Organizing --- r0b3bot.py | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 8b34a06..be66006 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -2,45 +2,47 @@ import discord from discord.ext import commands +from discord import FFmpegPCMAudio +from discord.utils import get +from discord.voice_client import VoiceClient +from datetime import datetime import urllib.request import random import os import sys import octoapi import time -from datetime import datetime import configparser import json -from discord import FFmpegPCMAudio -from discord.utils import get -from discord.voice_client import VoiceClient import requests import asyncio -#from aiofile import AIOFile import aiofiles as aiof import pickle - #Record the time the bot started start_time = time.time() config = configparser.RawConfigParser() configFilePath = r'bot_config.conf' -# Last error message variable used by $last_error command to display in discord -global last_error -last_error = "No errors have been recorded." - try: config.read(configFilePath) except: print("Error loading config! Please check config file 'bot-config.conf'") +# Last error message variable used by $last_error command to display in discord +global last_error +last_error = "No errors have been recorded." + # -# Read in bot configurations +# Assign bot config from setting in config file # -# Setup HomeAssistant URL and Headers +# Assign Bot core settings +DISCORD_AUTH_TOKEN = config.get('bot-config', 'discord_auth_token') +BOT_COMMAND_PREFIX = config.get('bot-config', 'bot_command_prefix') + +# 3D Printer Setup - HomeAssistant URL and Headers & OctoPrint HASS_TOKEN = config.get('bot-config', 'hass_token') HASS_URL = config.get('bot-config', 'hass_url') HASS_LIGHT = config.get('bot-config', 'hass_light') @@ -49,10 +51,9 @@ hassHEADERS = { 'Authorization': f"Bearer {HASS_TOKEN}", 'content-type': 'application/json', } - OCTOPRINT_IP_ADDRESS = config.get('bot-config', 'octoprint_ip_address') -DISCORD_AUTH_TOKEN = config.get('bot-config', 'discord_auth_token') -BOT_COMMAND_PREFIX = config.get('bot-config', 'bot_command_prefix') + +# StatPing Monitor Settings statping_enable = config.get('bot-config', 'statping_enable') STATPING_URL = config.get('bot-config', 'statping_url') STATPING_API_KEY = config.get('bot-config', 'statping_api_key') @@ -62,6 +63,7 @@ statpingHEADERS = { 'content-type': 'application/json', } +#MMR Checker Settings mmr_checker_enable = config.get('bot-config', 'mmr_checker_enable') mmr_checker_interval = config.get('bot-config', 'mmr_checker_interval') mmrURLBASE = config.get('bot-config', 'mmr_api_url') @@ -70,7 +72,7 @@ mmrHEADERS = { 'content-type': 'application/json', } -# Configure bot +# Configure bot bot = commands.Bot(command_prefix=BOT_COMMAND_PREFIX, description='A derpy derp of a bot.') # Printing configuration details to console -- 2.39.5 From b1d1a7b1cc4252b19081df62246ca3afcd0ea05e Mon Sep 17 00:00:00 2001 From: Rich O Date: Sun, 21 Mar 2021 13:07:25 -0400 Subject: [PATCH 49/61] Cleanup of code --- r0b3bot.py | 88 ++---------------------------------------------------- 1 file changed, 2 insertions(+), 86 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index be66006..273b235 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -566,7 +566,6 @@ async def updateStatus(): activity = discord.Activity(name="your commands",type=discord.ActivityType.listening) await bot.change_presence(activity=activity) - @bot.command() async def info(ctx): embed = discord.Embed(title="R0b3BOT", description="Derpy Derp of a Bot :P", color=0xeee657) @@ -601,8 +600,6 @@ async def info(ctx): embed.add_field(name="Source Code:", value="[R0b3Bot on Gitlab](https://gitlab.rickelobe.com/Bots/r0b3BOT)", inline=False) await ctx.send(embed=embed) -bot.remove_command('help') - @bot.command() async def spstatus(ctx, service = "NONE"): @@ -623,8 +620,6 @@ async def spstatus(ctx, service = "NONE"): else: await ctx.send("Please speficy a service name to query.") - - @bot.command() async def spsub(ctx, service = "NONE"): @@ -873,45 +868,6 @@ async def StatPing_Monitor(): print(">> spsublist.dat does not exist, nothing to do.") await asyncio.sleep(60) - - -async def sp_monitor(sublist): - - # Checks the services listed in spsublist for status change - # Sublist is a list of 3 items: - # - ctx (used to send alert to channel) - # - service (the name of the service to check) - # - status string (last status of the service, either 'online' or 'offline') - - ctx = sublist[0] - - - while True: - - status = await get_stp_status(spsublist[1]) - if status['online'] and spsublist[2] == "online": - # nothing has changed, no alert needed - await asyncio.sleep(1) - elif not status['online'] and spsublist[2] == "offline": - # again, nothing has changed no alert needed - await asyncio.sleep(1) - else: - print(f"Status of {status['name']}' has changed") - if status['online']: - embed = discord.Embed(title=f"{status['name']} Service Alert", description=f"{spsublist[1]} is Online!", color=0x00ff40) - await ctx.send(embed=embed) - #await ctx.send(f"{spsublist[1]} is Online!") - spsublist[2] = "online" - elif not status['online']: - embed = discord.Embed(title=f"{status['name']} Service Alert", description=f"{spsublist[1]} is Offline!", color=0xff2200) - await ctx.send(embed=embed) - #await ctx.send(f"{spsublist[1]} is Offline!") - spsublist[2] = "offline" - else: - embed = discord.Embed(title=f"{status['name']} Service Alert", description=f"{spsublist[1]} is in an unknown state!", color=0xffff00) - await ctx.send(embed=embed) - #await ctx.send(f"Unknown state for service {spsublist[1]}") - await asyncio.sleep(60) async def get_stp_status(service): @@ -1136,45 +1092,6 @@ async def mmrsub(ctx, handle = "NONE"): print(f">> '{handle}' does not exist, cancelling subscription") await ctx.send(f"{handle} was not found") -async def mmr_monitor(sublist): - - # Checks the services listed in spsublist for status change - # Sublist is a list of 3 items: - # - ctx (used to send alert to channel) - # - service (the name of the service to check) - # - status string (last status of the service, either 'online' or 'offline') - - ctx = sublist[0] - - - while True: - - status = await get_stp_status(spsublist[1]) - if status['online'] and spsublist[2] == "online": - # nothing has changed, no alert needed - await asyncio.sleep(1) - elif not status['online'] and spsublist[2] == "offline": - # again, nothing has changed no alert needed - await asyncio.sleep(1) - else: - print(f"Status of {status['name']}' has changed") - if status['online']: - embed = discord.Embed(title=f"{status['name']} Service Alert", description=f"{spsublist[1]} is Online!", color=0x00ff40) - await ctx.send(embed=embed) - #await ctx.send(f"{spsublist[1]} is Online!") - spsublist[2] = "online" - elif not status['online']: - embed = discord.Embed(title=f"{status['name']} Service Alert", description=f"{spsublist[1]} is Offline!", color=0xff2200) - await ctx.send(embed=embed) - #await ctx.send(f"{spsublist[1]} is Offline!") - spsublist[2] = "offline" - else: - embed = discord.Embed(title=f"{status['name']} Service Alert", description=f"{spsublist[1]} is in an unknown state!", color=0xffff00) - await ctx.send(embed=embed) - #await ctx.send(f"Unknown state for service {spsublist[1]}") - #Sleep for 3 hours - await asyncio.sleep(10800) - async def get_mmr_status(mmrhandle): # Get MMR status status via API @@ -1189,7 +1106,6 @@ async def get_mmr_status(mmrhandle): return mmr_stats['ranked']['avg'] - async def MMR_Monitor(): # reads in "mmrsublist.dat" every 3 hours then iterates @@ -1228,7 +1144,7 @@ async def MMR_Monitor(): for channel in mmrsublist[handle]['channels']: ctx = bot.get_channel(channel) print(f">> Alerting {ctx} that '{handle}'s Average Rank has Increased!") - embed = discord.Embed(title=f"MMR Alert", description=f"{handle}'s rank increased to {status}!", color=0x00ff40) + embed = discord.Embed(title=f"MMR Alert", description=f"{handle}'s ranked average increased to {status}!", color=0x00ff40) await ctx.send(embed=embed) elif status < mmrsublist[handle]['AvgRank']: @@ -1236,7 +1152,7 @@ async def MMR_Monitor(): for channel in mmrsublist[handle]['channels']: ctx = bot.get_channel(channel) print(f">> Alerting {ctx} that '{handle}'s Average Rank has Decreased!") - embed = discord.Embed(title=f"MMR Alert", description=f"{handle}'s rank decreased to {status}!", color=0xff2200) + embed = discord.Embed(title=f"MMR Alert", description=f"{handle}'s ranked average decreased to {status}!", color=0xff2200) await ctx.send(embed=embed) else: -- 2.39.5 From 41b1c73ff3bbfda12cff3cd107cf97cc3a67a6a7 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sun, 21 Mar 2021 13:10:16 -0400 Subject: [PATCH 50/61] adding back bot.remove_command entry --- r0b3bot.py | 1 + 1 file changed, 1 insertion(+) diff --git a/r0b3bot.py b/r0b3bot.py index 273b235..612ffb8 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -74,6 +74,7 @@ mmrHEADERS = { # Configure bot bot = commands.Bot(command_prefix=BOT_COMMAND_PREFIX, description='A derpy derp of a bot.') +bot.remove_command('help') # Printing configuration details to console print("=== 3D Printer Status config ===") -- 2.39.5 From c528e0f6380b8a4f6c1e54dc1641b35716b7bacb Mon Sep 17 00:00:00 2001 From: Rich O Date: Sun, 21 Mar 2021 17:19:27 +0000 Subject: [PATCH 51/61] Added new feature --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index aadc5a8..bf2b36b 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ This is R0b3's Discord Bot. It's creation was basically a challenge posed a cow * Query serivces states on StatPing using the `$spstatus` * Use `$spsub` to "Subscribe" to service change alerts for StatPing services. Subscribed alerts are persistent and are not lost on bot restart.
![Example service alert](images/Service_alert.png) +* Use `$mmrsub` to "Subscribe" to a League of Legends handle's Ranked Average. As with the StatPing feature, the subscriptions are persistent. * Play a selection of sound clips to voice channel members using the various commands (`$torololo`, `$oops`, `$promoted`, etc) # Commands @@ -24,4 +25,4 @@ This is R0b3's Discord Bot. It's creation was basically a challenge posed a cow 1. Create a Discord Bot via Developer tools
2. Enter configuration parameters in bot_config.conf.example
3. Enter OctoPrint config parameters in octoapi.conf.example
-4. Rename *.example files as *.conf
\ No newline at end of file +4. Rename *.example files as *.conf and setup your config
-- 2.39.5 From c053b5873356b7c87ea26c7e528ac8036f6d38f9 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sun, 4 Apr 2021 14:54:38 -0400 Subject: [PATCH 52/61] not properly handling non jason response --- r0b3bot.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index e3084ca..2abd7f5 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1100,10 +1100,11 @@ async def get_mmr_status(mmrhandle): mmrhandle.replace(" ", "%20") mmrURL = ''.join(mmrURLBASE) + mmrhandle response = requests.get(mmrURL, headers=mmrHEADERS) - mmr_stats = json.loads(response.text) - - if "error" in mmr_stats: - return "handle not found" + + try: + mmr_stats = json.loads(response.text) + except ValueError as e: + return "handle not found" return mmr_stats['ranked']['avg'] -- 2.39.5 From 1153d1919ca91ce4f97f08e326d3505b41b9e1b6 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sun, 4 Apr 2021 15:01:48 -0400 Subject: [PATCH 53/61] fixing indents --- r0b3bot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 2abd7f5..3425e43 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1104,8 +1104,8 @@ async def get_mmr_status(mmrhandle): try: mmr_stats = json.loads(response.text) except ValueError as e: - return "handle not found" - + return "handle not found" + return mmr_stats['ranked']['avg'] async def MMR_Monitor(): -- 2.39.5 From 98f7ced3bfc78b44f65ae1331aa03df4b032efbd Mon Sep 17 00:00:00 2001 From: Rich O Date: Fri, 25 Mar 2022 01:33:06 +0000 Subject: [PATCH 54/61] Adding BREEEEEEEEEEEE --- sounds/wbbwb_metal.mp3 | Bin 0 -> 169324 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 sounds/wbbwb_metal.mp3 diff --git a/sounds/wbbwb_metal.mp3 b/sounds/wbbwb_metal.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..476b7c44b73a5e475d4baefaa6ae54927b437aa1 GIT binary patch literal 169324 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�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 literal 0 HcmV?d00001 -- 2.39.5 From 0e287c369dd07f0a997fbf66d719ad620716bd97 Mon Sep 17 00:00:00 2001 From: Rich O Date: Fri, 25 Mar 2022 01:36:00 +0000 Subject: [PATCH 55/61] Added $breee command --- r0b3bot.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/r0b3bot.py b/r0b3bot.py index 3425e43..f046090 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -268,6 +268,11 @@ async def iran(ctx, member : discord.Member="NONE"): async def big(ctx, member : discord.Member="NONE"): await play_sound(ctx, member, "./sounds/big.mp3", "$big", 4) +@bot.command() +@commands.cooldown(rate=1, per=10.0, type=commands.BucketType.user) +async def breee(ctx, member : discord.Member="NONE"): + await play_sound(ctx, member, "./sounds/wbbwb_metal.mp3", "$breee", 4) + @bot.command() @commands.cooldown(rate=1, per=10.0, type=commands.BucketType.user) async def rs(ctx, member : discord.Member="NONE"): -- 2.39.5 From 5b6555b8dafd9c0c2a6235176b70dd7af6f879f1 Mon Sep 17 00:00:00 2001 From: Rich O Date: Fri, 25 Mar 2022 01:48:48 +0000 Subject: [PATCH 56/61] adding ascii emote --- r0b3bot.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/r0b3bot.py b/r0b3bot.py index f046090..9b7c4f9 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -272,6 +272,8 @@ async def big(ctx, member : discord.Member="NONE"): @commands.cooldown(rate=1, per=10.0, type=commands.BucketType.user) async def breee(ctx, member : discord.Member="NONE"): await play_sound(ctx, member, "./sounds/wbbwb_metal.mp3", "$breee", 4) + await ctx.send(f"\m/ ( ゚Д゚)<!! \m/") + @bot.command() @commands.cooldown(rate=1, per=10.0, type=commands.BucketType.user) -- 2.39.5 From 5859bbdac8282df3ac7c593c0cdb574fa3147dbd Mon Sep 17 00:00:00 2001 From: Rich O Date: Fri, 25 Mar 2022 01:50:52 +0000 Subject: [PATCH 57/61] updating emote --- r0b3bot.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 9b7c4f9..071185c 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -271,8 +271,9 @@ async def big(ctx, member : discord.Member="NONE"): @bot.command() @commands.cooldown(rate=1, per=10.0, type=commands.BucketType.user) async def breee(ctx, member : discord.Member="NONE"): + await ctx.send(f"\m/ ( ゚Д゚)<BREEEEE!! \m/") await play_sound(ctx, member, "./sounds/wbbwb_metal.mp3", "$breee", 4) - await ctx.send(f"\m/ ( ゚Д゚)<!! \m/") + @bot.command() -- 2.39.5 From 64173df84ddd6762828503dd65cab0f47a5b68c1 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 14 May 2022 00:30:00 +0000 Subject: [PATCH 58/61] Adding We butter the bread with butter - N!CE --- sounds/wbtbwb-nice.mp3 | Bin 0 -> 80247 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 sounds/wbtbwb-nice.mp3 diff --git a/sounds/wbtbwb-nice.mp3 b/sounds/wbtbwb-nice.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..5d5732e02f1b7011ba73421e742cfde397b6798f GIT binary patch literal 80247 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 Date: Sat, 14 May 2022 00:33:09 +0000 Subject: [PATCH 59/61] added $nice --- r0b3bot.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/r0b3bot.py b/r0b3bot.py index 071185c..cb6e5e2 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -274,6 +274,12 @@ async def breee(ctx, member : discord.Member="NONE"): await ctx.send(f"\m/ ( ゚Д゚)<BREEEEE!! \m/") await play_sound(ctx, member, "./sounds/wbbwb_metal.mp3", "$breee", 4) +@bot.command() +@commands.cooldown(rate=1, per=10.0, type=commands.BucketType.user) +async def nice(ctx, member : discord.Member="NONE"): + await ctx.send(f"\m/ ( ゚Д゚)<N!CE! \m/") + await play_sound(ctx, member, "./sounds/wbtbwb-nice.mp3", "$nice", 4) + @bot.command() -- 2.39.5 From a9efb888bd486751f29dc4d3e0ff66594b031d80 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 10 Dec 2022 00:15:27 +0000 Subject: [PATCH 60/61] some cleanup and re-org of help command --- r0b3bot.py | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index cb6e5e2..04322a8 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1198,31 +1198,44 @@ async def MMR_Monitor(): # # +@bot.command() +async def commands(ctx): + # Redirect to the 'help' command + help(ctx) + @bot.command() async def help(ctx): - embed = discord.Embed(title='R0b3BOT Core & Debug Commands:', description="Core commands for info and debug", color=0xeee657) + embed = discord.Embed(title='Core & Debug Commands:', description="Core commands for info and debug", color=0xeee657) embed.add_field(name=f"{BOT_COMMAND_PREFIX}info", value="Gives a little info about the bot", inline=False) embed.add_field(name=f"{BOT_COMMAND_PREFIX}help", value="Gives this message", inline=False) embed.add_field(name=f"{BOT_COMMAND_PREFIX}last_error", value="Will display the real error message the bot has last encountered for additional debugging info") + embed.add_field(name=f"{BOT_COMMAND_PREFIX}greetings", value="Gives a nice greeting message", inline=False) await ctx.send(embed=embed) - embed = discord.Embed(title="R0b3BOT Sound Commands", description="To play a sound in a chat channel, use one of the following:", color=0xeee657) - embed.add_field(name=f"{BOT_COMMAND_PREFIX}printstat", value="Uploads a snapshot of Rich's 3D printer and current stats", inline=False) + embed = discord.Embed(title="GIF Commands", description="Commands to call up a GIF image", color=0xeee657) embed.add_field(name=f"{BOT_COMMAND_PREFIX}explain", value="Displays Dalek EXPLAIN gif", inline=False) embed.add_field(name=f"{BOT_COMMAND_PREFIX}holyshit", value="Displays Marty McFly HOLY SHIT gif", inline=False) - embed.add_field(name=f"{BOT_COMMAND_PREFIX}greetings", value="Gives a nice greet message", inline=False) embed.add_field(name=f"{BOT_COMMAND_PREFIX}cat", value="Gives a cute cat gif to lighten up the mood.", inline=False) + await ctx.send(embed=embed) + + embed = discord.Embed(title="Sound Commands", description="To play a sound in a chat channel, use one of the following:", color=0xeee657) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}aww @member", value="Plays Rick & Morty clip 'Awww bitch'", inline=False) embed.add_field(name=f"{BOT_COMMAND_PREFIX}bitch @member", value="Plays clip of BigEric420 saying 'maybe you shouldn't be such a bitch.mp3'", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}big @member", value="Plays 'Wiz Khalifa clip'") + embed.add_field(name=f"{BOT_COMMAND_PREFIX}bitch @member", value="Plays sound clip of @BigEric420", inline=False) embed.add_field(name=f"{BOT_COMMAND_PREFIX}boom @member", value="Plays 'Boom Bitch' sound clip", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}breee @member", value="Plays 'BREEEEE' clip from a WBTBWB song", inline=False) embed.add_field(name=f"{BOT_COMMAND_PREFIX}cowbell @member", value="Plays 'SNL More Cowbell' sound clip", inline=False) - embed.add_field(name=f"{BOT_COMMAND_PREFIX}oops @member", value="Plays 'Oops.mp3'", inline=False) - embed.add_field(name=f"{BOT_COMMAND_PREFIX}promoted @member", value="Plays Battlefield Friends 'PROMOTED!' sound clip", inline=False) - embed.add_field(name=f"{BOT_COMMAND_PREFIX}trololo @member", value="Plays a clip of Trololo song", inline=False) - embed.add_field(name=f"{BOT_COMMAND_PREFIX}leeroy @member", value="Plays Leeeerrroooyyy Jenkins clip", inline=False) embed.add_field(name=f"{BOT_COMMAND_PREFIX}eia @member", value="Plays 'Everything is Awesome' song clip") embed.add_field(name=f"{BOT_COMMAND_PREFIX}heavy @member", value="Plays 'Poppy ooo heavy'") embed.add_field(name=f"{BOT_COMMAND_PREFIX}iran @member", value="Plays Trump 'I Ran'") - embed.add_field(name=f"{BOT_COMMAND_PREFIX}big @member", value="Plays 'Wiz Khalifa clip'") + embed.add_field(name=f"{BOT_COMMAND_PREFIX}leeroy @member", value="Plays Leeeerrroooyyy Jenkins clip", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}nice @member", value="Plays clip from WBTBWB - Nice!", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}oops @member", value="Plays 'Oops.mp3'", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}promoted @member", value="Plays Battlefield Friends 'PROMOTED!' sound clip", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}trololo @member", value="Plays a clip of Trololo song", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}wow @member", value="Plays clip of Owen Wilson saying 'Woooow'", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}yaw @member", value="Plays clip of Busta Ryhmes 'Yaw Yaw Yaw'", inline=False) await ctx.send(embed=embed) embed = discord.Embed(title="A note about sound clips:", description="Sound clips are only played in voice channels. If a user is not specified when calling the command, the sound will played in the channel of that issuing user is currently joined to. When a username is specified, the bot will play the sound in the channel that user is currently in.") @@ -1238,6 +1251,10 @@ async def help(ctx): embed.add_field(name=f"{BOT_COMMAND_PREFIX}mmrsub handle", value="Subscribe to receive alerts of ranked average changes for the specified handle. Can run command with just '-list' to list handle the current channel is subbed to. Use -del:service to unsub from a handle. NOTICE:Replace spaces in service names w/ '_'!") await ctx.send(embed=embed) + embed = discord.Embed(title="3D Printer Status", color=0xeee657) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}printstat", value="Uploads a snapshot of Rich's 3D printer and current stats", inline=False) + await ctx.send(embed=embed) + # Function to run shell command and return stdout or sterr async def run(cmd): proc = await asyncio.create_subprocess_shell( -- 2.39.5 From a80f62f8d4f4be5811f728200bc5ad0923527925 Mon Sep 17 00:00:00 2001 From: Rich O Date: Sat, 10 Dec 2022 00:22:15 +0000 Subject: [PATCH 61/61] fixing some minor bugs --- r0b3bot.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 04322a8..98e7c31 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -1201,7 +1201,7 @@ async def MMR_Monitor(): @bot.command() async def commands(ctx): # Redirect to the 'help' command - help(ctx) + await help(ctx) @bot.command() async def help(ctx): @@ -1221,14 +1221,14 @@ async def help(ctx): embed = discord.Embed(title="Sound Commands", description="To play a sound in a chat channel, use one of the following:", color=0xeee657) embed.add_field(name=f"{BOT_COMMAND_PREFIX}aww @member", value="Plays Rick & Morty clip 'Awww bitch'", inline=False) embed.add_field(name=f"{BOT_COMMAND_PREFIX}bitch @member", value="Plays clip of BigEric420 saying 'maybe you shouldn't be such a bitch.mp3'", inline=False) - embed.add_field(name=f"{BOT_COMMAND_PREFIX}big @member", value="Plays 'Wiz Khalifa clip'") + embed.add_field(name=f"{BOT_COMMAND_PREFIX}big @member", value="Plays 'Wiz Khalifa clip'", inline=False) embed.add_field(name=f"{BOT_COMMAND_PREFIX}bitch @member", value="Plays sound clip of @BigEric420", inline=False) embed.add_field(name=f"{BOT_COMMAND_PREFIX}boom @member", value="Plays 'Boom Bitch' sound clip", inline=False) embed.add_field(name=f"{BOT_COMMAND_PREFIX}breee @member", value="Plays 'BREEEEE' clip from a WBTBWB song", inline=False) embed.add_field(name=f"{BOT_COMMAND_PREFIX}cowbell @member", value="Plays 'SNL More Cowbell' sound clip", inline=False) - embed.add_field(name=f"{BOT_COMMAND_PREFIX}eia @member", value="Plays 'Everything is Awesome' song clip") - embed.add_field(name=f"{BOT_COMMAND_PREFIX}heavy @member", value="Plays 'Poppy ooo heavy'") - embed.add_field(name=f"{BOT_COMMAND_PREFIX}iran @member", value="Plays Trump 'I Ran'") + embed.add_field(name=f"{BOT_COMMAND_PREFIX}eia @member", value="Plays 'Everything is Awesome' song clip", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}heavy @member", value="Plays 'Poppy ooo heavy'", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}iran @member", value="Plays Trump 'I Ran'", inline=False) embed.add_field(name=f"{BOT_COMMAND_PREFIX}leeroy @member", value="Plays Leeeerrroooyyy Jenkins clip", inline=False) embed.add_field(name=f"{BOT_COMMAND_PREFIX}nice @member", value="Plays clip from WBTBWB - Nice!", inline=False) embed.add_field(name=f"{BOT_COMMAND_PREFIX}oops @member", value="Plays 'Oops.mp3'", inline=False) -- 2.39.5