Advertisement
yasi04

Untitled

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