Skip to content
Permalink
0d25decad2
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
176 lines (161 sloc) 9.31 KB
import discord
from discord.ext import commands
from asyncio import sleep
from datetime import datetime
from datetime import timedelta
from datetime import time
client = commands.Bot(command_prefix='!')
memberDBDict = {}
memberCreated = []
def readToken():
with open("token.txt", "r") as input:
lines = input.readlines()
return lines[0].strip()
token = readToken()
async def getMembers():
while True:
#print("Getting Members")
for member in client.get_all_members():
memberName = member.name
roleFound = False
if member.activity is None:
memberDict = {"member": member, "notif30": 1, "notif60": 1, "notif90": 1, "notifOnce": 0,
"lastnotif": datetime.utcnow(), 'lastAct': None, "actStart": datetime.utcnow()}
elif int(member.activity.type) == 0:
memberDict = {"member": member, "notif30": 1, "notif60": 1, "notif90": 1, "notifOnce": 0,
"lastnotif": datetime.utcnow(), 'lastAct': member.activity.name, "actStart": member.activity.created_at}
else:
memberDict = {"member": member, "notif30": 1, "notif60": 1, "notif90": 1, "notifOnce": 0,
"lastnotif": datetime.utcnow(), 'lastAct': member.activity.name,
"actStart": datetime.utcnow()}
for role in member.roles:
if role.name == "GameTime Users":
roleFound = True
if role.name == "GT 60 Min":
memberDict["notif30"] = 0
if role.name == "GT 90 Min":
memberDict["notif30"] = 0
memberDict["notif60"] = 0
if roleFound and memberName not in memberCreated:
print(f"Member Added/Overwritten: {memberName}")
memberDBDict[memberName] = memberDict
memberCreated.append(memberName)
elif roleFound is False and memberName in memberCreated:
print(f"Member Removed: {memberName}")
memberDBDict.pop(memberName)
memberCreated.clear(memberName)
await sleep(5)
#getting members using a for loop and organising them in a variable using if , else elif statements
async def sendDM(member, gamingtime):
timeParse = (datetime.min + gamingtime).time()
if timeParse.hour == 0:
message = f"Consider taking a break. You have been playing for {timeParse.minute} minutes!"
elif timeParse.hour == 1 and timeParse.minute == 0:
message = f"Consider taking a break. You have been playing for 1 hour!"
elif timeParse.hour == 1 and timeParse.minute != 0:
message = f"Consider taking a break. You have been playing for 1 hour and {timeParse.minute} minutes!"
elif timeParse.hour > 1 and timeParse.minute == 0:
message = f"Consider taking a break. You have been playing for {timeParse.hour} hours!"
elif timeParse.hour > 1 and timeParse.minute != 0:
message = f"Consider taking a break. You have been playing for {timeParse.hour} hours"
message += f" and {timeParse.minute} minutes!"
await member.send(content=message, delete_after=10)
print(f"Message sent to {member}: {message}") #notifying users qbout the time spent gaming
#sending the dms based on the time spent gaming using if statements
async def deployNotifs():
while True:
#print("Sending Notifications if any.")
for memberName in memberDBDict:
#print(memberDBDict[memberName]["member"])
if memberDBDict[memberName]["member"].activity is not None:
if memberDBDict[memberName]["member"].activity.name == memberDBDict[memberName]["lastAct"]:
if int(memberDBDict[memberName]["member"].activity.type) == 0:
timeGaming = datetime.utcnow() - memberDBDict[memberName]["actStart"]
timeLimit30 = timedelta(minutes=30)
timeLimit60 = timedelta(minutes=60)
timeLimit90 = timedelta(minutes=90)
timeLimit120 = timedelta(minutes=120)
timeSinceNotif = datetime.utcnow() - memberDBDict[memberName]["lastnotif"]
notifLimit = timedelta(minutes=30)
#print(f"{memberDBDict[memberName]['member'].name}: {memberDBDict[memberName]['member'].activity.name}: {str(timeGaming)}")
if memberDBDict[memberName]["notifOnce"] == 0:
#print("This was triggered!")
timeSinceNotif = notifLimit
memberDBDict[memberName]["notifOnce"] = 1
if timeGaming >= timeLimit120:
if timeSinceNotif >= notifLimit:
memberDBDict[memberName]["lastnotif"] = datetime.utcnow()
await sendDM(memberDBDict[memberName]["member"], timeGaming)
elif timeGaming >= timeLimit90 and memberDBDict[memberName]["notif90"] == 1:
if timeSinceNotif >= notifLimit:
memberDBDict[memberName]["lastnotif"] = datetime.utcnow()
await sendDM(memberDBDict[memberName]["member"], timeGaming)
elif timeGaming >= timeLimit60 and memberDBDict[memberName]["notif60"] == 1:
if timeSinceNotif >= notifLimit:
memberDBDict[memberName]["lastnotif"] = datetime.utcnow()
await sendDM(memberDBDict[memberName]["member"], timeGaming)
elif timeGaming >= timeLimit30 and memberDBDict[memberName]["notif30"] == 1:
#print(timeSinceNotif)
if timeSinceNotif >= notifLimit:
memberDBDict[memberName]["lastnotif"] = datetime.utcnow()
await sendDM(memberDBDict[memberName]["member"], timeGaming)
else:
#print("Changing Activity")
memberDBDict[memberName]["lastAct"] = memberDBDict[memberName]["member"].activity.name
memberDBDict[memberName]["actStart"] = memberDBDict[memberName]["member"].activity.created_at
else:
#print("Changing to None")
memberDBDict[memberName]["lastAct"] = memberDBDict[memberName]["member"].activity
memberDBDict[memberName]["actStart"] = datetime.utcnow()
await sleep(10)
#organising the notifications sent based on how much time and how many notificatons we sent to a certain user using variables and if , else statements
@client.event
async def on_raw_reaction_add(payload):
# Set GameTime User Role
member = payload.member
#print(f"{member.name} reacted")
channel = discord.utils.get(client.get_all_channels(), id=727621686085812236)
if payload.message_id == 727768829387604019:
role = discord.utils.get(member.guild.roles, name="GameTime Users")
#print(f"Adding {role} role to {member}")
await member.add_roles(role, reason="GameTime enabled!")
if payload.message_id == 727768830658478120:
if payload.emoji.id == 727664758731309168:
role = discord.utils.get(member.guild.roles, name="GT 60 Min")
# print(f"Adding {role} role to {member}")
await member.add_roles(role, reason="GT 60 Min Enabled!")
if payload.message_id == 727768830658478120:
if payload.emoji.id == 727664758853074995:
role = discord.utils.get(member.guild.roles, name="GT 90 Min")
# print(f"Adding {role} role to {member}")
await member.add_roles(role, reason="GT 90 Min Enabled!")
@client.event
async def on_raw_reaction_remove(payload):
member = discord.utils.get(client.get_all_members(), id=payload.user_id)
#print(f"{member.name} unreacted")
if payload.message_id == 727768829387604019:
role = discord.utils.get(member.guild.roles, name="GameTime Users")
#print(f"Adding {role} role to {member}")
await member.remove_roles(role, reason="GameTime enabled!")
if payload.message_id == 727768830658478120:
if payload.emoji.id == 727664758731309168:
role = discord.utils.get(member.guild.roles, name="GT 60 Min")
# print(f"Adding {role} role to {member}")
await member.remove_roles(role, reason="GT 60 Min Enabled!")
if payload.message_id == 727768830658478120:
if payload.emoji.id == 727664758853074995:
role = discord.utils.get(member.guild.roles, name="GT 90 Min")
# print(f"Adding {role} role to {member}")
await member.remove_roles(role, reason="GT 90 Min Enabled!")
@client.event
async def on_member_join(member):
welchannel = discord.utils.get(client.get_all_channels(), id=727621335345397911)
howtochannel = discord.utils.get(client.get_all_channels(), id=727621686085812236)
message = f"Welcome {member.mention}!\nPlease follow the instructions in {howtochannel.mention} to get GameTime up and running!\n_ _\n"
await welchannel.send(content=message)
@client.event
async def on_ready():
print("GameTime is online!")
client.loop.create_task(getMembers())
client.loop.create_task(deployNotifs())
client.run(token)