Untitled
unknown
plain_text
2 years ago
28 kB
9
Indexable
import discord
import keep_alive
import os
import random
import datetime
from discord.ext import commands, tasks
import sqlite3
import asyncio
intents = discord.Intents.default()
intents.message_content = True
conn = sqlite3.connect('base.db')
cursor = conn.cursor()
cursor.execute('SELECT user_id FROM economy')
bot = commands.Bot(command_prefix='!', intents=intents)
hug_images = [
"hug1.jpg", "hug2.jpg", "hug3.jpg", "hug4.jpg", "hug5.jpg", "hug6.jpg",
"hug7.jpg", "hug8.jpg", "hug9.jpg"
]
kiss_images = [
"kiss1.jpg", "kiss2.jpg", "kiss3.jpg", "kiss4.jpg", "kiss5.jpg",
"kiss6.jpg", "kiss7.jpg", "kiss8.jpg"
]
kill_images = [
"kill1.png", "kill2.jpg", "kill3.png", "kill4.png", "kill5.jpg",
"kill6.jpg"
]
ykysit_images = [
"ykysit1.jpg", "ykysit2.jpg", "ykysit3.jpg", "ykysit4.jpg", "ykysit5.gif",
"ykysit6.jpg"
]
bang_images = [
"bang1.jpg", "bang2.jpg", "bang3.jpg", "bang4.jpg", "bang5.jpg",
"bang6.jpg"
]
hit_images = [
"hit1.jpg", "hit2.jpg", "hit3.jpg", "hit4.jpg", "hit5.jpg", "hit6.jpg"
]
@bot.event
async def on_ready():
print(f'Logged in as {bot.user.name}')
@bot.command()
@commands.check(lambda ctx: ctx.channel.id == 1004818706238554274)
async def репорт(ctx, user: discord.User, *, reason):
channel = bot.get_channel(
1144163529595834368
) # Замените текстовый_канал_id на ID вашего текстового канала
message = f'Пользователь {ctx.author.mention} пожаловался на игрока {user.mention} по причине: {reason}'
# Отправить сообщение в текстовый канал
await channel.send(message)
# Отправить ответное сообщение автору команды
await ctx.send('Жалоба успешно отправлена, ожидайте ответа от Администратора'
)
@bot.command()
async def личнаярума(ctx):
# Проверяем баланс пользователя
user_id = str(ctx.author.id)
conn = sqlite3.connect('base.db')
cursor = conn.cursor()
cursor.execute('SELECT balance FROM economy WHERE user_id = ?', (user_id, ))
user_balance = cursor.fetchone()
if not user_balance:
await ctx.send(f'{ctx.author.mention}, у вас нет баланса.')
conn.close()
return
user_balance = user_balance[0]
# Условие для создания комнаты
if user_balance >= 25000:
# Здесь вы можете указать айди категории, в которой нужно создать комнату
category_id = 1147198161241251841 # Замените на айди вашей категории
# Создаем голосовую комнату
overwrites = {
ctx.guild.default_role: discord.PermissionOverwrite(
connect=False), # Запрещаем соединение для всех
ctx.author: discord.PermissionOverwrite(
connect=True, manage_channels=True
) # Разрешаем соединение и управление каналом для создателя
}
category = ctx.guild.get_channel(category_id)
if category:
new_channel = await ctx.guild.create_voice_channel(
name=f' Комната {ctx.author.display_name}',
category=category,
overwrites=overwrites)
# Обновляем баланс пользователя
new_balance = user_balance - 25000
cursor.execute('UPDATE economy SET balance = ? WHERE user_id = ?',
(new_balance, user_id))
conn.commit()
await ctx.send(
f'{ctx.author.mention}, ваша голосовая личная комната была создана: {new_channel.mention}'
)
conn.close()
else:
await ctx.send(
f'{ctx.author.mention}, указанной категории не существует.')
conn.close()
else:
await ctx.send(
f'{ctx.author.mention}, у вас недостаточно средств для создания голосовой личной комнаты.'
)
conn.close()
@bot.command()
async def уничтожить(ctx, количество: int):
if ctx.author.guild_permissions.manage_messages:
if количество <= 0:
await ctx.send(
'Пожалуйста, укажите положительное количество сообщений для очистки.'
)
else:
try:
deleted = await ctx.channel.purge(
limit=количество + 1) # +1 для удаления команды !уничтожить
await ctx.send(f'Успешно удалено {len(deleted) - 1} сообщений.'
) # -1, чтобы не учитывать команду
except discord.Forbidden:
await ctx.send('У меня нет разрешения удалять сообщения в этом канале.'
)
except discord.HTTPException:
await ctx.send('Произошла ошибка при попытке удалить сообщения.')
else:
await ctx.send(
'У вас нет разрешения управлять сообщениями в этом серверном канале.')
@bot.command()
async def обнять(ctx, user: discord.User):
hug_image = random.choice(hug_images)
# Создаем Embed сообщение с указанием цвета
embed = discord.Embed(
description=f'{ctx.author.mention} обнял {user.mention}', color=0x2f3136)
# Устанавливаем изображение в Embed
embed.set_image(url=f'attachment://{hug_image}')
# Отправляем Embed сообщение с прикрепленным файлом
await ctx.send(file=discord.File(hug_image), embed=embed)
@bot.command()
async def ударить(ctx, user: discord.User):
hit_image = random.choice(hit_images)
# Создаем Embed сообщение с указанием цвета
embed = discord.Embed(
description=f'{ctx.author.mention} ударил {user.mention}',
color=0x2f3136)
# Устанавливаем изображение в Embed
embed.set_image(url=f'attachment://{hit_image}')
# Отправляем Embed сообщение с прикрепленным файлом
await ctx.send(file=discord.File(hit_image), embed=embed)
@bot.command()
async def поцеловать(ctx, user: discord.User):
kiss_image = random.choice(kiss_images)
# Создаем Embed сообщение с указанием цвета
embed = discord.Embed(
description=f'{ctx.author.mention} поцеловал {user.mention}',
color=0x2f3136)
# Устанавливаем изображение в Embed
embed.set_image(url=f'attachment://{kiss_image}')
# Отправляем Embed сообщение с прикрепленным файлом
await ctx.send(file=discord.File(kiss_image), embed=embed)
@bot.command()
async def убить(ctx, user: discord.User):
kill_image = random.choice(kill_images)
# Создаем Embed сообщение с указанием цвета
embed = discord.Embed(
description=f'{ctx.author.mention} убил {user.mention}', color=0x2f3136)
# Устанавливаем изображение в Embed
embed.set_image(url=f'attachment://{kill_image}')
# Отправляем Embed сообщение с прикрепленным файлом
await ctx.send(file=discord.File(kill_image), embed=embed)
@bot.command()
async def выстрелить(ctx, user: discord.User):
bang_image = random.choice(bang_images)
# Создаем Embed сообщение с указанием цвета
embed = discord.Embed(
description=f'{ctx.author.mention} выстрелил {user.mention}',
color=0x2f3136)
# Устанавливаем изображение в Embed
embed.set_image(url=f'attachment://{bang_image}')
# Отправляем Embed сообщение с прикрепленным файлом
await ctx.send(file=discord.File(bang_image), embed=embed)
@bot.command()
async def укусить(ctx, user: discord.User):
ykysit_image = random.choice(ykysit_images)
# Создаем Embed сообщение с указанием цвета
embed = discord.Embed(
description=f'{ctx.author.mention} укусил {user.mention}',
color=0x2f3136)
# Устанавливаем изображение в Embed
embed.set_image(url=f'attachment://{ykysit_image}')
# Отправляем Embed сообщение с прикрепленным файлом
await ctx.send(file=discord.File(ykysit_image), embed=embed)
@bot.command()
@commands.has_role(946951469263892481
) # Указываем ID роли, которая имеет доступ к команде
async def девочка(ctx, member: discord.Member):
role_id = 857541604578820106 # ID роли "Девочка" (замените на вашу роль)
role = discord.utils.get(ctx.guild.roles, id=role_id)
if role is None:
await ctx.send('Роль не найдена.')
return
if role in member.roles:
await member.remove_roles(role)
await ctx.send(f'Роль "Девочка" успешно убрана у {member.mention}.')
else:
await member.add_roles(role)
await ctx.send(f'Роль "Девочка" успешно добавлена {member.mention}.')
@девочка.error
async def девочка_error(ctx, error):
if isinstance(error, commands.MissingRole):
await ctx.send('У вас нет прав для выполнения этой команды.')
@bot.command()
@commands.has_role(946951469263892481
) # Указываем ID роли, которая имеет доступ к команде
async def мальчик(ctx, member: discord.Member):
role_id = 889151368823205970 # ID роли "Мальчик" (замените на вашу роль)
role = discord.utils.get(ctx.guild.roles, id=role_id)
if role is None:
await ctx.send('Роль не найдена.')
return
if role in member.roles:
await member.remove_roles(role)
await ctx.send(f'Роль "Мальчик" успешно убрана у {member.mention}.')
else:
await member.add_roles(role)
await ctx.send(f'Роль "Мальчик" успешно добавлена {member.mention}.')
@мальчик.error
async def мальчик_error(ctx, error):
if isinstance(error, commands.MissingRole):
await ctx.send('У вас нет прав для выполнения этой команды.')
@bot.command()
@commands.has_permissions(administrator=True)
async def банроль(ctx, member: discord.Member):
role_id = 1084826124346990665 # ID роли "Бан-роль" (замените на вашу роль)
role_to_give = discord.utils.get(ctx.guild.roles, id=role_id)
if role_to_give is None:
await ctx.send('Роль не найдена.')
return
try:
roles_to_remove = member.roles[
1:] # Получить все роли пользователя, кроме @everyone
await member.remove_roles(*roles_to_remove)
await member.add_roles(role_to_give)
await ctx.send(
f'{member.mention} получил бан-роль на сервере, и у него больше нет других ролей.'
)
except discord.Forbidden:
await ctx.send('У меня нет разрешения выдавать/забирать роли.')
@банроль.error
async def банроль_error(ctx, error):
if isinstance(error, commands.MissingPermissions):
await ctx.send('У вас нет прав для выполнения этой команды.')
@bot.command()
async def брак(ctx, user: discord.User):
author = ctx.author
channel = ctx.channel
# Отправить запрос на брак
await channel.send(
f'{user.mention}, {author.mention} предлагает вам брак! Напишите !брак принять если согласны'
)
# Ожидание ответа от пользователя
def check(message):
return message.author == user and message.content.lower() in [
'!брак принять', '!брак отказать'
]
try:
response = await bot.wait_for('message', timeout=60.0, check=check)
except asyncio.TimeoutError:
await channel.send(f'{user.mention}, время на решение истекло.')
return
if response.content.lower() == '!брак принять':
# Записать брак в файл
with open('marry.txt', 'a') as file:
file.write(f'{author.id} + {user.id}\n')
await channel.send(
f'Брак успешно создан между {author.mention} и {user.mention}! c:')
@bot.command()
async def браки(ctx):
# Прочитать список браков из файла
with open('marry.txt', 'r') as file:
marriages = file.read().splitlines()
if not marriages:
await ctx.send('Список браков пуст.')
return
marriage_list = []
for marriage in marriages:
user_ids = marriage.split(' + ')
user_mentions = []
for user_id in user_ids:
user = ctx.guild.get_member(int(user_id))
if user:
user_mentions.append(user.mention)
else:
user_mentions.append(
f'<@{user_id}>'
) # Здесь мы используем <@{user_id}> для упоминания пользователя
marriage_list.append(' + '.join(user_mentions))
await ctx.send('Список браков:\n' + '\n'.join(marriage_list))
@bot.command()
async def развод(ctx, user2: discord.User):
user1 = ctx.author # Первый пользователь - тот, кто вызвал команду
marriage_to_remove = f'{user1.id} + {user2.id}'
# Прочитать список браков из файла
with open('marry.txt', 'r') as file:
marriages = file.read().splitlines()
found = False
for marriage in marriages:
if marriage == marriage_to_remove:
found = True
marriages.remove(marriage)
break
if found:
# Записать обновленный список браков в файл
with open('marry.txt', 'w') as file:
file.write('\n'.join(marriages))
await ctx.send(f'{user1.mention} развелся со своей парой {user2.mention}.')
else:
await ctx.send(f'Брак между вами и {user2.mention} не найден.')
@bot.command()
async def секс(ctx):
# Проверка наличия брака у пользователя
user = ctx.author
with open('marry.txt', 'r') as file:
marriages = file.read().splitlines()
marriages_with_user = [
marriage for marriage in marriages if str(user.id) in marriage
]
if len(marriages_with_user) < 1:
await ctx.send(f'{user.mention}, у вас нет брака.')
return
partner_id = None
for marriage in marriages_with_user:
user_ids = marriage.split(' + ')
if str(user.id) in user_ids:
# Находим ID партнера
partner_id = user_ids[0] if user_ids[1] == str(user.id) else user_ids[1]
if partner_id is None:
await ctx.send(f'{user.mention}, у вас нет брака.')
return
# Упоминание партнера
partner = ctx.guild.get_member(int(partner_id))
if partner:
love_images_to_send = [
"sex1.jpg", "sex2.jpg", "sex3.jpg", "sex4.jpg", "sex5.jpg", "sex6.jpg"
] # Определение списка изображений
love_image = random.choice(
love_images_to_send) # Выбираем случайное изображение
# Создаем Embed сообщение с указанием цвета
embed = discord.Embed(
description=f'{user.mention} занялся любовью с {partner.mention}',
color=0x2f3136)
# Устанавливаем изображение в Embed
embed.set_image(url=f'attachment://{love_image}')
# Отправляем Embed сообщение с прикрепленным файлом
await ctx.send(embed=embed, file=discord.File(love_image))
else:
await ctx.send(f'{user.mention}, у вас нет брака.')
@bot.command()
@commands.check(lambda ctx: ctx.channel.id == 1146479994697166918)
async def помощь(ctx):
commands_list = [
('**!репорт** <пользователь> <причина> — Отправить жалобу на игрока.'),
('**!личная рума** — Создает личную комнату при наличии 25.000 монет.'),
('**!balance** — Ваш баланс'), ('**!send** — Перевод денег'),
('**!shop** — Покупка персональных ролей'),
('**!duel** @пользователь сумма'), ('**!timely** — Ежедневная награда'),
('**!браки** — Выводит список браков.'),
('**!брак** @пользователь — Предложить брак пользователю.'),
('**!обнять** @пользователь — Обнять пользователя.'),
('**!укусить** @пользователь — Укусить пользователя.'),
('**!убить** @пользователь — Убить пользователя.'),
('**!поцеловать** @пользователь — Поцеловать пользователя.'),
('**!ударить** @пользователь — Ударить пользователя.'),
('**!выстрелить** @пользователь — Выстрелить в пользователя.')
]
embed = discord.Embed(
title='Список команд',
description='Список доступных команд бота:',
color=0x2f3136 # Цвет фона в формате HEX (#2f3136)
)
for command, description in commands_list:
embed.add_field(name=command, value=description, inline=False)
# Добавление картинки к эмбеду
embed.set_image(url='https://i.imgur.com/h6ZwyAO.png')
await ctx.send(embed=embed)
@bot.command()
async def аватар(ctx, member: discord.Member):
# Получаем URL аватара пользователя
avatar_url = member.avatar.url
# Создаем и отправляем эмбед с аватаром и сообщением
embed = discord.Embed(title=f"Аватар пользователя {member.name}",
color=0x2f3136)
embed.set_image(url=avatar_url)
await ctx.send(embed=embed)
@bot.command()
async def balance(ctx):
user_id = str(ctx.author.id)
cursor.execute('SELECT balance FROM economy WHERE user_id = ?', (user_id, ))
user_balance = cursor.fetchone()
if user_balance:
await ctx.send(
f'Баланс пользователя {ctx.author.mention}: {user_balance[0]} монеток')
else:
await ctx.send(f'Пользователь {ctx.author.mention} не имеет баланса.')
import datetime
@bot.command()
async def timely(ctx):
user_id = str(ctx.author.id)
# Подключаемся к базе данных
conn = sqlite3.connect('base.db')
cursor = conn.cursor()
# Проверяем, существует ли запись для пользователя в базе данных
cursor.execute('SELECT last_daily_reward FROM economy WHERE user_id = ?',
(user_id, ))
last_reward_date = cursor.fetchone()
# Получаем текущую дату
current_date = datetime.date.today()
if not last_reward_date or last_reward_date[0] != str(current_date):
# Если записи нет или последняя награда была не сегодня, начисляем 1000 монет
cursor.execute(
'INSERT OR REPLACE INTO economy (user_id, balance, last_daily_reward) VALUES (?, ?, ?)',
(user_id, 1000, str(current_date)))
conn.commit()
conn.close()
await ctx.send(
f'{ctx.author.mention}, вы получили ежедневную награду в размере 1000 монет.'
)
else:
conn.close()
await ctx.send(
f'{ctx.author.mention}, вы уже получили ежедневную награду сегодня.')
@bot.command()
@commands.has_permissions(administrator=True)
async def get(ctx, member: discord.Member, amount: int):
user_id = str(member.id)
cursor.execute('SELECT balance FROM economy WHERE user_id = ?', (user_id, ))
user_balance = cursor.fetchone()
if not user_balance:
await ctx.send(f'{member.mention} не имеет баланса.')
return
user_balance = user_balance[0]
new_balance = user_balance + amount
if new_balance < 0:
await ctx.send(
f'Вы не можете у пользователя {member.mention} убрать больше монет, чем у него есть.'
)
else:
cursor.execute('UPDATE economy SET balance = ? WHERE user_id = ?',
(new_balance, user_id))
conn.commit()
await ctx.send(
f'У пользователя {member.mention} теперь {new_balance} монет.')
@get.error
async def get_error(ctx, error):
if isinstance(error, commands.MissingPermissions):
await ctx.send('У вас нет прав для выполнения этой команды.')
@bot.command()
async def send(ctx, recipient: discord.User, amount: int):
sender_id = str(ctx.author.id)
recipient_id = str(recipient.id)
# Проверяем, что сумма для перевода положительная
if amount <= 0:
await ctx.send(
'Пожалуйста, укажите положительное количество монет для перевода.')
return
# Проверяем, есть ли у отправителя достаточное количество монет
conn = sqlite3.connect('base.db')
cursor = conn.cursor()
cursor.execute('SELECT balance FROM economy WHERE user_id = ?',
(sender_id, ))
sender_balance = cursor.fetchone()
if not sender_balance or sender_balance[0] < amount:
await ctx.send(
f'{ctx.author.mention}, у вас недостаточно средств для перевода {amount} монет.'
)
conn.close()
return
# Обновляем баланс отправителя
new_sender_balance = sender_balance[0] - amount
cursor.execute('UPDATE economy SET balance = ? WHERE user_id = ?',
(new_sender_balance, sender_id))
# Проверяем, есть ли запись для получателя в базе данных
cursor.execute('SELECT balance FROM economy WHERE user_id = ?',
(recipient_id, ))
recipient_balance = cursor.fetchone()
if not recipient_balance:
# Если записи нет, создаем ее с начальным балансом
cursor.execute('INSERT INTO economy (user_id, balance) VALUES (?, ?)',
(recipient_id, amount))
else:
# Если запись существует, обновляем ее баланс
new_recipient_balance = recipient_balance[0] + amount
cursor.execute('UPDATE economy SET balance = ? WHERE user_id = ?',
(new_recipient_balance, recipient_id))
# Сохраняем изменения в базе данных
conn.commit()
conn.close()
await ctx.send(
f'{ctx.author.mention} перевел {amount} монет пользователю {recipient.mention}.'
)
@bot.command()
async def duel(ctx, opponent: discord.User, amount: int):
if amount <= 0:
await ctx.send(
'Пожалуйста, укажите положительное количество монет для дуэли.')
return
sender_id = str(ctx.author.id)
recipient_id = str(opponent.id)
# Проверяем, что у отправителя достаточно монет
conn = sqlite3.connect('base.db')
cursor = conn.cursor()
cursor.execute('SELECT balance FROM economy WHERE user_id = ?',
(sender_id, ))
sender_balance = cursor.fetchone()
if not sender_balance or sender_balance[0] < amount:
await ctx.send(
f'{ctx.author.mention}, у вас недостаточно средств для дуэли на {amount} монет.'
)
conn.close()
return
# Проверяем, что у получателя достаточно монет
cursor.execute('SELECT balance FROM economy WHERE user_id = ?',
(recipient_id, ))
recipient_balance = cursor.fetchone()
if not recipient_balance or recipient_balance[0] < amount:
await ctx.send(
f'{opponent.mention} не имеет достаточного количества монет для дуэли на {amount} монет.'
)
conn.close()
return
# Отправляем запрос на дуэль
await ctx.send(
f'{opponent.mention}, {ctx.author.mention} предлагает вам дуэль на {amount} монет. Напишите !accept для принятия.'
)
# Ожидаем ответ от получателя
def check(message):
return message.author == opponent and message.content.lower() == '!accept'
try:
response = await bot.wait_for('message', timeout=60.0, check=check)
except asyncio.TimeoutError:
await ctx.send(f'{opponent.mention} не принял вашу дуэль. Дуэль отменена.')
conn.close()
return
# Генерируем случайного победителя
winner = random.choice([ctx.author, opponent])
if winner == ctx.author:
# Победитель - отправитель
new_sender_balance = sender_balance[0] + amount
new_recipient_balance = recipient_balance[0] - amount
winner_mention = ctx.author.mention
loser_mention = opponent.mention
else:
# Победитель - получатель
new_sender_balance = sender_balance[0] - amount
new_recipient_balance = recipient_balance[0] + amount
winner_mention = opponent.mention
loser_mention = ctx.author.mention
# Обновляем балансы в базе данных
cursor.execute('UPDATE economy SET balance = ? WHERE user_id = ?',
(new_sender_balance, sender_id))
cursor.execute('UPDATE economy SET balance = ? WHERE user_id = ?',
(new_recipient_balance, recipient_id))
conn.commit()
conn.close()
await ctx.send(
f'{winner_mention} выиграл дуэль и забрал {amount} монет от {loser_mention}.'
)
# В остальных командах для экономики также следует проверить наличие записи пользователя в базе данных и, при необходимости, создать ее.
keep_alive.keep_alive()
bot.run(
'MTExNDk0MzgyMzI5OTIxOTQ1Nw.GR5p9d.jP9wcL_SHtpoEuIjHXkZHao8PVmn4Kh-bdINss'
) # Замените токен_бота на токен вашего Discord-бота
Editor is loading...