· 5 years ago · Aug 24, 2020, 07:18 AM
1import discord
2from discord.ext import commands
3
4#database
5
6import sqlite3
7
8connection = sqlite3.connect('server.db')
9cursor = connection.cursor()
10
11#other
12
13import pyowm
14import asyncio
15import requests
16import datetime
17from datetime import datetime
18from requests import get
19import json
20import random
21
22#config
23
24import config
25from config import settings
26
27#initialize
28
29client = commands.Bot(command_prefix = settings['PREFIX'])
30
31#on_ready
32
33@client.event
34async def on_ready():
35 print('[log] Бот подключен к API \n[log] Бот подключен к базе даннвх')
36 cursor.execute("""CREATE TABLE IF NOT EXISTS users (
37 name TEXT,
38 id INT,
39 cash BIGINT,
40 rep INT,
41 lvl INT,
42 server_id INT
43 )""")
44 for guild in client.guilds:
45 for member in guild.members:
46 if cursor.execute(f"SELECT id FROM users WHERE id = {member.id}").fetchone() is None:
47 cursor.execute(f"INSERT INTO users VALUES ('{member}', {member.id}, 0, 0, 0, {guild.id})")
48 else:
49 pass
50
51 connection.commit()
52
53@client.event
54async def on_member_join():
55 if cursor.execute(f"SELECT id FROM users WHERE id = {member.id}").fetchone() is None:
56 cursor.execute(f"INSERT INTO users VALUES ('{member}', {member.id}, 0, 0, 0, {guild.id})")
57 connection.commit()
58 else:
59 pass
60
61@client.event
62async def on_guild_join():
63 server = ctx.message.server
64 perms = discord.Permissions(send_messages=False, read_messages=True)
65 await client.create_role(server, name='Гы, ты заглушён(замьючен)', permissions=perms)
66
67#commands
68
69#clear
70
71@client.command(aliases = ['очистить', 'clean'])
72@commands.has_permissions(administrator = True)
73async def clear(ctx, amount = 10):
74
75 amount2 = amount
76 amount = amount + 1
77
78 await ctx.channel.purge(limit = amount)
79
80 emb = discord.Embed(
81 title = "Очистка сообщений",
82 description = f":white_check_mark: | Очищено {amount2} сообщений"
83 )
84
85 await ctx.send(embed = emb)
86
87@client.command()
88async def weather(ctx, *, place):
89 data = get(f"http://api.openweathermap.org/data/2.5/weather?q={place}&units=metric&APPID=873253fe1a98b9868f44944286197699&lang=ru").json()
90 cleared_data = {
91 'Место': data['name'],
92 'Погода': f"{data['weather'][0]['description']}",
93 'Температура': f"{data['main']['temp']}°C",
94 'Ощущаеться как': f"{data['main']['feels_like']}°C",
95 'Минимальная температура': f"{data['main']['temp_min']}°C",
96 'Макисмальная температура': f"{data['main']['temp_max']}°C",
97 'Влажность': f"{data['main']['humidity']}%",
98 'Облака': f"{data['clouds']['all']}%",
99 'Ветер': f"{data['wind']['speed']} м/с",
100 }
101 embed = discord.Embed(title = f":white_sun_small_cloud: Погода в {cleared_data['Место']}", color = 0x3498db)
102 for key, value in cleared_data.items():
103 embed.add_field(name = key, value = value)
104 await ctx.send(embed = embed)
105
106@client.command(aliases = ['кик', 'кикнуть', 'выгнать'])
107@commands.has_permissions(administrator = True)
108async def kick(ctx, member: discord.Member, *, reason: str = None):
109
110 if reason == None:
111 reason = "Походу нарушил правило, или я не знаю"
112
113 await member.kick(reason = reason)
114
115 emb = discord.Embed(
116 title = "Кик | Выгнать",
117 description = f"Участник {member} был кикнут"
118 )
119 emb.add_field(
120 name = "Причина",
121 value = reason
122 )
123
124 await ctx.send(embed = emb)
125
126@client.command(aliases = ['блок', 'бан', 'забанить'])
127@commands.has_permissions(administrator = True)
128async def ban(ctx, member: discord.Member, *, reason: int = None):
129
130 if reason == None:
131 reason = "Я не знаю, причину не указали, увы"
132
133 await member.ban(reason = reason)
134
135 emb = discord.Embed(
136 title = "Бан | Заблокировать",
137 description = f"Участник {member} был забанен"
138 )
139 emb.add_field(
140 name = "Причина",
141 value = reason
142 )
143
144 await ctx.send(embed = emb)
145
146@client.command(aliases = ['мьют', 'замьютить', 'заглушить', 'mute_user', 'mute_member'])
147@commands.has_permissions(manage_roles = True)
148async def mute(ctx, member: discord.Member, reason: str = None):
149
150 if reason == None:
151 reason = "Я хз, если честно, вы причину не указали"
152
153 mute_role = discord.utils.get(ctx.message.guild.roles, name = 'Гы, ты заглушён(замьючен)')
154 await member.add_roles(mute_role)
155
156 emb = discord.Embed(
157 title = "Мьют | Заглушить",
158 description = f"Участник {member} теперь не может писать"
159 )
160 emb.add_field(
161 name = "Причина",
162 value = reason
163 )
164
165 await ctx.send(embed = emb)
166
167@client.command(aliases = ['анмьют', 'отмьютить', 'отглушить', 'unmute_user', 'unmute_member'])
168@commands.has_permissions(manage_roles = True)
169async def unmute(ctx, member: discord.Member, reason: str = None):
170
171 if reason == None:
172 reason = "Я хз, если честно, вы причину не указали"
173
174 mute_role = discord.utils.get(ctx.message.guild.roles, name = 'Гы, ты заглушён(замьючен)')
175 await member.remove_roles(mute_role)
176
177 emb = discord.Embed(
178 title = "Мьют | Заглушить",
179 description = f"Участник {member} теперь не может писать"
180 )
181 emb.add_field(
182 name = "Причина",
183 value = reason
184 )
185
186 await ctx.send(embed = emb)
187
188@client.command(aliases = ['balance', 'cash'])
189async def bal(ctx, member: discord.Member = None):
190 if member is None:
191 await ctx.send(embed = discord.Embed(
192 description = f"""Баланс пользователя **{ctx.author}** составляет **{cursor.execute("SELECT cash FROM users WHERE id = {}".format(ctx.author.id)).fetchone()[0]} :leaves:**"""
193 ))
194
195 else:
196 await ctx.send(embed = discord.Embed(
197 description = f"""Баланс пользователя **{member}** составляет **{cursor.execute("SELECT cash FROM users WHERE id = {}".format(member.id)).fetchone()[0]} :gem:**"""
198 ))
199
200@client.command(aliases = ['add-cash', 'award', 'cheat']
201@commands.has_permissions(administrator = True)
202async def addcash(ctx, member: discord.Member = None, amount: int = None):
203 if member is None:
204 await ctx.send(embed = discord.Embed(
205 title = "Добавить валюту | Ошибка",
206 description = f"Укажите @участника которого хотите наградить"
207 ))
208 else:
209 if amount is None:
210 await ctx.send(embed = discord.Embed(
211 title = "Добавить валюту | Ошибка",
212 description = "Пожалуйста укажите сумму"
213 ))
214 elif amount < 1:
215 await ctx.send(f"**{ctx.author}**, укажите сумму больше 1 :gem:")
216 else:
217 cursor.execute("UPDATE users SET cash = cash + {} WHERE id = {}".format(amount, member.id))
218 connection.commit()
219 await ctx.send(embed = discord.Embed(
220 title = "Добавить валюту",
221 description = f"{ctx.author} добавил {amount} :gem: пользователю {member}"
222 ))
223
224#run
225
226client.run(settings['TOKEN'])