xpyct_bot/main.py

244 lines
8.3 KiB
Python
Raw Normal View History

2021-10-05 14:06:16 +02:00
from webserver import keep_alive
import os
import nextcord
from nextcord.ext import commands
2021-10-10 08:51:29 +02:00
import time
2021-10-05 14:06:16 +02:00
import json
import requests
2021-10-14 09:12:25 +02:00
PREFIX = "$"
bot = commands.Bot(command_prefix=PREFIX, description="Hi")
bot.remove_command("help")
2021-10-05 14:06:16 +02:00
2021-10-19 16:27:25 +02:00
version = "Bot v1.6"
2021-10-10 08:51:29 +02:00
ctime = time.strftime("Today is %X %x", time.localtime())
2021-10-05 14:06:16 +02:00
2021-10-14 09:12:25 +02:00
2021-10-05 14:06:16 +02:00
@bot.event
async def on_ready():
print(f"Bot logged as {bot.user} | {version}")
2021-10-10 08:51:29 +02:00
print(f"{ctime}")
2021-10-14 09:12:25 +02:00
await bot.change_presence(
status=nextcord.Status.online, activity=nextcord.Game("$help")
)
2021-10-05 14:06:16 +02:00
@bot.command()
async def help(ctx):
2021-10-14 09:12:25 +02:00
await ctx.send(
f"Мои команды: {PREFIX}help | {PREFIX}ping | {PREFIX}clear | {PREFIX}hello | {PREFIX}github | {PREFIX}ver | {PREFIX}say | {PREFIX}serverinfo | {PREFIX}clean | {PREFIX}send_m"
)
print(f"[Logs:utils] Информация о командах бота была выведена | {PREFIX}help")
@bot.command(
aliases=[
"Ping",
"PING",
"pING",
"ping",
"Пинг",
"ПИНГ",
"пИНГ",
"пинг",
"Понг",
"ПОНГ",
"пОНГ",
"понг",
]
)
async def __ping(
ctx,
): # Объявление асинхронной функции __ping с возможностью публикации сообщения
ping = bot.ws.latency # Получаем пинг клиента
ping_emoji = "🟩🔳🔳🔳🔳" # Эмоция пинга, если он меньше 100ms
2021-10-05 14:06:16 +02:00
if ping > 0.10000000000000000:
2021-10-14 09:12:25 +02:00
ping_emoji = "🟧🟩🔳🔳🔳" # Эмоция пинга, если он больше 100ms
2021-10-05 14:06:16 +02:00
if ping > 0.15000000000000000:
2021-10-14 09:12:25 +02:00
ping_emoji = "🟥🟧🟩🔳🔳" # Эмоция пинга, если он больше 150ms
2021-10-05 14:06:16 +02:00
if ping > 0.20000000000000000:
2021-10-14 09:12:25 +02:00
ping_emoji = "🟥🟥🟧🟩🔳" # Эмоция пинга, если он больше 200ms
2021-10-05 14:06:16 +02:00
if ping > 0.25000000000000000:
2021-10-14 09:12:25 +02:00
ping_emoji = "🟥🟥🟥🟧🟩" # Эмоция пинга, если он больше 250ms
2021-10-05 14:06:16 +02:00
if ping > 0.30000000000000000:
2021-10-14 09:12:25 +02:00
ping_emoji = "🟥🟥🟥🟥🟧" # Эмоция пинга, если он больше 300ms
2021-10-05 14:06:16 +02:00
if ping > 0.35000000000000000:
2021-10-14 09:12:25 +02:00
ping_emoji = "🟥🟥🟥🟥🟥" # Эмоция пинга, если он больше 350ms
message = await ctx.send(
"Пожалуйста, подождите. . ."
) # Переменная message с первоначальным сообщением
await message.edit(
content=f"Понг! {ping_emoji} `{ping * 1000:.0f}ms` :ping_pong:"
) # Редактирование первого сообщения на итоговое (На сам пинг)
print(
f"[Logs:utils] На данный момент пинг {ping * 1000:.0f}ms | {PREFIX}ping"
) # Вывод пинга в консоль
2021-10-05 14:06:16 +02:00
@bot.command()
async def hello(ctx):
author = ctx.message.author
2021-10-14 09:12:25 +02:00
await ctx.send(f"Привет, {author.mention}!")
print(f"[Logs:utils] Приветствие было выведено | {PREFIX}hello")
2021-10-05 14:06:16 +02:00
@bot.command()
async def ver(ctx):
await ctx.send(f"{version} | Сделано CreeperXP#0363")
2021-10-14 09:12:25 +02:00
print(f"[Logs:utils] Информация о боте была выведена | {PREFIX}ver")
2021-10-05 14:06:16 +02:00
@bot.command()
async def clear(ctx, amount=5):
2021-10-14 09:12:25 +02:00
await ctx.channel.purge(limit=amount + 1)
print(f"[Logs:utils] {amount} сообщений удалено| {PREFIX}purge")
2021-10-05 14:06:16 +02:00
@bot.command()
async def say(ctx, *, text):
2021-10-14 09:12:25 +02:00
await ctx.message.delete()
2021-10-19 16:27:25 +02:00
author = ctx.message.author
username = author.name
develop = "CreeperXP"
if username == develop:
await ctx.message.delete()
await ctx.send(embed=nextcord.Embed(description=text))
print(f"[Logs:utils] Сообщение пересказано ботом | {PREFIX}say")
else:
await ctx.send("Ты не разработчик бота!")
2021-10-14 09:12:25 +02:00
2021-10-05 14:06:16 +02:00
@bot.command()
async def time(ctx):
2021-10-14 09:12:25 +02:00
await ctx.send(f"{ctime}")
print(f"[Logs:utils] Время было выведено: {ctime} | {PREFIX}time")
2021-10-05 14:06:16 +02:00
@bot.command()
async def serverinfo(ctx):
2021-10-14 09:12:25 +02:00
role_count = len(ctx.guild.roles)
serverinfoEmbed = nextcord.Embed(color=ctx.author.color)
serverinfoEmbed.add_field(name="Название", value=f"{ctx.guild.name}", inline=False)
serverinfoEmbed.add_field(
name="Кол-во юзеров", value=f"{ctx.guild.member_count}", inline=False
)
serverinfoEmbed.add_field(
name="Уровень безопасности",
value=f"{ctx.guild.verification_level}",
inline=False,
)
serverinfoEmbed.add_field(name="Кол-во ролей", value=f"{role_count}", inline=False)
serverinfoEmbed.add_field(name="ID сервера", value=f"{ctx.guild.id}", inline=False)
2021-10-05 14:06:16 +02:00
2021-10-14 09:12:25 +02:00
await ctx.send(embed=serverinfoEmbed)
2021-10-05 14:06:16 +02:00
2021-10-07 12:22:25 +02:00
@bot.command()
async def userinfo(ctx, user: nextcord.User):
user_id = user.id
username = user.name
avatar = user.avatar.url
2021-10-14 09:12:25 +02:00
await ctx.send(f"ID: {user_id} | NICK: {username}\n{avatar}")
print(f"[Logs:utils] Информация о {username} была выведена | {PREFIX}userinfo")
2021-10-07 12:22:25 +02:00
2021-10-05 14:06:16 +02:00
@bot.command()
async def clean(ctx, amount=None):
await ctx.channel.purge(limit=int(amount))
2021-10-14 09:12:25 +02:00
print(f"[Logs:utils] {amount} сообщений удалено | {PREFIX}clean")
2021-10-05 14:06:16 +02:00
class Confirm(nextcord.ui.View):
def __init__(self):
super().__init__()
self.value = None
@nextcord.ui.button(label="Да", style=nextcord.ButtonStyle.danger)
2021-10-14 09:12:25 +02:00
async def confirm(
self, button: nextcord.ui.Button, interaction: nextcord.Interaction
):
await interaction.response.send_message(
2021-10-19 16:27:25 +02:00
"https://github.com/CreeperXP/xpyct_bot", ephemeral=True
2021-10-14 09:12:25 +02:00
)
2021-10-05 14:06:16 +02:00
self.value = True
self.stop()
@nextcord.ui.button(label="Нет", style=nextcord.ButtonStyle.blurple)
2021-10-14 09:12:25 +02:00
async def cancel(
self, button: nextcord.ui.Button, interaction: nextcord.Interaction
):
2021-10-05 14:06:16 +02:00
await interaction.response.send_message("Ну ладно :(", ephemeral=True)
self.value = False
self.stop()
2021-10-14 09:12:25 +02:00
2021-10-05 14:06:16 +02:00
@bot.command()
async def github(ctx):
view = Confirm()
await ctx.send("Перейти на GiHub?", view=view)
await view.wait()
if not view.value == None:
print("Timed Out")
if view.value == True:
print("Ссылка выведена")
if view.value == False:
print("Ссылка не выведена")
2021-10-19 16:27:25 +02:00
print(f"[Logs:utils] Ссылка на GitHub была выведена | {PREFIX}github")
2021-10-14 09:12:25 +02:00
2021-10-05 14:06:16 +02:00
@bot.command()
async def send_m(ctx, member: nextcord.Member, *, text):
2021-10-14 09:12:25 +02:00
await ctx.message.delete()
2021-10-19 16:27:25 +02:00
author = ctx.message.author
user_name = author.name
develop = "CreeperXP"
if user_name == develop:
await member.send(f"От {ctx.author.name}:", embed=nextcord.Embed(description=text))
print(f"[Logs:utils] Сообщение от {ctx.author.name} было отправлено {member.name} | {PREFIX}send_m")
else:
await ctx.send("Ты не разработчик бота!")
time.sleep(7)
await ctx.message.delete()
2021-10-14 09:12:25 +02:00
2021-10-05 14:06:16 +02:00
2021-10-08 13:08:49 +02:00
@bot.command()
async def mute(ctx):
2021-10-14 09:12:25 +02:00
await ctx.send(file=nextcord.File("leopold-vd.mp4"))
2021-10-19 16:27:25 +02:00
@bot.command() ## Стандартное объявление комманды
async def load(ctx, extensions): ## объявление функции
bot.load_extension(f'cogs.{extensions}') ## загрузка доплонений
await ctx.send("loaded")
@bot.command()
async def unload(ctx, extensions):
bot.unload_extension(f"cogs.{extensions}")
await ctx.send('unloaded')
@bot.command()
async def reload(ctx, extensions):
bot.unload_extension(f"cogs.{extensions}")# отгружаем ког
bot.load_extension(f"cogs.{extensions}")# загружаем
await ctx.send('reloaded')
for filename in os.listdir("./cogs"): # Цикл перебирающий файлы в cogs
if filename.endswith(".py"): # если файл кончается на .py, то это наш ког
bot.load_extension(f"cogs.{filename[:-3]}") #Командуем боту загрузить все расширения. Это нужно для того, чтобы вы перезапуская бота не писали команды загрузки. При наличии этого цикла бот стартует сразу с полной загрузкой когов
2021-10-08 13:08:49 +02:00
2021-10-05 14:06:16 +02:00
keep_alive()
2021-10-14 09:12:25 +02:00
bot.run(os.getenv("DISCORD_TOKEN"))