From e3f6f307b13d52a94561e3e4763b204345446aad Mon Sep 17 00:00:00 2001 From: turtlebasket Date: Thu, 27 Jun 2019 22:53:26 -0700 Subject: [PATCH] update README & add functionality --- README.md | 25 ++++++++++++-- bot.py | 94 ++++++++++++++++++++++++++++++++++++++------------ mute_demo.png | Bin 0 -> 23887 bytes 3 files changed, 94 insertions(+), 25 deletions(-) create mode 100644 mute_demo.png diff --git a/README.md b/README.md index 4c3e424..4ad31b1 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,23 @@ -# karl-marx-2 -A poll-based moderation bot to take care of that noisy scallywag in #general +Karl Marx 2 +=========== +Karl Marx 2 takes a somewhat different spin on moderation for smaller servers (~10-35 users), handing the controls back to the users themselves. Instead of a single moderator issuing a command to mute, kick or banish a given user, the choice is left up to anyone and everyone present in the channel. Is the user at hand being annoying or spammy enough to be muted? Are they toxic enough to be kicked/banned? We'll take a vote! + +
+ +I didn't have as much time as I would have liked to work on this, but I after Hack Week I intend to progressively flesh out its functionality beyond just moderation and further improve it. + +Made with love. [Enjoy!](https://discordapp.com/oauth2/authorize?client_id=592852914553487370&permissions=8&scope=bot) :) + +**IMPORTANT:** json storage is still under development. + +Installation +------------ +1. Clone the repo wherever you want and make sure you have python3 installed with the discord.py package. (If you don't then just `pip3 install discord.py` and you should be good to go!) +2. `python3 bot.py` + +Commands +-------- +- `>>mute` - Hold a 30-second vote to mute a user for 10 minutes. You can set different values in `config.json`. +- `>>exile` - Euphamism for banning a user, I guess. By default, the vote lasts 3 hours, and requires that there be at least 10 votes and a 50% majority. Like the `>>mute` command, you can also tweak settings in `config.json`. +- `>>anthem` - First verse of the Soviet National Anthem. Might need that at some point to show your communist pride. +- `>>ping` - Fun leftovers from when I was first setting up the bot. :P diff --git a/bot.py b/bot.py index d535001..8424cd1 100644 --- a/bot.py +++ b/bot.py @@ -1,7 +1,18 @@ +""" +Karl Marx 2 +A bot by turtlebasket +""" + +import asyncio +import json import discord from discord.ext import commands -from time import sleep +MUTE_VOTE_TIME = 10 +MUTE_VOTER_MIN = 2 +MUTE_TIME = 600 # 10 mins +BAN_VOTE_TIME = 8 +BAN_VOTER_MIN = 4 bot = commands.Bot(command_prefix='>>') @bot.event @@ -22,38 +33,36 @@ async def anthem(ctx): command: anthem some people just need a reference, ya know? """ + await ctx.send("Soyuz nyerushimyiy ryespublik svobodnyikh\n" + "Splotila navyeki Vyelikaya Rus’.\n" + "Da zdravstvuyet sozdannyiy volyey narodov\n" + "Yedinyiy, moguchiy Sovyetskiy Soyuz!\n") - await ctx.send( - "Soyuz nyerushimyiy ryespublik svobodnyikh\n" - "Splotila navyeki Vyelikaya Rus’.\n" - "Da zdravstvuyet sozdannyiy volyey narodov\n" - "Yedinyiy, moguchiy Sovyetskiy Soyuz!\n" - ) - -@bot.command() -async def mute(ctx, target_user:str): +# not a command, just some functionality that's used across commands +async def take_vote(ctx, question:str, wait_time): """ - command: soft_mute - The actual good stuff. - If someone's spamming or being annoying, just mute 'em. Requires 3 votes by default. + take_vote(ctx, question:str) - Collects votes + ctx: pass from command function + question: what to ask + + returns [, ]. + It's up to the context/use case to decide how these should be used. """ - votey_message = await ctx.send( - "=== NEW MUTE VOTE ===\n" - "Mute {}?".format(str(target_user))) + votey_message = await ctx.send("**=== NEW VOTE ===**\n{}".format(question)) await votey_message.add_reaction('✅') await votey_message.add_reaction('❌') - sleep(10) + await asyncio.sleep(wait_time) finished_votey = await votey_message.channel.fetch_message(votey_message.id) - print(finished_votey.reactions) all_in_favor = 0 not_in_favor = 0 + for reaction in finished_votey.reactions: if str(reaction.emoji) == '✅': - all_in_favor += reaction.count-1 + all_in_favor += reaction.count-1 # don't include bot's reaction elif str(reaction.emoji) == '✅': not_in_favor += reaction.count-1 else: @@ -63,11 +72,50 @@ async def mute(ctx, target_user:str): "**=== VOTE RESULTS ===**\n" "✅ - {0}\n" "❌ - {1}\n".format(all_in_favor, not_in_favor)) + return [all_in_favor, not_in_favor] + +@bot.command() +async def mute(ctx, target_user:discord.User): + + results = await take_vote(ctx, "Mute `{}`?".format(target_user), MUTE_VOTE_TIME) + all_in_favor = results[0] + not_in_favor = results[1] + + if all_in_favor > 0 and all_in_favor - not_in_favor > 0: + # Take action to mute user + + # add temp. role for mute + muted_role = await ctx.guild.create_role(name="Muted") + # edit role position to take precedence over other roles + await muted_role.edit(position=ctx.guild.get_member(target_user.id).top_role.position+1) + + for channel in ctx.guild.channels: + await channel.set_permissions(muted_role, read_messages=True, send_messages=False, add_reactions=False, connect=False) + + await ctx.guild.get_member(target_user.id).add_roles(muted_role) + await ctx.send("**{0}, the majority has ruled that you should be muted.** See ya in {1} minutes!".format(target_user, int(MUTE_TIME/60))) + await asyncio.sleep(MUTE_TIME) + await muted_role.delete() - if all_in_favor > 2 and all_in_favor - not_in_favor > 0: - await ctx.send("{} **has** been muted.".format(target_user)) else: - await ctx.send("{} **has not** been muted.".format(target_user)) - print("all in favor: {}".format(all_in_favor)) + await ctx.send("**{} has not been muted.**".format(target_user)) + +@bot.command() +async def roletest(ctx): + await ctx.send("`{}`".format(ctx.guild.roles)) + +@bot.command() +async def exile(ctx, target_user:discord.User): + results = await take_vote(ctx, "Ban `{}`?".format(target_user), BAN_VOTE_TIME) + all_in_favor = results[0] + not_in_favor = results[1] + + if all_in_favor > not_in_favor and all_in_favor >= BAN_VOTER_MIN: # change to 10 later + await ctx.guild.ban(target_user) + await ctx.send(":crab: :crab: `{}` IS GONE :crab: :crab:".format(target_user.name)) + elif all_in_favor <= all_in_favor: + await ctx.send("The majority (>50%) did not decide on banning `{}`.".format(target_user.name)) + elif all_in_favor < 1: + await ctx.send("Not enough users voted to ban `{}`.".format(target_user.name)) bot.run(open("token.txt").read().strip()) diff --git a/mute_demo.png b/mute_demo.png new file mode 100644 index 0000000000000000000000000000000000000000..8b66807ef1d9ee84a246f05e4618c93870a34e7e GIT binary patch literal 23887 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%0A#+`K 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 literal 0 HcmV?d00001