Score changes are prone to incorrect concurrent updates
Updating scores doesn't use transactions, so reading a user's current score, incrementing it in the bot, and writing that back can cause the wrong score to be written if multiple writes are happening simultaneously.
Since the bot doesn't actually care what the resulting score is, the query can be changed to do an atomic update:
INSERT INTO scores (Name, Score)
VALUES (@fname, 1)
ON DUPLICATE KEY
UPDATE Score = Score + 1;
For reading links, there should still be a transaction to avoid creating scores that refer to the wrong name if links change during the operation.