11import os
22import asyncio
33import random
4+
45import discord
5- from discord .ext import commands
6+ from discord import Intents
7+ from discord .ext import commands , tasks
68
79from load_environment import load_environment
8- from bot_functions import discord_message_analysis
9- from bot_functions import bad_word_finder
10- from bot_functions import image_selection
11- from xur_destiny2 import is_xur_here
12- from xur_destiny2 import get_xur_location
10+ from bot_functions import discord_message_analysis , bad_word_finder , select_answer , image_selection
11+ from xur_destiny2 import XurChecker
1312
1413
1514load_environment ()
1817BOT_TOKEN = os .getenv ('BOT_TOKEN' )
1918PREFIX = '!'
2019
21- bot = commands .Bot (command_prefix = PREFIX )
20+ bot = commands .Bot (command_prefix = PREFIX , intents = Intents .all ())
21+ bot .intents .members = True
2222bot .remove_command ('help' )
2323
24+ xur_checker = XurChecker ()
25+
2426
2527@bot .event
2628async def on_ready ():
2729 print (f'{ bot .user .name } в сети.' )
30+ is_xur_arrived .start ()
2831
2932
3033@bot .event
@@ -33,7 +36,7 @@ async def on_member_join(member):
3336 f'Можешь ознакомиться со списком доступных команд !help и обязательно прочти наши !rules. '
3437 f'Мой баннхаммер не знает пощады!' )
3538
36- guest_role = discord .utils .get (member .guild .roles , name = 'Гость' )
39+ guest_role = discord .utils .get (member .guild .roles , id = 780843833817563166 )
3740 await member .add_roles (guest_role )
3841
3942
@@ -65,10 +68,12 @@ async def on_message(message):
6568 await message .channel .send (f'До скорого, { message_author .mention } !' )
6669 elif result == 'bad' :
6770 bad_word = bad_word_finder (message )
68- await message .channel .send (f'Так ты сам, { message_author .mention } , { bad_word } получается.' )
71+ answer = select_answer ()
72+ await message .channel .send (f'Выявлен нарушитель священного пункта № 1 правил Общества '
73+ f'в связи с использованием "{ bad_word } "!' )
74+ await message .channel .send (f'{ message_author .mention } { answer } ' )
6975 elif result == 'help' :
70- await message .channel .send (f'{ message_author .mention } , хочешь узнать список команд? '
71- f'Напиши !help в чат.' )
76+ await message .channel .send (f'{ message_author .mention } , хочешь узнать список команд? Напиши !help в чат.' )
7277
7378 await bot .process_commands (message )
7479
@@ -77,27 +82,53 @@ async def on_message(message):
7782async def help (ctx ):
7883 await ctx .channel .purge (limit = 1 )
7984
80- embed = discord .Embed (colour = discord .Color .gold (), title = 'Навигация по командам:' )
85+ embed = discord .Embed (
86+ colour = discord .Color .gold (),
87+ title = 'Навигация по командам:'
88+ )
89+
8190 embed .set_author (name = bot .user .name , icon_url = bot .user .avatar_url )
82- embed .add_field (name = f'{ PREFIX } help' , value = 'Выводит список команд.' )
83- embed .add_field (name = f'{ PREFIX } rules' , value = 'Выводит список правил сервера.' )
84- embed .add_field (name = f'{ PREFIX } boobs' , value = 'Безмерно радует всех Сиськолюбов.' )
85- embed .add_field (name = f'{ PREFIX } duel @target_name' , value = 'Позволяет вызвать на дуэль и испытать удачу. '
86- 'Проигравший отправляется в мут на 60 секунд.' )
91+
92+ embed .add_field (name = f'{ PREFIX } help' , value = 'Выводит список команд.' , inline = False )
93+ embed .add_field (name = f'{ PREFIX } rules' , value = 'Выводит список правил сервера.' , inline = False )
94+ embed .add_field (name = f'{ PREFIX } boobs' , value = 'Безмерно радует всех Сиськолюбов.' , inline = False )
95+ embed .add_field (name = f'{ PREFIX } xur' , value = 'Сообщает местонахождение Зура.' , inline = False )
96+ embed .add_field (name = f'{ PREFIX } duel @target_name' ,
97+ value = 'Позволяет вызвать на дуэль и испытать удачу. Проигравший отправляется в мут на 60 секунд.' ,
98+ inline = False )
8799
88100 await ctx .send (embed = embed )
89101
90102
91- @bot .command ()
103+ @bot .command (aliases = [ 'правила' , 'Правила' ] )
92104async def rules (ctx ):
93105 await ctx .channel .purge (limit = 1 )
94106
95- embed = discord .Embed (colour = discord .Color .gold (), title = 'Правила сервера:' )
96- embed .set_author (name = bot .user .name , icon_url = bot .user .avatar_url )
97- embed .add_field (name = '0.' , value = 'Всегда уважай Великий Разум!' , inline = True )
98- embed .add_field (name = '1.' , value = 'Мы здесь отдыхаем, поэтому будь дружелюбнее.' , inline = True )
99- embed .add_field (name = '2.' , value = 'Запрещено быть душным мудилой и говорить "можно скажу?" в голосовом чате.' ,
100- inline = True )
107+ embed = discord .Embed (
108+ colour = discord .Color .gold (),
109+ title = 'Правила сервера:'
110+ )
111+
112+ embed .set_author (
113+ name = bot .user .name ,
114+ icon_url = bot .user .avatar_url
115+ )
116+
117+ embed .add_field (
118+ name = 'Пункт № 0.' ,
119+ value = 'Всегда уважай Великий Разум!' ,
120+ inline = False
121+ )
122+ embed .add_field (
123+ name = 'Пункт № 1.' ,
124+ value = 'Мы здесь отдыхаем, поэтому будь дружелюбнее.' ,
125+ inline = False
126+ )
127+ embed .add_field (
128+ name = 'Пункт № 2.' ,
129+ value = 'Запрещено быть душным мудилой и говорить "можно скажу?" в голосовом чате.' ,
130+ inline = False
131+ )
101132
102133 await ctx .send (embed = embed )
103134
@@ -108,41 +139,41 @@ async def clear(ctx, amount_to_delete=2):
108139 await ctx .channel .purge (limit = amount_to_delete )
109140
110141
111- @bot .command (aliases = ['бан' ])
142+ @bot .command (aliases = ['бан' , 'Бан' ])
112143@commands .has_permissions (administrator = True )
113144async def mute (ctx , member : discord .Member ):
114145 await ctx .channel .purge (limit = 1 )
115146
116- mute_role = discord .utils .get (ctx .message .guild .roles , name = 'Заключенный' )
147+ mute_role = discord .utils .get (ctx .message .guild .roles , id = 780439303603355648 )
117148 await member .add_roles (mute_role )
118149
119150 await ctx .send (f'Великий Разум пожелал, чтобы { member .mention } немного помолчал.' )
120151 await member .send (f'Фреймы призваны помогать людям, поэтому я здесь. Тебя забанил { ctx .author .name } . '
121- f'Причина мне неизвестна, однако Великий Разум обратил на тебя своё внимание, это такая честь !' )
152+ f'Причина мне неизвестна, однако Великий Разум ничего не делает просто так !' )
122153
123154
124- @bot .command (aliases = ['разбан' ])
155+ @bot .command (aliases = ['разбан' , 'Разбан' ])
125156@commands .has_permissions (administrator = True )
126157async def unmute (ctx , member : discord .Member ):
127158 await ctx .channel .purge (limit = 1 )
128159
129- mute_role = discord .utils .get (ctx .message .guild .roles , name = 'Заключенный' )
160+ mute_role = discord .utils .get (ctx .message .guild .roles , id = 780439303603355648 )
130161 await member .remove_roles (mute_role )
131162
132163 await ctx .send (f'Великий Разум сжалился над { member .mention } и он снова может говорить.' )
133164 await member .send (f'Ты снова можешь говорить. '
134165 f'Пожалуйста, для твоего блага, постарайся больше не раздражать Великий Разум.' )
135166
136167
137- @bot .command ()
168+ @bot .command (aliases = [ 'дуэль' , 'Дуэль' ] )
138169async def duel (ctx , member : discord .Member ):
139170 await ctx .channel .purge (limit = 1 )
140171
141172 duelist1 = ctx .author .name
142173 duelist2 = member .name
143174 duelists = [duelist1 , duelist2 ]
144175
145- mute_role = discord .utils .get (ctx .message .guild .roles , name = 'Заключенный' )
176+ mute_role = discord .utils .get (ctx .message .guild .roles , id = 780439303603355648 )
146177
147178 await ctx .send (f'{ duelist1 } бросает перчатку вызова { duelist2 } . Приготовиться к дуэли! '
148179 f'Великий Разум назначил меня вашим секундантом.' )
@@ -172,36 +203,48 @@ async def duel(ctx, member: discord.Member):
172203async def boobs (ctx ):
173204 await ctx .channel .purge (limit = 1 )
174205
175- image = image_selection ()
206+ image_url = image_selection ()
207+
208+ embed = discord .Embed (
209+ colour = discord .Color .gold (),
210+ description = 'Решил порадовать друзей.'
211+ )
212+ embed .set_author (name = ctx .author .name , icon_url = ctx .author .avatar_url )
213+
214+ # Проверка URL изображения. Если длина менее 20 символов, значит изображение не спарсилось и нужно вывести ошибку.
215+ if len (image_url ) < 25 :
216+ embed .add_field (
217+ name = 'Но у него ничего не вышло!' ,
218+ value = 'Видимо, все девочки заняты, попробуй позже <:harold:970308021546795038>' ,
219+ inline = False
220+ )
221+ else :
222+ embed .set_image (url = image_url )
176223
177- await ctx .send (image )
178- await ctx .send (f'{ ctx .author .name } решил порадовать друзей.' )
224+ await ctx .send (embed = embed )
179225
180226
181227@bot .command (aliases = ['зур' , 'Зур' ])
182228async def xur (ctx ):
183229 await ctx .channel .purge (limit = 1 )
184230
185- xur_location = get_xur_location ()
231+ xur_location = xur_checker . get_xur_location ()
186232
187233 await ctx .send (f'{ ctx .author .mention } { xur_location } ' )
188234
189235
236+ @tasks .loop (hours = 1 )
190237async def is_xur_arrived ():
191238 await bot .wait_until_ready ()
192239 channel = bot .get_channel (int (CHANNEL_ID ))
193- message_sent = False
194-
195- while True :
196- if is_xur_here ():
197- if not message_sent :
198- xur_location = get_xur_location ()
199- await channel .send (f'{ xur_location } ' )
200- message_sent = True
201- if not is_xur_here ():
202- message_sent = False
203-
204- await asyncio .sleep (60 * 60 )
240+
241+ if xur_checker .is_xur_here ():
242+ if not xur_checker .message_is_sent :
243+ xur_location = xur_checker .get_xur_location ()
244+ await channel .send (f'{ xur_location } ' )
245+ xur_checker .message_is_sent = True
246+ if not xur_checker .is_xur_here ():
247+ xur_checker .message_is_sent = False
205248
206249
207250if __name__ == '__main__' :
0 commit comments