Setting up the Discord Bot
======================================

I run the Discord boy from my laptop. It requires the discord Python
module available in PyPi and installable like:

    $ pip3 install discord

I don't have details on how I set up my own Discord bot and/or invited
it to my server but I hope you'll add to this file as you do this and
figure out what needs to happen.

Using the Cold Call Bot
======================================

1. All students must have the role "Student" in Discord. If they do
   not have the roll, they will not be called upon.

2. The "classroom" is the "Classroom Voice" channel. This is currently
   hard coded.

3. The bot has only one command: "$next" which calls a person and
   records this information in the logs. You can run this command in
   any channel that the bot has access to (e.g., #bot-commands) but I
   do it a public channel called "#classroom-questions" so that
   students can watch it operate.


Daily Process
======================================

You need to start the bot from the laptop each day. I do that by:

  $ ./coldcallboy.py

The bot will run in the terminal, print out data as it works including
detailed weights as it goes, and it will record data into files in the
/data/ directory.


After class, you will have two new files created that will be named
like this (with today's date):

    attendance-2020-10-05.tsv
    call_list-2020-10-05.tsv

Each day, you need to open up "call_list-YYYY-MM-DD.tsv" and edit the
final two columns. The first columns `answered` means that the person
responded and answered the question (i.e., they were present in the
room but away from their computer and unresponsive). This is almost
always TRUE but would be FALSE if the student were missing.

The final column `assessment` is GOOD, FAIR, or BAD in my rubric. I've
detailed what that means on this page:

https://wiki.communitydata.science/User:Benjamin_Mako_Hill/Assessment#Rubric_for_case_discussion_answers

I take notes on student answers on paper during class (typically I
only note down non "GOOD" answers) and then add these to the sheet
immediately after class.

I keep my entire data directory in git and I'd recommend that you do
too.

I don't expect that these will necessary work without
modification. It's a good idea to go line-by-line through these to
make sure they are doing what *you* want and that you agree with the
assessment logic built into this.

Assessment and Tracking
======================================

These scripts rely on a file in this repository called
`data/student_information.csv` which I have set to be downloaded
automatically from a Google form using a 1-line wget command.

For reference, that file has the following column labels (this is the
full header, in order):

    Timestamp
    Your UW student number
    Name you'd like to go by in class
    Your Wikipedia username
    Your username on the class Discord server
    Preferred pronouns
    Anything else you'd like me to know?

The scripts in this directory are meant to be run or sourced *from*
the data directory. As in:

    $ cd ../data
    $ R --no-save < ../assessment_and_tracking/track_participation.R

There are three files in that directory:

track_enrolled.R:

    This file keeps track of who is in Discord, who is enrolled for
    the class, etc. This helps me remove people from the
    student_informaiton.csv spreadsheet who are have dropped the
    class, deal with users who change their Discord name, and other
    things that the scripts can't deal with automatically.

    This all need to be dealt with manually, one way or
    another. Sometimes by modifying the script, sometimes by modifying
    the files in the data/ directory.

    This requires an additional file called
    `myuw-COM_482_A_autumn_2020_students.csv` which is just the saved
    CSV from https://my.uw.edu which includes the full class list. I
    download this one manually.

track_participation.R:

    This file generates histograms and other basic information about
    the distribution of participation and absences. I've typically run
    this weekly after a few weeks of the class and share these images
    with students at least once or twice in the quarter.

    This file is also sourced by compute_final_case_grades.R.

compute_final_case_grades.R:

    You can find a narrative summary of my assessment process here:

    https://wiki.communitydata.science/User:Benjamin_Mako_Hill/Assessment#Overall_case_discussion_grade

    This also requires the registration file (something like
    `myuw-COM_482_A_autumn_2020_students.csv`) which is described
    above.

    To run this script, you will need to create the following subdirectories:

    data/case_grades
    data/case_grades/student_reports


One final note: A bunch of things in these scripts assumes a UW 4.0
grade scale. I don't think it should be hard to map these onto some
other scale, but that's an exercise I'll leave up to those that want
to do this.