discord_susbot/bot_newest_version/susmain4.py

289 lines
10 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import discord, time, datetime, random, os
from discord import app_commands
from discord.ext import commands, tasks
from config import slova, sus_responses, greetings, main_channels_ids, bot_messages, bot_reply_messages
t_h = 0
t_s = 0
client = commands.Bot(command_prefix="~", intents=discord.Intents.all())
dtime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
##############################################################################################################
########################################## FUNCTIONS SCRIPTS #################################################
##############################################################################################################
async def chat_participation(): #randmonly sends messages into main channels function
for idd in main_channels_ids:
channel = client.get_channel(idd)
print("jo")
members = channel.members
members_ids = []
for member in members:
members_ids.append(member.id)
members_ids.remove(client.user.id)
rnid = random.choice(members_ids)
msg = (random.choice(bot_messages)).strip()
if "@random" in msg:
msg = msg.replace("@random", f"<@{rnid}>")
if "<time>" in msg:
msg = msg.replace("<time>", str(time.strftime("%H:%M:%S",time.localtime())))
await channel.send(msg)
print("|RAND CHAT PARTICIPATION| Bot sent: {}".format(msg))
#
#
#
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
async def word_counter(message): #counts words in word list function
for slovo in slova:
if slovo in message.content.lower().split(" ") 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("|WORD COUNTER| Added {} to {}, in total: {}".format(count, file_path, open(file_path, "r").read()))
else:
pass
#
#
#
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
async def greetings_function(message): #greetings function
global t_h
if t_h + 30 < time.time():
for g in greetings:
if message.content.lower().startswith(g):
await message.channel.send(random.choice(greetings))
print('|GREETINGS| Expressed greetings to: {} (id: {})'.format(message.author.name, message.author.id))
t_h = time.time()
else:
pass
else:
pass
#
#
#
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
async def sus_function(message): #sus function
global t_s
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('|SUS FUNC| Detected sus from: {} (id: {})'.format(message.author.name, message.author.id))
t_s = time.time()
else:
pass
else:
pass
##############################################################################################################
########################################## RUNNING THE FUNCTIONS #############################################
##############################################################################################################
@tasks.loop(minutes = 10)
async def myloop():
if random.randrange(0,1200) == random.randrange(0,1200):
await chat_participation()
@client.event
async def on_ready():
print(f"[ONREADY ] logged in as: {client.user}")
try:
synced = await client.tree.sync()
print(f"[ONREADY ] synced {len(synced)} command(s)")
except Exception as e:
print(f"[ONREADY ] {e}")
myloop.start()
@client.event #on message actions
async def on_message(message):
if message.author == client.user or message.channel.id not in main_channels_ids:
return
else:
if client.user.mentioned_in(message) and "@here" not in message.content:
reply = (random.choice(bot_reply_messages)).strip()
if "<mentioner_message>" in reply:
reply = reply.replace("<mentioner_message>", ("'" + message.content + "'"))
await message.reply(reply)
print("|REPLIED| Bot replied: {}".format(reply))
else:
await greetings_function(message)
await sus_function(message)
await word_counter(message)
await client.process_commands(message) #this line is very fuqacking important
##############################################################################################################
############################################# COMMANDS #######################################################
##############################################################################################################
#read word count - count reader #count command returns message with counts of given word of all users
@client.tree.command(name="count", description="Reads the count of given word")
@app_commands.describe(word = "How many times has users written this word")
async def count(interaction: discord.Interaction, word: str):
files = []
user_counts = []
msg = ''
slovo = word
if slovo in slova:
directory = os.walk('word_counts')
for file_path in directory:
for path in file_path[2]:
if path.split("_")[0] == slovo:
files.append(path)
else:
pass
else:
print('|COUNT READER| Searched word is not in word list')
await interaction.response.send_message('your desired word is not in word list')
return
if files == []:
print('|COUNT READER| Word is in the list, but there are no records')
await interaction.response.send_message('your desired 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 interaction.response.send_message(msg)
#
#
#epoch time script
@client.tree.command(name="etime", description="Shows epoch time")
async def count(interaction: discord.Interaction):
await interaction.response.send_message(f"the epoch time is: {time.time()} and the human time is: {dtime}")
#
#
#primenum command
@client.tree.command(name="primenum", description="Identifies whether given number is a primenumber")
@app_commands.describe(number = "Number to indentify it's divisibility")
async def primenum(interaction: discord.Interaction, number: int):
delitel = 1
vst_up = int(number / 2) #vstup děleno dvěmi
nasel = 0
print(f'|PRIMENUM| Input: {number}')
if number >= 999999:
answer = 'Too big number.'
nasel = 3
elif number == 2:
answer = str(f'\nNumber {number} IS a prime number.')
else:
vystup = str(f'Number {number} is divisible by:')
while delitel <= vst_up:
delitel = delitel + 1
deleno = number / delitel
if deleno == int(deleno):
if delitel == 2:
answer = str('Number %d is divisible by two...' % (number))
nasel = 3
break
vystup = vystup + "\n " + str(int(deleno))
nasel = 1
if nasel == 0:
answer = str('Number %d IS a prime number.' % (number))
elif nasel == 1:
answer = vystup + str('\nNumber %d IS NOT a prime number.' % (number))
await interaction.response.send_message(answer)
print('|PRIMENUM| Bot sent: {}'.format(answer))
#
#
#scientists prove that
@client.tree.command(name="scprove", description="Scientists will prove it")
@app_commands.describe(statement = "Short statement scientists will prove")
async def scprove(interaction: discord.Interaction, statement: str):
output = str('Scientists prove that ') + statement
print('|SCPROVE| Bot sent: {}'.format(output))
await interaction.channel.send(output)
await interaction.response.send_message("Scientists have proven your statement", ephemeral=True)
#
#
#help command
@client.tree.command(name="help", description="List of bot commands and functions")
async def help(interaction: discord.Interaction): #help script
#commands embed
commands = client.tree.get_commands()
embed1 = discord.Embed(title=":sparkles: Help :sparkles:", description=f"List of functions and commands", color=0xe10077)
for c in commands:
embed1.add_field(name=f"/{c.name}", value=c.description, inline=False)
embed1.add_field(name = "Functions:", value = "-- Well behaved", inline = False)
#embed1.add_field(name = "Well behaved", value="Bot will greet you back", inline = False)
embed1.add_field(name = " ", value = " -- Significant recognicition of sussyness", inline = False)
embed1.add_field(name = " ", value = " -- Word counting ability", inline = False)
await interaction.response.send_message(embed = embed1)
############################################# RUNNING THE BOT ################################################
TOKEN = open("../sus_bot_token.txt", 'r').read()
client.run(TOKEN)