Advertisement
yasi04

Untitled

Mar 24th, 2024 (edited)
520
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 10.98 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:
  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.     for role in message.author.roles:
  73.         c.execute("SELECT * FROM roles WHERE role=?", (role.id,))
  74.         result = c.fetchone()
  75.     if result:
  76.         if guest_checker(message):
  77.             await message.delete()
  78.             await message.channel.send(f'*Эта команда доступна только для авторизованных участников сервера, пожалуйста авторизуйтесь и получите роль "Участник"')
  79.         return
  80.     elif message.author == message.guild.owner:
  81.         return
  82.     elif message.author == bot.user:
  83.         await asyncio.sleep(120)
  84.         await message.delete()
  85.         return
  86.     elif message.author.bot:
  87.         return
  88.     else:
  89.         if message.content.startswith("http://") or message.content.startswith("https://"):
  90.             c.execute("SELECT filters FROM link_filters WHERE channel_id = ?", (message.channel.id,))
  91.             row = c.fetchone()
  92.             if row:
  93.                 filters = row[0].split(';')
  94.                 if link_checker(message):
  95.                     await message.delete()
  96.                     await message.channel.send(f"*В этом канале доступны только* `{filters}`, *Другое не разрешено XD*")
  97.                     return
  98.         else:
  99.             c.execute("SELECT filters FROM text_filters WHERE channel_id = ?", (message.channel.id,))
  100.             row = c.fetchone()
  101.             if row:
  102.                 text_filters = row[0].split(';')
  103.                 if text_checker(message):
  104.                     await message.delete()
  105.                     await message.channel.send(f"*В этом канале доступны только* `{text_filters}`, *Другое не разрешено XD*")
  106.                     return
  107.  
  108.     await bot.process_commands(message)
  109.  
  110.  
  111. @bot.slash_command(description="добавить текстовый фильтр")
  112. async def add_text_filter(ctx, channel_id: str, filter_text: str):
  113.     channel_id = int(channel_id)
  114.  
  115.     if ctx.author != ctx.guild.owner:
  116.         await ctx.send('Команда только для создателя')
  117.         return
  118.  
  119.     c.execute("SELECT filters FROM text_filters WHERE channel_id = ?", (channel_id,))
  120.     row = c.fetchone()
  121.     if row:
  122.         old_filters = row[0]
  123.         new_filters = old_filters + ";" + filter_text
  124.         c.execute("UPDATE text_filters SET filters = ? WHERE channel_id = ?", (new_filters, channel_id))
  125.         conn.commit()
  126.         await ctx.send('Готово')
  127.     else:
  128.         c.execute("INSERT INTO text_filters (channel_id, filters) VALUES (?, ?)", (channel_id, filter_text))
  129.         conn.commit()
  130.         await ctx.send('Готово')
  131.  
  132.  
  133. @bot.slash_command(description="добавить гостевой фильтр")
  134. async def add_guest_filter(ctx, filter_text: str):
  135.  
  136.     if ctx.author != ctx.guild.owner:
  137.         await ctx.send('Команда только для создателя')
  138.         return
  139.  
  140.     c.execute("SELECT filters FROM guest_filters WHERE server = ?", (1,))
  141.     row = c.fetchone()
  142.     if row:
  143.         old_filters = row[0]
  144.         new_filters = old_filters + ";" + filter_text
  145.         c.execute("UPDATE guest_filters SET filters = ? WHERE server = ?", (new_filters, 1))
  146.         conn.commit()
  147.         await ctx.send('Готово')
  148.     else:
  149.         c.execute("INSERT INTO guest_filters (server, filters) VALUES (?, ?)", (1, filter_text))
  150.         conn.commit()
  151.         await ctx.send('Готово')
  152.  
  153.  
  154. @bot.slash_command(description="добавить гостевые роли")
  155. async def add_guest_roles(ctx, role: disnake.Role):
  156.  
  157.     if ctx.author != ctx.guild.owner:
  158.         await ctx.send('Команда только для создателя')
  159.         return
  160.  
  161.     c.execute("INSERT INTO roles (role) VALUES (?)", (role.id,))
  162.     conn.commit()
  163.     await ctx.send('Готово')
  164.  
  165.  
  166. @bot.slash_command(description="удалить гостевые роли")
  167. async def delete_guest_roles(ctx, role: disnake.Role):
  168.  
  169.     if ctx.author != ctx.guild.owner:
  170.         await ctx.send('Команда только для создателя')
  171.         return
  172.  
  173.     c.execute("SELECT * FROM roles WHERE role=?", (role.id,))
  174.     result = c.fetchone()
  175.  
  176.     if result:
  177.         c.execute("DELETE FROM roles WHERE role=?", (role.id,))
  178.         conn.commit()
  179.         await ctx.send('Роль удалена из базы данных')
  180.     else:
  181.         await ctx.send('Роль не найдена в базе данных')
  182.  
  183.  
  184. @bot.slash_command(description="добавить ссылку в фильтр")
  185. async def add_link_filter(ctx, channel_id: str, filter_link: str):
  186.     channel_id = int(channel_id)
  187.  
  188.     if ctx.author != ctx.guild.owner:
  189.         await ctx.send('Команда только для создателя')
  190.         return
  191.  
  192.     c.execute("SELECT filters FROM link_filters WHERE channel_id = ?", (channel_id,))
  193.     row = c.fetchone()
  194.     if row:
  195.         old_filters = row[0]
  196.         new_filters = old_filters + ";" + filter_link
  197.         c.execute("UPDATE link_filters SET filters = ? WHERE channel_id = ?", (new_filters, channel_id))
  198.         conn.commit()
  199.         await ctx.send('Готово')
  200.     else:
  201.         c.execute("INSERT INTO link_filters (channel_id, filters) VALUES (?, ?)", (channel_id, filter_link))
  202.         conn.commit()
  203.         await ctx.send('Готово')
  204.  
  205.  
  206. @bot.slash_command(description="удалить текстовый фильтр (выбор)")
  207. async def delete_filter(ctx, channel_id: str, filters: str):
  208.     channel_id = int(channel_id)
  209.  
  210.     if ctx.author != ctx.guild.owner:
  211.         await ctx.send('Команда только для создателя')
  212.         return
  213.  
  214.     c.execute("SELECT filters FROM text_filters WHERE channel_id = ?", (channel_id,))
  215.     row = c.fetchone()
  216.     if row:
  217.         text_filters = row[0].split(';')
  218.         new_text_filters = [filter_word for filter_word in text_filters if filter_word not in filters.split(';')]
  219.         new_text_filters_str = ';'.join(new_text_filters)
  220.         c.execute("UPDATE text_filters SET filters = ? WHERE channel_id = ?", (new_text_filters_str, channel_id))
  221.         conn.commit()
  222.  
  223.         await ctx.send('Готово')
  224.     else:
  225.         await ctx.send('Фильтров для этого канала и не было')
  226.  
  227.  
  228. @bot.slash_command(description="удалить гостевой фильтр (выбор)")
  229. async def delete_guest_filter(ctx, filters: str):
  230.  
  231.     if ctx.author != ctx.guild.owner:
  232.         await ctx.send('Команда только для создателя')
  233.         return
  234.  
  235.     c.execute("SELECT filters FROM guest_filters WHERE server = ?", (1,))
  236.     row = c.fetchone()
  237.     if row:
  238.         text_filters = row[0].split(';')
  239.         new_text_filters = [filter_word for filter_word in text_filters if filter_word not in filters.split(';')]
  240.         new_text_filters_str = ';'.join(new_text_filters)
  241.         c.execute("UPDATE guest_filters SET filters = ? WHERE server = ?", (new_text_filters_str, 1))
  242.         conn.commit()
  243.  
  244.         await ctx.send('Готово')
  245.     else:
  246.         await ctx.send('Фильтров и не было')
  247.  
  248.  
  249. @bot.slash_command(description="удалить фильтр ссылок (выбор)")
  250. async def delete_link_filter(ctx, channel_id: str, filters: str):
  251.     channel_id = int(channel_id)
  252.  
  253.     if ctx.author != ctx.guild.owner:
  254.         await ctx.send('Команда только для создателя')
  255.         return
  256.  
  257.     c.execute("SELECT filters FROM link_filters WHERE channel_id = ?", (channel_id,))
  258.     row = c.fetchone()
  259.     if row:
  260.         link_filters = row[0].split(';')
  261.         new_link_filters = [filter_link for filter_link in link_filters if filter_link not in filters.split(';')]
  262.         new_link_filters_str = ';'.join(new_link_filters)
  263.         c.execute("UPDATE link_filters SET filters = ? WHERE channel_id = ?", (new_link_filters_str, channel_id))
  264.         conn.commit()
  265.  
  266.         await ctx.send('Готово')
  267.     else:
  268.         await ctx.send('Фильтров для этого канала и не было')
  269.  
  270.  
  271. @bot.slash_command(description="удалить все фильтры для канала")
  272. async def delete_all_filters(ctx, channel_id: str):
  273.     channel_id = int(channel_id)
  274.  
  275.     if ctx.author != ctx.guild.owner:
  276.         await ctx.send('Команда только для создателя')
  277.         return
  278.  
  279.     c.execute("DELETE FROM text_filters WHERE channel_id = ?", (channel_id,))
  280.     c.execute("DELETE FROM link_filters WHERE channel_id = ?", (channel_id,))
  281.     conn.commit()
  282.  
  283.     await ctx.send('Готово')
  284.  
  285.  
  286. @bot.slash_command(description="удалить все фильтры для канала")
  287. async def delete_all_guest_filters(ctx):
  288.  
  289.     if ctx.author != ctx.guild.owner:
  290.         await ctx.send('Команда только для создателя')
  291.         return
  292.  
  293.     c.execute("DELETE FROM guest_filters WHERE server= ?", (1,))
  294.     conn.commit()
  295.  
  296.     await ctx.send('Готово')
  297.  
  298.  
  299. bot.run(os.getenv('TOKEN'))
  300.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement