diff --git a/README.md b/README.md index bccb2ae..6ecaf30 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ __User Pofile__
**Money** - users can claim dailies and check their money __Planned Features__ -* [ ] **Modularity Overhaul** - allow server owners to set their own auto moderation channels, welcome message and others server-specific settings. +* [x] **Modularity Overhaul** - allow server owners to set their own auto moderation channels, welcome message and others server-specific settings. * [x] **Overhaul to expand user profile** - server-specific permission, more compact, improved code * [ ] **Server Roles for Bot Roles** - Give server owners the ability to assign server roles to the bot roles and thereby the ability to grant a bot role by simply granting the equivalent server roles * [ ] **EXP System** - longer exp cooldown, level up system, random amount of exp diff --git a/bot.py b/bot.py index 5e6fa75..c3c927b 100644 --- a/bot.py +++ b/bot.py @@ -55,7 +55,7 @@ async def get_pre(bot, message): blacklistList = list(next(reader)) line = next(reader) for row in reader: - serverData[row[1]] = {"mute":row[2],"automod":row[3],"welcome":row[4], "selfRoles":row[5].split(","),"ignoreCommand":row[6].split(","),"ignoreAutomod":row[7].split(",")} + serverData[row[1]] = {"mute":row[2],"automod":row[3],"welcome-channel":row[4], "selfRoles":row[5].split(","),"ignoreCommand":row[6].split(","),"ignoreAutomod":row[7].split(","),"welcome":row[8],"goodbye":row[9]} # ***************************************************************************************************************** # Internal Function @@ -168,12 +168,12 @@ async def hourly_save(): with open("data/setting.csv","w",newline="") as csvfile: Awriter = csv.writer(csvfile) Awriter.writerow(blacklistList) - Awriter.writerow(['Server Name','Server','Mute Role','Autmod Channel','Welcome Channel',"Self Roles","Automod Ignore","Commands Ignore"]) + Awriter.writerow(['Server Name','Server','Mute Role','Automod Channel','Welcome Channel',"Self Roles","Automod Ignore","Commands Ignore"]) for x in serverData: selfRolesList = ",".join(serverData[x]["selfRoles"]) automodList = ",".join(serverData[x]["ignoreAutomod"]) commandList = ",".join(serverData[x]["ignoreCommand"]) - Awriter.writerow([bot.get_server(x).name,x,serverData[x]["mute"],serverData[x]["automod"],serverData[x]["welcome"],selfRolesList,commandList,automodList]) + Awriter.writerow([bot.get_server(x).name,x,serverData[x]["mute"],serverData[x]["automod"],serverData[x]["welcome-channel"],selfRolesList,commandList,automodList,serverData[x]["welcome"],serverData[x]["goodbye"]]) print("Saved at " + str(t.asctime(t.localtime(t.time())))) await asyncio.sleep(3600) # task runs every hour @@ -223,12 +223,12 @@ async def kill(cont): with open("data/setting.csv","w",newline="") as csvfile: Awriter = csv.writer(csvfile) Awriter.writerow(blacklistList) - Awriter.writerow(['Server Name','Server','Mute Role','Autmod Channel','Welcome Channel',"Self Roles","Automod Ignore","Commands Ignore"]) + Awriter.writerow(['Server Name','Server','Mute Role','Automod Channel','Welcome Channel',"Self Roles","Automod Ignore","Commands Ignore","Welcome Message","Goodbye Message"]) for x in serverData: selfRolesList = ",".join(serverData[x]["selfRoles"]) automodList = ",".join(serverData[x]["ignoreAutomod"]) commandList = ",".join(serverData[x]["ignoreCommand"]) - Awriter.writerow([bot.get_server(x).name,x,serverData[x]["mute"],serverData[x]["automod"],serverData[x]["welcome"],selfRolesList,commandList,automodList]) + Awriter.writerow([bot.get_server(x).name,x,serverData[x]["mute"],serverData[x]["automod"],serverData[x]["welcome-channel"],selfRolesList,commandList,automodList,serverData[x]["welcome"],serverData[x]["goodbye"]]) await bot.send_message(bot.get_channel("318465643420712962"), "**Bot Offline**") await bot.logout() @@ -486,7 +486,7 @@ async def nick(cont, arg0 : discord.Member,*, arg1): @has_perms(4) async def giveme_roles(cont): if cont.invoked_subcommand is None: - await bot.say("Please pass a valid subcommand") + await bot.say("Please pass a valid subcommand (add or del)") @giveme_roles.command(pass_context=True, name="add") async def giveme_roles_add(cont, *, arg0): @@ -550,6 +550,42 @@ async def debug(cont, *, arg0 : str): await bot.say(python.format(result)) +@bot.group(pass_context = True) +@has_perms(4) +async def settings(cont): + if cont.invoked_subcommand is None: + await bot.say("Please pass in a valid subcommand. (welcome, welcome-channel, goodbye, mute, automod)") + +@settings.command(pass_context = True, name="mute") +async def settings_mute(cont, *, arg0): + if not discord.utils.get(cont.message.server.roles, name=arg0) is None: + await bot.say("Okay, the mute role for your server will be " + arg0) + serverData[cont.message.server.id]["mute"] = arg0 + else: + await bot.say("No such role") + +@settings.command(pass_context = True, name="welcome-channel") +async def settings_welcome_channel(cont, arg0 : discord.Channel): + await bot.say("Okay, users will get their welcome message in " + arg0.name + " from now on.") + serverData[cont.message.server.id]["welcome-channel"] = arg0.id + +@settings.command(pass_context = True, name="automod-channel") +async def settings_automod_channel(cont, arg0 : discord.Channel): + await bot.say("Okay, all automoderation messages will be posted in " + arg0.name + " from now on.") + serverData[cont.message.server.id]["automod"] = arg0.id + +@settings.command(pass_context = True, name="welcome") +async def settings_welcome(cont, *, arg0): + arg0 = arg0.replace("\\","") + await bot.say("Your server's welcome message will be: \n" + arg0) + serverData[cont.message.server.id]["welcome"] = arg0 + +@settings.command(pass_context = True, name="goodbye") +async def settings_goodbye(cont, *, arg0): + arg0 = arg0.replace("\\","") + await bot.say("Your server's goodbye message will be: \n" + arg0) + serverData[cont.message.server.id]["goodbye"] = arg0 + # ***************************************************************************************************************** # Regular Commands # ***************************************************************************************************************** @@ -659,7 +695,7 @@ async def on_server_join(server): await default_stats(x, server) await bot.send_message(server.default_channel, "Stats sets for users") - serverData[server.id] = {"mute":"","automod":"","welcome":"", "selfRoles":[],"ignoreCommand":[],"ignoreAutomod":[]} + serverData[server.id] = {"mute":"","automod":"","welcome-channel":"", "selfRoles":[],"ignoreCommand":[],"ignoreAutomod":[],"welcome":"","goodbye":""} invite = await bot.create_invite(server) await bot.send_message(bot.get_channel("241942232867799040"),"I was just invited in the server: " + server.name + ". Join me: " + invite.url) @@ -693,26 +729,35 @@ async def on_member_join(member): if member.id in blacklistList: await bot.ban(member, delete_message_days=0) - try: - channel = bot.get_channel(serverData[member.server.id]["welcome"]) - except AttributeError: + server = member.server + if serverData[member.server.id]["welcome-channel"] != "": + channel = bot.get_channel(serverData[member.server.id]["welcome-channel"]) + else: channel = member.server.default_channel - server = member.server - await bot.send_message(channel, 'Welcome {0.mention} to {1.name}!'.format(member, server)) - await bot.change_nickname(member, str(member.name)) + if serverData[member.server.id]["welcome"] != "": + message = serverData[member.server.id]["welcome"] + else: + message = 'Welcome {member} to {server}!' + server = member.server + await bot.send_message(channel, message.format(member=member.mention, server=server.name)) await default_stats(member, server) #says goodbye and resets perms level if less than NecroBot Admin @bot.event async def on_member_remove(member): - try: - channel = bot.get_channel(serverData[member.server.id]["welcome"]) - except AttributeError: + if serverData[member.server.id]["welcome-channel"] != "": + channel = bot.get_channel(serverData[member.server.id]["welcome-channel"]) + else: channel = member.server.default_channel - await bot.send_message(channel,"Leaving us so soon, {0.mention}? We'll miss you...".format(member)) + if serverData[member.server.id]["goodbye"] != "": + message = serverData[member.server.id]["goodbye"] + else: + message = 'Leaving so soon? We\'ll miss you, {member}!' + + await bot.send_message(channel, message.format(member=member.mention)) if userData[member.id]["perms"][member.server.id] < 6: userData[member.id]["perms"][member.server.id] = 0 diff --git a/data/logfile.txt b/data/logfile.txt index de03745..42801e9 100644 --- a/data/logfile.txt +++ b/data/logfile.txt @@ -565,4 +565,33 @@ Mon Jul 31 10:14:04 2017: Necro#6714 used n!off Mon Jul 31 10:14:13 2017: Necro#6714 used n!debug print("hello world") Mon Jul 31 10:14:37 2017: Necro#6714 used n!debug bot.send_message(cont.message.channel, "hello world") Mon Jul 31 10:15:12 2017: Necro#6714 used n!debug bot.send_message(channel, "hello world") -Mon Jul 31 10:15:39 2017: Necro#6714 used n!off \ No newline at end of file +Mon Jul 31 10:15:39 2017: Necro#6714 used n!off +Mon Jul 31 22:41:02 2017: Necro#6714 used n!settings +Mon Jul 31 22:41:53 2017: Necro#6714 used n!settings mute Good +Mon Jul 31 22:41:59 2017: Necro#6714 used n!mute <@317619283377258497> +Mon Jul 31 22:42:28 2017: Necro#6714 used n!mute TimeOut +Mon Jul 31 22:42:37 2017: Necro#6714 used n!settings mute TimeOut +Mon Jul 31 22:42:45 2017: Necro#6714 used n!settings mute bob +Mon Jul 31 22:43:44 2017: Necro#6714 used n!settings welcome-channel <#312243840046202881> +Mon Jul 31 22:43:52 2017: Necro#6714 used n!invite +Mon Jul 31 22:49:21 2017: Necro#6714 used n!settings welcome-channel <#312243840046202881> +Mon Jul 31 22:49:26 2017: Necro#6714 used n!off +Mon Jul 31 22:55:04 2017: Necro#6714 used n!settings welcome-channel <#312243840046202881> +Mon Jul 31 22:55:26 2017: Necro#6714 used n!off +Mon Jul 31 23:04:14 2017: Necro#6714 used n!debug bot.send_message(serverData[server.id]["welcome-channel"], "hello") +Mon Jul 31 23:04:42 2017: Necro#6714 used n!debug bot.send_message(bot.get_channel(serverData[server.id]["welcome-channel"]), "hello") +Mon Jul 31 23:05:08 2017: Necro#6714 used n!settings welcome-channel <#318738044515647498> +Mon Jul 31 23:05:58 2017: Necro#6714 used n!settings welcome Hello, {member} and welcome to {server}, don't forget to check out <#311630847969198082> +Mon Jul 31 23:07:19 2017: Necro#6714 used n!debug bot.send_message(bot.get_channel(serverData[server.id]["welcome-channel"]), serverData[server.id]["welcome"].format(author.mention, server.name)) +Mon Jul 31 23:11:32 2017: Necro#6714 used n!debug bot.send_message(bot.get_channel(serverData[server.id]["welcome-channel"]), serverData[server.id]["welcome"].format(member=author.mention, server.name)) +Mon Jul 31 23:13:39 2017: Necro#6714 used n!debug bot.send_message(bot.get_channel(serverData[server.id]["welcome-channel"]), serverData[server.id]["welcome"].format(member=author.mention, server=server.name)) +Mon Jul 31 23:16:00 2017: Necro#6714 used n!settings goodbye Bye, we'll miss you {member} \:kissing_heart\: +Mon Jul 31 23:16:24 2017: Necro#6714 used n!debug bot.send_message(bot.get_channel(serverData[server.id]["welcome-channel"]), serverData[server.id]["goodbye"].format(member=author.mention)) +Mon Jul 31 23:17:27 2017: Necro#6714 used n!off +Mon Jul 31 23:17:51 2017: Necro#6714 used n!settings goodbye Bye, we'll miss you {member} \:kissing_heart\: +Mon Jul 31 23:17:58 2017: Necro#6714 used n!debug bot.send_message(bot.get_channel(serverData[server.id]["welcome-channel"]), serverData[server.id]["goodbye"].format(member=author.mention)) +Mon Jul 31 23:18:27 2017: Necro#6714 used n!ignore del <@!241942232867799040> +Mon Jul 31 23:18:34 2017: Necro#6714 used n!automod del <@!241942232867799040> +Mon Jul 31 23:19:21 2017: Necro#6714 used n!settings automod-channel <#318465643420712962> +Mon Jul 31 23:19:52 2017: Necro#6714 used n!settings automod-channel <#318828760331845634> +Mon Jul 31 23:19:56 2017: Necro#6714 used n!off \ No newline at end of file diff --git a/data/setting.csv b/data/setting.csv index d905733..055dd42 100644 --- a/data/setting.csv +++ b/data/setting.csv @@ -1,3 +1,3 @@ 158563957555068928 -Server Name,Server,Mute Role,Autmod Channel,Welcome Channel,Self Roles,Automod Ignore,Commands Ignore -The Land of Shadow,311630847969198082,TimeOut,318828760331845634,318738044515647498,",Evil,Chaotic,Neutral,Lawful,Good",",311789251190587392,312647665395433492,312184736166576129,172002275412279296",",317619283377258497,241942232867799040,321305756999745547,312902474753245184,312243558671450113" +Server Name,Server,Mute Role,Automod Channel,Welcome Channel,Self Roles,Automod Ignore,Commands Ignore,Welcome Message,Goodbye Message +The Land of Shadow,311630847969198082,TimeOut,318828760331845634,318738044515647498,",Evil,Chaotic,Neutral,Lawful,Good",",311789251190587392,312647665395433492,312184736166576129,172002275412279296",",317619283377258497,321305756999745547,312902474753245184,312243558671450113","Hello, {member} and welcome to {server}, don't forget to check out <#311630847969198082>","Bye, we'll miss you {member} :kissing_heart:" diff --git a/data/userdata.csv b/data/userdata.csv index 3954fe0..b73d807 100644 --- a/data/userdata.csv +++ b/data/userdata.csv @@ -1,4 +1,4 @@ -241942232867799040,65897,22,The Bot Smith,2190,"{'311630847969198082': 7, '236997924427530241': 7, '288255618341666827': 7}","test warning1, testwarning2,muted #1" +241942232867799040,65897,22,The Bot Smith,2311,"{'311630847969198082': 7, '236997924427530241': 7, '288255618341666827': 7}","test warning1, testwarning2,muted #1" 317619283377258497,698562,32, ,4667,"{'311630847969198082': 2, '236997924427530241': 0, '288255618341666827': 0}",test warning 1 by Necro#6714 on server The Land of Shadow 227589245731209217,2000,32, ,0,"{'311630847969198082': 0, '236997924427530241': 0, '288255618341666827': 0}", 220502526393450497,2000,32, ,4,"{'311630847969198082': 0, '236997924427530241': 0, '288255618341666827': 0}",