From 788ed2de621c56cd0cbd262c6c83559d31608f76 Mon Sep 17 00:00:00 2001 From: Jeremy Foote Date: Wed, 30 Dec 2020 14:14:35 -0500 Subject: [PATCH] Adding support for classes which each use their own category. Moving key into a config file to avoid accidental sharing --- .gitignore | 1 + README | 2 +- coldcall.py | 24 ++++++++++++++++-------- coldcallbot.py | 15 ++++++++++----- update_student_info.sh | 3 +++ 5 files changed, 31 insertions(+), 14 deletions(-) create mode 100755 update_student_info.sh diff --git a/.gitignore b/.gitignore index 9b5e2e8..7dcced7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *~ __pycache__ +config.py diff --git a/README b/README index 611926e..f05a204 100644 --- a/README +++ b/README @@ -18,7 +18,7 @@ the steps there, with one important exception: need to enable both "Privileged Gateway Intents." This allows the bot to see who is present and active in the channel. -Finally, you need to copy your bot'ss Token (also found on the "Bot" tab) +Finally, you need to copy your bot's Token (also found on the "Bot" tab) into coldcallbot.py. Pass it as the argument to `ccb.run()`. diff --git a/coldcall.py b/coldcall.py index 1905844..a18c893 100644 --- a/coldcall.py +++ b/coldcall.py @@ -11,22 +11,26 @@ import re import discord class ColdCall(): - def __init__ (self): + def __init__ (self, course = ''): + self.course = course self.today = str(datetime.date(datetime.now())) # how much less likely should it be that a student is called upon? - self.weight = 2 + self.weight = 2 + self.__set_filenames() + + def __set_filenames(self): # filenames - self.__fn_studentinfo = "data/student_information.tsv" - self.__fn_daily_calllist = f"data/call_list-{self.today}.tsv" - self.__fn_daily_attendance = f"data/attendance-{self.today}.tsv" + self.__fn_studentinfo = f"data/{self.course}/student_information.tsv" + self.__fn_daily_calllist = f"data/{self.course}/call_list-{self.today}.tsv" + self.__fn_daily_attendance = f"data/{self.course}/attendance-{self.today}.tsv" def __load_prev_questions(self): previous_questions = defaultdict(int) - for fn in listdir("./data/"): + for fn in listdir(f"./data/{self.course}/"): if re.match("call_list-\d{4}-\d{2}-\d{2}.tsv", fn): - with open(f"./data/{fn}", 'r') as f: + with open(f"./data/{self.course}/{fn}", 'r') as f: for row in DictReader(f, delimiter="\t"): if not row["answered"] == "FALSE": previous_questions[row["discord_name"]] += 1 @@ -40,7 +44,7 @@ class ColdCall(): preferred_names = {} with open(self.__fn_studentinfo, 'r') as f: for row in DictReader(f, delimiter="\t"): - preferred_names[row["Your username on the class Discord server"]] = row["Name you'd like to go by in class"] + preferred_names[row["discord_name"]] = row["name"] if selected_student in preferred_names: return preferred_names[selected_student] @@ -99,6 +103,10 @@ class ColdCall(): coldcall_message = f"@{selected_student}, you're up!" return coldcall_message + def update_course(self, course_name): + self.course = course_name + self.__set_filenames() + # cc = ColdCall() # test_student_list = ["jordan", "Kristen Larrick", "Madison Heisterman", "Maria.Au20", "Laura (Alia) Levi", "Leona Aklipi", "anne", "emmaaitelli", "ashleylee", "allie_partridge", "Tiana_Cole", "Hamin", "Ella Qu", "Shizuka", "Ben Baird", "Kim Do", "Isaacm24", "Sam Bell", "Courtneylg"] diff --git a/coldcallbot.py b/coldcallbot.py index 392028a..fd7669f 100755 --- a/coldcallbot.py +++ b/coldcallbot.py @@ -3,6 +3,7 @@ from coldcall import ColdCall import re import discord +import config ## create the coldcall object cc = ColdCall() @@ -11,13 +12,16 @@ class ColdCallBot (discord.Client): async def on_ready(self): print(f'Logged on as {self.user}! Ready for class!') - async def on_message(self, message): + async def on_message(self, message, voice_channel = 'Class Sessions'): if message.author == self.user: return if message.content.startswith('$next'): - classroom = discord.utils.get(message.guild.voice_channels, name='Classroom Voice') - + if message.channel.category: + if cc.course != message.channel.category: + cc.update_course(message.channel.category) + classroom = [x for x in message.guild.voice_channels if x.name == voice_channel and x.category_id == message.channel.category_id][0] + present_students = [] for member in classroom.members: if 'Students' in [r.name for r in member.roles]: @@ -29,6 +33,8 @@ class ColdCallBot (discord.Client): if len(present_students) < 1: msg_text = "I don't see any students currently in the Classroom Voice channel!" else: + if cc is None: + print('hi') msg_text = cc.coldcall(present_students) await message.channel.send(msg_text) @@ -39,5 +45,4 @@ intents.members = True intents.presences = True ccb = ColdCallBot(intents=intents) -ccb.run('CHANGEME') - +ccb.run(config.key) diff --git a/update_student_info.sh b/update_student_info.sh new file mode 100755 index 0000000..b8ea3f1 --- /dev/null +++ b/update_student_info.sh @@ -0,0 +1,3 @@ +wget "https://docs.google.com/spreadsheets/d/e/2PACX-1vTBboNsATMKYdQM3WsbcIvloqRlvR9ajSgZWyHN6Bci50wfiPBjibTxaF8XcMgAJycvKNdAfR9LBHbp/pub?gid=1302288840&single=true&output=csv" -O ./data/COM\ 495\ -\ Turning\ Data\ into\ Insights\ and\ Stories/student_information.tsv + +wget "https://docs.google.com/spreadsheets/d/e/2PACX-1vSPL6jKD2rXQqac6O0pMb4JRxMAOM-EdPkZw2FuebbJHiZdAl4n5Df5RCyuxoHcwOcW0VbBevnec6b-/pub?gid=1575299441&single=true&output=csv" -O ./data/COM\ 411\ -\ Communication\ and\ Social\ Networks/student_information.tsv -- 2.39.5