Untitled
unknown
plain_text
a year ago
28 kB
1
Indexable
Never
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-бота