xpyct_bot/main.py

347 lines
12 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from webserver import keep_alive
import os
try:
import nextcord
except ImportError:
print("Trying to Install required module: nextcord[voice]\n")
os.system("python -m pip install nextcord[voice]")
import nextcord
from nextcord.ext import commands
import json
import requests
import random
import asyncio
from urllib.parse import quote_plus
import youtube_dl
from speedtest import Speedtest
def get_prefix(bot, message):
with open("prefix.json", "r") as f:
prefix = json.load(f)
return prefix[str(message.guild.id)]
PREFIX = "$"
intents = nextcord.Intents().all()
bot = commands.Bot(command_prefix=get_prefix, intents=intents)
@bot.event
async def on_guild_join(guild):
with open("prefix.json", "r") as f:
prefix = json.load(f)
prefix[str(guild.id)] = "$"
with open("prefix.json", "w") as f:
json.dump(prefix, f, indent=4)
@bot.event
async def on_guild_remove(guild):
with open("prefix.json", "r") as f:
prefix = json.load(f)
prefix.pop(str(guild.id))
with open("prefix.json", "w") as f:
json.dump(prefix, f, indent=4)
@bot.command()
@commands.has_permissions(administrator=True)
async def setprefix(ctx, new: str):
with open("prefix.json", "r") as f:
prefix = json.load(f)
prefix[str(ctx.guild.id)] = new
with open("prefix.json", "w") as f:
json.dump(prefix, f, indent=4)
await ctx.send(f"Новый префикс `{new}`")
bot.remove_command("help")
version = "Bot v2.3"
@bot.event
async def on_ready():
print(f"Bot logged as {bot.user} | {version}")
await bot.change_presence(
status=nextcord.Status.online, activity=nextcord.Game("$help")
)
@bot.command(pass_context=True)
async def help(ctx):
author = ctx.message.author
test_e = nextcord.Embed(
colour=nextcord.Colour.orange()
)
test_e.set_author(name=f"Мои команды:")
test_e.add_field(name="help", value="Помощь с командами", inline=False)
test_e.add_field(name="ping", value="Отображение пинга")
test_e.add_field(name="clear", value="(Либо purge или clean) очистка чата")
test_e.add_field(name="hello", value="Бот поздоровается с вами")
test_e.add_field(name="github", value="Ссылка на мой GitHub")
test_e.add_field(name="ver", value="Версия бота")
test_e.add_field(name="say", value="Пересказывание чего-либо от имени бота")
test_e.add_field(name="serverinfo", value="Информация о сервере")
test_e.add_field(name="send_m", value="Отправка сообщений в ЛС от имени бота")
test_e.add_field(name="nitro", value="NOT a free nitro")
test_e.add_field(name="guess", value="Угадай число")
test_e.add_field(name="$монета", value="Орёл или Решка?")
test_e.add_field(name="play", value="Играет музыку. Пример: $play Never Gonna Give You Up")
test_e.add_field(name="loop", value="Ставит повтор воспроизведения")
test_e.add_field(name="stop", value="Остановка воспроизведения (НЕ ПАУЗА)")
test_e.add_field(name="pause", value="Ставит воспроизведение на паузу")
await author.send(embed=test_e)
@bot.command(
aliases=[
"Ping",
"PING",
"pING",
"ping",
"Пинг",
"ПИНГ",
"пИНГ",
"пинг",
"Понг",
"ПОНГ",
"пОНГ",
"понг",
]
)
async def __ping(
ctx,
): # Объявление асинхронной функции __ping с возможностью публикации сообщения
ping = bot.ws.latency # Получаем пинг клиента
ping_emoji = "🟩🔳🔳🔳🔳" # Эмоция пинга, если он меньше 100ms
if ping > 0.10000000000000000:
ping_emoji = "🟧🟩🔳🔳🔳" # Эмоция пинга, если он больше 100ms
if ping > 0.15000000000000000:
ping_emoji = "🟥🟧🟩🔳🔳" # Эмоция пинга, если он больше 150ms
if ping > 0.20000000000000000:
ping_emoji = "🟥🟥🟧🟩🔳" # Эмоция пинга, если он больше 200ms
if ping > 0.25000000000000000:
ping_emoji = "🟥🟥🟥🟧🟩" # Эмоция пинга, если он больше 250ms
if ping > 0.30000000000000000:
ping_emoji = "🟥🟥🟥🟥🟧" # Эмоция пинга, если он больше 300ms
if ping > 0.35000000000000000:
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"
) # Вывод пинга в консоль
@bot.command()
async def hello(ctx):
author = ctx.message.author
await ctx.send(f"Привет, {author.mention}!")
print(f"[Logs:utils] Приветствие было выведено | {PREFIX}hello")
@bot.command()
async def link(ctx):
await ctx.send("Ссылка на добавления бота на свой сервер: https://discord.com/api/oauth2/authorize?client_id=833720975069282344&permissions=0&scope=applications.commands%20bot")
@bot.command()
async def ver(ctx):
await ctx.send(f"{version} | Сделано CreeperXP#0363")
print(f"[Logs:utils] Информация о боте была выведена | {PREFIX}ver")
@bot.command()
async def say(ctx, *, text):
await ctx.message.delete()
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("Ты не разработчик бота!")
@bot.command()
async def serverinfo(ctx):
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)
await ctx.send(embed=serverinfoEmbed)
@bot.command()
async def userinfo(ctx, user: nextcord.User):
user_id = user.id
username = user.name
avatar = user.avatar.url
await ctx.send(f"ID: {user_id} | NICK: {username}\n{avatar}")
print(f"[Logs:utils] Информация о {username} была выведена | {PREFIX}userinfo")
@bot.command(aliases=["clear", "purge"])
async def clean(ctx, amount=None):
await ctx.channel.purge(limit=int(amount) + 1)
print(f"[Logs:utils] {amount} сообщений удалено | {PREFIX}clean")
class Confirm(nextcord.ui.View):
def __init__(self):
super().__init__()
self.value = None
@nextcord.ui.button(label="Да", style=nextcord.ButtonStyle.danger)
async def confirm(
self, button: nextcord.ui.Button, interaction: nextcord.Interaction
):
await interaction.response.send_message(
"https://github.com/CreeperXP/xpyct_bot", ephemeral=True
)
self.value = True
self.stop()
@nextcord.ui.button(label="Нет", style=nextcord.ButtonStyle.blurple)
async def cancel(
self, button: nextcord.ui.Button, interaction: nextcord.Interaction
):
await interaction.response.send_message("Ну ладно :(", ephemeral=True)
self.value = False
self.stop()
@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("Ссылка не выведена")
print(f"[Logs:utils] Ссылка на GitHub была выведена | {PREFIX}github")
@bot.command()
async def send_m(ctx, member: nextcord.Member, *, text):
await ctx.message.delete()
author = ctx.message.author
user_name = author.name
develop = ["CreeperXP", "Dmitry Medvedev"]
if user_name in 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("Ты не разработчик бота!")
await ctx.message.delete()
class Google(nextcord.ui.View):
def __init__(self, query: str):
super().__init__()
query = quote_plus(query)
url = f"https://www.google.com/search?q={query}"
self.add_item(nextcord.ui.Button(label="Google", url=url))
class Yandex(nextcord.ui.View):
def __init__(self, query: str):
super().__init__()
query = quote_plus(query)
url = f"https://yandex.ua/search/?text={query}"
self.add_item(nextcord.ui.Button(label="Яндекс", url=url))
@bot.command(aliases=["поиск", "гугл"])
async def google(ctx, *, query: str):
await ctx.reply(f"Результаты запроса `{query}`", view=Google(query))
@bot.command(aliases=["яндекс", "yndx"])
async def yandex(ctx, *, query: str):
await ctx.reply(f"Результаты запроса `{query}`", view=Yandex(query))
st = Speedtest()
dl_speed = int(st.download() / 8000)
up_speed = int(st.upload() / 8000)
ethernet_speed = (
f"Скорость закачки: {dl_speed} kb/s \n" f"Скорость выгрузки: {up_speed} kb/s"
)
@bot.command(aliases=["esp"])
async def ethspeed(ctx):
await ctx.send(ethernet_speed)
@bot.command(aliases=["нитро", "nitro"])
async def freenitro(ctx):
embed=nextcord.Embed(description=f"Click on the link and get a free nitro!\nhttps://clck.ru/9TFat")
await ctx.reply(embed=embed)
# COGS
@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"):
if filename.endswith(".py"):
bot.load_extension(f"cogs.{filename[:-3]}")
keep_alive()
bot.run(os.getenv("DISCORD_TOKEN"))