started making susbot3

This commit is contained in:
Honza 2024-03-15 14:50:42 +01:00
parent 80aad63031
commit ad57fcadf5
2 changed files with 322 additions and 4 deletions

View File

@ -0,0 +1,318 @@
import discord, time, random, os
from discord.ext import commands
t_h = 0
t_s = 0
intents = discord.Intents.default()
intents.messages = True
intents.members = True
client = commands.Bot(command_prefix = '~', intents=intents)
##############################################################################################################
##################################### COMMNADS AND FUNCTIONS SCRIPTS #########################################
##############################################################################################################
async def word_counter(message): #counts words in word list
for slovo in slova:
if slovo in message.content.lower() and message.content[0] != '~':
msg_author_id = str(message.author.id)
count = message.content.lower().count(slovo)
file_path = str("word_counts/" + slovo + '_' + msg_author_id + ".txt")
if os.path.exists(file_path):
pass
else:
file = open(file_path, 'w')
file.write("0")
file.close()
pocet = open(file_path, 'r').read()
pocet = int(pocet) + count
file = open(file_path, 'w')
file.write(str(pocet))
file.close()
print("added in", file_path, count, ", celkove", open(file_path, "r").read())
else:
pass
#
#
#
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
async def count_reader(message): #count command returns message with counts of certain word of all users
obsah = message.content.lower().split(' ')
files = []
user_counts = []
msg = ''
if len(obsah) != 2:
print('function ~count got ivalid input:', message.content)
await message.channel.send('invalid input')
return
else:
slovo = obsah[1]
if slovo in slova:
directory = os.walk('word_counts')
for file_path in directory:
for path in file_path[2]:
if path.startswith(slovo):
files.append(path)
else:
pass
else:
print('word in not in word list')
await message.channel.send('word is not in word list')
return
if files == []:
print('word is in the list, but there are no records')
await message.channel.send('word is in the list, but there are no records')
return
else:
for filey in files:
split_filey = filey.split('_')
userid = split_filey[1].split('.')
userid = userid[0]
path = 'word_counts/' + filey
usercount = open(path, 'r').read()
user = client.get_user(int(userid)) #needs to be where the client runs (main.py)
user_counts.append([user.name, int(usercount)])
user_counts.sort(key=lambda x:x[1])
for g in range(len(user_counts)):
g = len(user_counts) - g - 1
msg += str(user_counts[g][0]) + ' ---> ' + str(user_counts[g][1]) + '\n'
await message.channel.send(msg)
#
#
#
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
async def primenum_event(message): #primenumbers script
vstup = int(message.content.split("~primenum ",1)[1])
print('number:', vstup)
delitel = 1
vst_up = int(vstup / 2) #vstup děleno dvěmi
nasel = 0
if vstup >= 999999:
answer = 'Too big number.'
nasel = 3
elif vstup == 2:
answer = str('\nNumber %d IS a prime number.' % (vstup))
else:
vystup = str('Number %d is divisible by:' % (vstup))
while delitel <= vst_up:
delitel = delitel + 1
deleno = vstup / delitel
if deleno == int(deleno):
if delitel == 2:
answer = str('Number %d is divisible by two...' % (vstup))
nasel = 3
break
vystup = vystup + "\n " + str(int(deleno))
nasel = 1
if nasel == 0:
answer = str('Number %d IS a prime number.' % (vstup))
elif nasel == 1:
answer = vystup + str('\nNumber %d IS NOT a prime number.' % (vstup))
await message.channel.send(answer)
print('Bot send:', answer)
#
#
#
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
async def scprove_event(message): #scientists prove that... script
input_message = str(message.content.split('~scprove',1)[1])
output = str('Scientists prove that') + input_message + ('.')
print('Bot send:', output)
await message.channel.send(output)
#
#
#
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
async def help_event(message): #help script
cc = ''
ff = ''
for C in command_list.values():
cc = cc + C.help_print()
for C in function_list.values():
ff = ff + C.help_print()
final_message = '**__Commands__:**\n' + cc + '**__Functions__:**\n' + ff
await message.channel.send(final_message)
#
#
#
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
async def etime_event(message): #epoch time script
await message.channel.send(time.time())
#
#
#
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
async def greetings_function(message): #greetings function
if t_h + 30 < time.time():
for g in greetings:
if message.content.lower().startswith(g):
await message.channel.send('Hello')
print('Expressed greetings to:', message.author.name, '(id:', message.author.id,')')
t_h = time.time()
else:
pass
else:
pass
#
#
#
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
async def sus_function(message): #sus function
if t_s + 20 < time.time():
if ('sus') in (message.content).lower() and message.content[0] != '~':
await message.channel.send(sus_responses[random.randrange(0,len(sus_responses))])
print('Detected sus from:', message.author.name, '(id:', message.author.id, ')')
t_s = time.time()
else:
pass
else:
pass
##############################################################################################################
##################################### FUNCTIONS AND COMMANDS HUB #############################################
##############################################################################################################
class Command:
def __init__(self, caller, desc, script):
self.caller = caller
self.desc = desc
self.script = script
def help_print(self):
return ('%s %s' % (self.caller, self.desc))
class Function:
def __init__(self, caller, desc):
self.caller = caller
self.desc = desc
def help_print(self):
return ('%s %s' % (self.caller, self.desc))
function_list = {}
function_list['sus'] = Function(' sus', ' --> Bot knows when something is sus\n')
function_list['hello'] = Function(' greetings', ' --> Bot greets you back\n')
function_list['counter'] = Function(' word counter', ' --> Bot counts how many times you have written certain words')
command_list = {}
command_list['~etime'] = Command('~etime', ' --> Command that will tell you epoch time\n', etime_event)
command_list['~help'] = Command('~help', ' --> Command that will show you this list\n', help_event)
command_list['~primenum'] = Command('~primenum', ' --> Bot will tell you if number is a prime number (number of six digits max.)\n', primenum_event)
command_list['~scprove'] = Command('~scprove', ' --> Scientist will prove you anything: |*~scprove <text here>*|\n', scprove_event)
command_list['~count'] = Command('~count', ' --> Ask for word count of users: |*~count <word>*|\n\n', count_reader)
slova = ["nigga", "negr", "debil", "gay", "kokot", "ok", "kurva", "sus", "petr", "gej", "bruh", "bružek"] #words bot recognize and count
sus_responses = ["it's getting sus here", "sus", "you are sussy", "sussy baka", "that is kinda sus", "that is sus", "you're seeming sus lately", "seems sus", "SUS", "gobus amogus", "amongsus", "sussy ah", "sussy"] #variety of responses when sus detection
greetings =['čau', 'ahoj', 'hi', 'hello', 'high', 'čauky', 'nazdar', 'dobrý den','helou'] #greetings which bot will reply to
##############################################################################################################
##################################### RUNNING THE FUNCTIONS AND COMMANDS #####################################
##############################################################################################################
@client.event #ready message cmd
async def on_ready():
print("Logged in as {0.user}".format(client))
@client.event #on message actions
async def on_message(message):
global t_h, t_s
if message.author == client.user:
return
# else:
# await(greetings_function(message))
# await(sus_function(message))
# await(word_counter(message))
@client.command()
async def count(ctx, *, arg):
await(count_reader(arg))
#
#
#
#accesing functions and commands hub to run commands
# if message.content.startswith('~'):
# for cmd in command_list.keys():
# if message.content.lower().startswith(cmd):
# c = command_list[cmd]
# print(message.author.name, '(id:', message.author.id, ')', 'called',c.caller)
# await c.script(message)
# break
#
# else:
# pass
# else:
# pass
TOKEN = open("../sus_bot_token.txt", 'r').read()
client.run(TOKEN)

View File

@ -243,16 +243,16 @@ async def on_message(message):
#
#
#hello easy function, not in functions_hub
for g in greetings:
if t_h + 30 < time.time():
if t_h + 30 < time.time():
for g in greetings:
if message.content.lower().startswith(g):
await message.channel.send('Hello')
print('Expressed greetings to:', message.author.name, '(id:', message.author.id,')')
t_h = time.time()
else:
pass
else:
pass
else:
pass
#