Advertisement
yasi04

Untitled

Mar 24th, 2024 (edited)
439
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 11.14 KB | None | 0 0
  1. import os
  2. from dotenv import load_dotenv
  3. import disnake
  4. import asyncio
  5. import sqlite3
  6. from disnake.ext import commands
  7.  
  8. load_dotenv()
  9.  
  10. bot = commands.Bot(command_prefix="!", help_command=None, intents=disnake.Intents.all())
  11.  
  12. conn = sqlite3.connect('filters.db')
  13. c = conn.cursor()
  14.  
  15. c.execute('''CREATE TABLE IF NOT EXISTS text_filters
  16.             (channel_id INTEGER PRIMARY KEY, filters TEXT)''')
  17.  
  18. c.execute('''CREATE TABLE IF NOT EXISTS link_filters
  19.             (channel_id INTEGER PRIMARY KEY, filters TEXT)''')
  20.  
  21. c.execute('''CREATE TABLE IF NOT EXISTS roles
  22.             (role TEXT)''')
  23.  
  24. c.execute('''CREATE TABLE IF NOT EXISTS guest_filters
  25.             (server INTEGER PRIMARY KEY, filters TEXT)''')
  26.  
  27. conn.commit()
  28.  
  29.  
  30. def link_checker(message):
  31.     c.execute("SELECT filters FROM link_filters WHERE channel_id = ?", (message.channel.id,))
  32.     row = c.fetchone()
  33.     if row:
  34.         filters = row[0].split(';')
  35.         if message.content.startswith("http://") or message.content.startswith("https://"):
  36.             flag = True
  37.             for word in filters:
  38.                 if word == message.content.split('/')[2]:
  39.                     flag = False
  40.             return flag
  41.  
  42.  
  43. def text_checker(message):
  44.     c.execute("SELECT filters FROM text_filters WHERE channel_id = ?", (message.channel.id,))
  45.     row = c.fetchone()
  46.     if row:
  47.         text_filters = row[0].split(';')
  48.         flag = True
  49.         if message.content.split(' ')[0] in text_filters:
  50.             flag = False
  51.         return flag
  52.  
  53.  
  54. def guest_checker(message):
  55.     c.execute("SELECT filters FROM guest_filters WHERE server = ?", (1,))
  56.     row = c.fetchone()
  57.     if row:
  58.         guest_filters = row[0].split(';')
  59.         flag = False
  60.         if (message.content.split(' ')[0] in guest_filters) or ('/' in message.content):
  61.             flag = True
  62.         return flag
  63.  
  64.  
  65. @bot.event
  66. async def on_ready():
  67.     print(f"Bot {bot.user} is ready to work!")
  68.  
  69.  
  70. @bot.event
  71. async def on_message(message):
  72.     result = False
  73.     if not message.author.bot:
  74.         for role in message.author.roles:
  75.             print(role, role.id)
  76.             c.execute("SELECT * FROM roles WHERE role=?", (role.id,))
  77.             result = c.fetchone()
  78.             if result:
  79.                 break
  80.     if result:
  81.         if guest_checker(message):
  82.             await message.delete()
  83.             await message.channel.send(f'*Эта команда доступна только для авторизованных участников сервера, пожалуйста авторизуйтесь и получите роль "Участник"')
  84.         return
  85.     elif message.author == message.guild.owner:
  86.         return
  87.     elif message.author == bot.user:
  88.         await asyncio.sleep(120)
  89.         await message.delete()
  90.         return
  91.     elif message.author.bot:
  92.         return
  93.     else:
  94.         if message.content.startswith("http://") or message.content.startswith("https://"):
  95.             c.execute("SELECT filters FROM link_filters WHERE channel_id = ?", (message.channel.id,))
  96.             row = c.fetchone()
  97.             if row:
  98.                 filters = row[0].split(';')
  99.                 if link_checker(message):
  100.                     await message.delete()
  101.                     await message.channel.send(f"*В этом канале доступны только* `{filters}`, *Другое не разрешено XD*")
  102.                     return
  103.         else:
  104.             c.execute("SELECT filters FROM text_filters WHERE channel_id = ?", (message.channel.id,))
  105.             row = c.fetchone()
  106.             if row:
  107.                 text_filters = row[0].split(';')
  108.                 if text_checker(message):
  109.                     await message.delete()
  110.                     await message.channel.send(f"*В этом канале доступны только* `{text_filters}`, *Другое не разрешено XD*")
  111.                     return
  112.  
  113.     await bot.process_commands(message)
  114.  
  115.  
  116. @bot.slash_command(description="добавить текстовый фильтр")
  117. async def add_text_filter(ctx, channel_id: str, filter_text: str):
  118.     channel_id = int(channel_id)
  119.  
  120.     if ctx.author != ctx.guild.owner:
  121.         await ctx.send('Команда только для создателя')
  122.         return
  123.  
  124.     c.execute("SELECT filters FROM text_filters WHERE channel_id = ?", (channel_id,))
  125.     row = c.fetchone()
  126.     if row:
  127.         old_filters = row[0]
  128.         new_filters = old_filters + ";" + filter_text
  129.         c.execute("UPDATE text_filters SET filters = ? WHERE channel_id = ?", (new_filters, channel_id))
  130.         conn.commit()
  131.         await ctx.send('Готово')
  132.     else:
  133.         c.execute("INSERT INTO text_filters (channel_id, filters) VALUES (?, ?)", (channel_id, filter_text))
  134.         conn.commit()
  135.         await ctx.send('Готово')
  136.  
  137.  
  138. @bot.slash_command(description="добавить гостевой фильтр")
  139. async def add_guest_filter(ctx, filter_text: str):
  140.  
  141.     if ctx.author != ctx.guild.owner:
  142.         await ctx.send('Команда только для создателя')
  143.         return
  144.  
  145.     c.execute("SELECT filters FROM guest_filters WHERE server = ?", (1,))
  146.     row = c.fetchone()
  147.     if row:
  148.         old_filters = row[0]
  149.         new_filters = old_filters + ";" + filter_text
  150.         c.execute("UPDATE guest_filters SET filters = ? WHERE server = ?", (new_filters, 1))
  151.         conn.commit()
  152.         await ctx.send('Готово')
  153.     else:
  154.         c.execute("INSERT INTO guest_filters (server, filters) VALUES (?, ?)", (1, filter_text))
  155.         conn.commit()
  156.         await ctx.send('Готово')
  157.  
  158.  
  159. @bot.slash_command(description="добавить гостевые роли")
  160. async def add_guest_roles(ctx, role: disnake.Role):
  161.  
  162.     if ctx.author != ctx.guild.owner:
  163.         await ctx.send('Команда только для создателя')
  164.         return
  165.  
  166.     c.execute("INSERT INTO roles (role) VALUES (?)", (role.id,))
  167.     conn.commit()
  168.     await ctx.send('Готово')
  169.  
  170.  
  171. @bot.slash_command(description="удалить гостевые роли")
  172. async def delete_guest_roles(ctx, role: disnake.Role):
  173.  
  174.     if ctx.author != ctx.guild.owner:
  175.         await ctx.send('Команда только для создателя')
  176.         return
  177.  
  178.     c.execute("SELECT * FROM roles WHERE role=?", (role.id,))
  179.     result = c.fetchone()
  180.  
  181.     if result:
  182.         c.execute("DELETE FROM roles WHERE role=?", (role.id,))
  183.         conn.commit()
  184.         await ctx.send('Роль удалена из базы данных')
  185.     else:
  186.         await ctx.send('Роль не найдена в базе данных')
  187.  
  188.  
  189. @bot.slash_command(description="добавить ссылку в фильтр")
  190. async def add_link_filter(ctx, channel_id: str, filter_link: str):
  191.     channel_id = int(channel_id)
  192.  
  193.     if ctx.author != ctx.guild.owner:
  194.         await ctx.send('Команда только для создателя')
  195.         return
  196.  
  197.     c.execute("SELECT filters FROM link_filters WHERE channel_id = ?", (channel_id,))
  198.     row = c.fetchone()
  199.     if row:
  200.         old_filters = row[0]
  201.         new_filters = old_filters + ";" + filter_link
  202.         c.execute("UPDATE link_filters SET filters = ? WHERE channel_id = ?", (new_filters, channel_id))
  203.         conn.commit()
  204.         await ctx.send('Готово')
  205.     else:
  206.         c.execute("INSERT INTO link_filters (channel_id, filters) VALUES (?, ?)", (channel_id, filter_link))
  207.         conn.commit()
  208.         await ctx.send('Готово')
  209.  
  210.  
  211. @bot.slash_command(description="удалить текстовый фильтр (выбор)")
  212. async def delete_filter(ctx, channel_id: str, filters: str):
  213.     channel_id = int(channel_id)
  214.  
  215.     if ctx.author != ctx.guild.owner:
  216.         await ctx.send('Команда только для создателя')
  217.         return
  218.  
  219.     c.execute("SELECT filters FROM text_filters WHERE channel_id = ?", (channel_id,))
  220.     row = c.fetchone()
  221.     if row:
  222.         text_filters = row[0].split(';')
  223.         new_text_filters = [filter_word for filter_word in text_filters if filter_word not in filters.split(';')]
  224.         new_text_filters_str = ';'.join(new_text_filters)
  225.         c.execute("UPDATE text_filters SET filters = ? WHERE channel_id = ?", (new_text_filters_str, channel_id))
  226.         conn.commit()
  227.  
  228.         await ctx.send('Готово')
  229.     else:
  230.         await ctx.send('Фильтров для этого канала и не было')
  231.  
  232.  
  233. @bot.slash_command(description="удалить гостевой фильтр (выбор)")
  234. async def delete_guest_filter(ctx, filters: str):
  235.  
  236.     if ctx.author != ctx.guild.owner:
  237.         await ctx.send('Команда только для создателя')
  238.         return
  239.  
  240.     c.execute("SELECT filters FROM guest_filters WHERE server = ?", (1,))
  241.     row = c.fetchone()
  242.     if row:
  243.         text_filters = row[0].split(';')
  244.         new_text_filters = [filter_word for filter_word in text_filters if filter_word not in filters.split(';')]
  245.         new_text_filters_str = ';'.join(new_text_filters)
  246.         c.execute("UPDATE guest_filters SET filters = ? WHERE server = ?", (new_text_filters_str, 1))
  247.         conn.commit()
  248.  
  249.         await ctx.send('Готово')
  250.     else:
  251.         await ctx.send('Фильтров и не было')
  252.  
  253.  
  254. @bot.slash_command(description="удалить фильтр ссылок (выбор)")
  255. async def delete_link_filter(ctx, channel_id: str, filters: str):
  256.     channel_id = int(channel_id)
  257.  
  258.     if ctx.author != ctx.guild.owner:
  259.         await ctx.send('Команда только для создателя')
  260.         return
  261.  
  262.     c.execute("SELECT filters FROM link_filters WHERE channel_id = ?", (channel_id,))
  263.     row = c.fetchone()
  264.     if row:
  265.         link_filters = row[0].split(';')
  266.         new_link_filters = [filter_link for filter_link in link_filters if filter_link not in filters.split(';')]
  267.         new_link_filters_str = ';'.join(new_link_filters)
  268.         c.execute("UPDATE link_filters SET filters = ? WHERE channel_id = ?", (new_link_filters_str, channel_id))
  269.         conn.commit()
  270.  
  271.         await ctx.send('Готово')
  272.     else:
  273.         await ctx.send('Фильтров для этого канала и не было')
  274.  
  275.  
  276. @bot.slash_command(description="удалить все фильтры для канала")
  277. async def delete_all_filters(ctx, channel_id: str):
  278.     channel_id = int(channel_id)
  279.  
  280.     if ctx.author != ctx.guild.owner:
  281.         await ctx.send('Команда только для создателя')
  282.         return
  283.  
  284.     c.execute("DELETE FROM text_filters WHERE channel_id = ?", (channel_id,))
  285.     c.execute("DELETE FROM link_filters WHERE channel_id = ?", (channel_id,))
  286.     conn.commit()
  287.  
  288.     await ctx.send('Готово')
  289.  
  290.  
  291. @bot.slash_command(description="удалить все фильтры гостей")
  292. async def delete_all_guest_filters(ctx):
  293.  
  294.     if ctx.author != ctx.guild.owner:
  295.         await ctx.send('Команда только для создателя')
  296.         return
  297.  
  298.     c.execute("DELETE FROM guest_filters WHERE server= ?", (1,))
  299.     conn.commit()
  300.  
  301.     await ctx.send('Готово')
  302.  
  303.  
  304. bot.run(os.getenv('TOKEN'))
  305.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement