I'm the GM of a long-running online Vampire: the Masquerade campaign. Three years ago, we had a new (and young) player who cheated on dice rolls. I kicked him out.
A while later, he messaged me to apologize for his behavior. A while after that, we played together in another game GM'd by a mutual friend. We had a fun experience, so I invited him back to my game. I'd cheated in games too when I was his age and figured if I could reform, so could he.
He came back and things were really great. He was a very enthusiastic player who loved the game and enriched it in tons of ways. One of these ways was by using his coding knowledge to write custom dice rolling and sheet editor bots. We spent many hours talking outside of the game, chatting over voice calls, watching movies together, etc., and I considered us good friends.
However, I recently discovered he's rigged the dice bot to cheat on rolls, and has been cheating for almost a year. He also used the sheet editor to spy on the other PCs' character sheets, and has read portions of the sourcebook I get many of the game's plots and characters from.
All of these things are huge no-nos in our game. He knows they are. PvP is allowed, so sheets are kept strictly secret between player and GM. I am also completely against all forms of player or GM roll fudging. A major part of our game's culture is letting the dice fall where they will.
I've been mulling over what to do. I've arrived at some in-game and metagame penalties that I feel sufficiently make up for his PC's year of cheated rolls (and less than sufficiently make up for the spied-on sheets.) He can't cheat on rolls or view other PCs' sheets any longer. I liked the player a lot, and I genuinely would like to levy the penalties, forgive him, and move on. We live across the country, so the game is the primary venue we socialize through and maintain our friendship.
But I don't feel like I can ever trust him again. We already went through this song and dance three years ago: he cheated, I kicked him out, gave him a second chance, and he started doing it again anyway. I think his love for the game and desire to stay friends is sincere. But I don't think he sees anything wrong with his behavior. I think he would have continued cheating forever if he thought he'd get away with it.
The game's other two players both feel the same way. His relationships with them are in the toilet after they found out he'd been cheating and reading their sheets. They're willing (and able) to be civil if he stays, but that's it. The player who used to consider him a friend no longer does so.
Right now I am leaning towards kicking him out. Doing so will nevertheless make me very sad. What do other people think?
Update: Situation has been resolved. Player has been kicked out. Rest of the group feels good about it.