Advertisement
yasi04

Untitled

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