ServerQuerier
ждет от вас что вы передадите ему аргумент address
в виде кортежа('ip', port).from valve.source.a2s import *
address = ('212.22.85.2', 27015)
with ServerQuerier(address, timeout=5.0) as server:
print(server.info()["server_name"])
>> PostBellum HL2 RP | Русский Half-Life 2 Roleplay
pip install python-a2s
более свежий и более легковесный пакет для этих целей.import a2s
address = ('37.18.21.235', 27022)
print(a2s.info(address, timeout=4))
file1 = drive.CreateFile()
file1.Upload()
# Insert the permission.
permission = file1.InsertPermission({
'type': 'anyone',
'value': 'anyone',
'role': 'reader'})
print(file1['alternateLink']) # Display the sharable link.
%f
принимает значение от 1 до 6 символов, и это та причина, по которой вы получаете ошибку.datetime.strptime("2022-04-27T19:39:14.856697+03:00", "%Y-%m-%dT%H:%M:%S.%f%z")
>> 2022-04-27 19:39:14.856970+03:00
datetime.strptime("2022-04-27T19:39:14.856697Z", "%Y-%m-%dT%H:%M:%S.%f%z")
>> 2022-04-27 19:39:14.856697+00:00
dateutil.parser
.import dateutil.parser as dparser
print("{}".format(dparser.parse("2022-04-27T19:39:14.856697021Z", fuzzy=True)))
>> 2022-04-27 19:39:14.856697+00:00
class Verify(disnake.ui.View):
def __init__(self):
super().__init__(timeout=180)
self.db = database.DataBase()
@disnake.ui.button(label="",style=disnake.ButtonStyle.gray, emoji="", disabled=False)
async def my_button(self, button: disnake.ui.Button, interaction: disnake.Interaction):
role = disnake.utils.get(bot.guilds[0].roles, id=1234567890) # Получаем роль.
await interaction.author.add_roles(role) # Выдаем роль.
await interaction.response.send_message("Done", ephemeral=True)
async def no_respond(inter: disnake.Interaction) -> None:
try:
await inter.response.send_message('', ephemeral=True)
except Exception:
pass
@client.event
async def on_member_join(member):
guild = client.get_guild(321321321)
channel = guild.get_channel(123123123)
embed = discord.Embed(title="Добро пожаловать!", description=f"На наш сервер залетел {member.mention}!",
color=0xCC974F)
embed.set_thumbnail(url=member.avatar_url)
await channel.send(embed=embed)
communication_disabled_until
bot.session = aiohttp.ClientSession()
@bot.command()
async def habr(ctx: commands.Context, member: discord.Member, time: int):
# Авторизация бота.
headers = {"Authorization": f"Bot {bot.http.token}"}
url = f"https://discord.com/api/v9/guilds/{ctx.guild.id}/members/{member.id}"
# Расчет времени "отправки на покушать.". Получаем время именно по utcnow.
# В противном случае, рискуем отправить человека кушать до конца времен. Ну почти.
timeout = (datetime.datetime.utcnow() + datetime.timedelta(minutes=time)).isoformat()
json = {'communication_disabled_until': timeout}
# Отправка запроса.
async with bot.session.patch(url, json=json, headers=headers) as session:
if session.status == 200:
await ctx.send(f'Пользователь {member.mention} пошел кушать на {time} минут.')
await ctx.send(f'Воу-воу! Этого пользователя нельзя отправить кушать')
# Объявляем глобальную переменную, в которой будет лежать последнее сообщение.
my_message = None
@bot.event
async def on_message(message):
global my_message
# Если автор сообщения не бот и содержания сообщения соответствует хранимому сообщению, отправляем его.
if message.author != bot.user:
if my_message == message.content:
await message.channel.send(message.content)
my_message = message.content
await bot.process_commands(message)
ctx
, не имеет атрибута member
ctx
должен быть передан первым.@bot.command()
async def test(ctx, member: discord.Member):
await ctx.send(f'{ctx.author.name} грустит вместе с {member.name}')
class DataBase:
def __init__(self, db_file):
self.conn = sqlite3.connect(db_file)
self.cur = self.conn.cursor()
# Аргумент arg принимает только кортежи(tuple), иначе ошибка.
def add_check(self, arg: tuple):
self.cur.execute("INSERT INTO check VALUES(?, ?);", arg)
self.conn.commit()
# Создаем экземпляр класса, с указанием на БД.
db = DataBase('bot_base.db')
# Передаем методу класса add_check кортеж состоящий из user_id и bill_id
db.add_check((user_id, bill_id))
@bot.event
async def on_message(message):
if message.author != bot.user: # Если автор сообщения НЕ бот.
if {i.lower().translate(str.maketrans('', '', string.punctuation)) for i in message.content.split(' ')} \
.intersection(set(json.load(open('slyhi.json')))) != set():
channel = bot.get_channel(894897187593551892)
await channel.send(f'[Выхваченное Сообщение]:~/// {message.author.mention}: {message.content}')
await bot.process_commands(message)
channels = [1231234234, 1231231234]
if message.channel.id in channels:
do_something()
@client.command(pass_context=True)
@commands.has_any_role(860824791610032189, 876086379665301534)
async def mute( ctx, member: discord.Member, time: int):
emb = discord.Embed(title="Участник Был Замучен!", colour=discord.Color.blue())
await ctx.channel.purge(limit=1)
emb.set_author(name=member.name, icon_url=member.avatar_url )
emb.set_footer(text="Его замутил {}".format(ctx.author.name ), icon_url=ctx.author.avatar_url )
await ctx.send(embed=emb)
muted_role = discord.utils.get(ctx.message.guild.roles, name="Muted")
await member.add_roles(muted_role)
# Спим X секунд, перед тем как снять роль.
await asyncio.sleep(time)
# Снимаем роль замученного.
await member.remove_roles(muted_role)
@bot.command()
async def test(ctx):
emb = discord.Embed(title="Image", colour=discord.Color.purple()) # Инициализируем Embed, который будет изменен.
emb.set_image(url='https://i.imgur.com/mtKT52F.jpeg') # Прикрепляем к Embed'у изображение из интернетов.
res = await ctx.send(embed=emb)
new_emb = res.embeds[0] # Получаем наш Embed из первого сообщения.
file = discord.File('ImageInPc.png', filename="ImageToDiscord.png")
img_msg = await ctx.send(file=file) # Отправляем картинку в канал, чтобы после этого получить на нее ссылку.
await asyncio.sleep(5) # Спим для наглядности.
new_emb.set_image(url=img_msg.attachments[0].url) # img_msg.attachments[0].url - Искомая ссылка на файл.
await res.edit(embed=new_emb) # Отправляем наш измененный Embed.
from_dict()
emb_json = json.load(embed_file)
emb = discord.Embed.from_dict(emb_json)
await ctx.send(embed=emb)
@bot.command()
async def habr(ctx, arg=None):
await ctx.message.delete() # Удаляем наше сообщение.
emb = discord.Embed(title="Хабр", colour=discord.Color.orange()) # Инициализируем эмбед.
emb.add_field(name='Первое поле', value=f'Реально же первое!') # Добавляем поле.
msg = await ctx.send(embed=emb) # Отправляем сообщение и запоминаем что оно такое красивое есть.
await asyncio.sleep(2)
emb = msg.embeds[0] # Выдергиваем с нашего отправленного сообщения эмбед и пересобираем его так, как нужно нам.
for i, item in enumerate(emb.fields): # Перебираем поля в эмбеде. i - индекс(позиция); item - содержание.
if arg: # Если есть аргумент, то добавляем его в наше новое поле.
emb.add_field(name='Второе поле', value=f'{arg}')
else: # Если аргумента нету, то редактируем наше первое поле.
if "Первое поле" in item.name:
emb.set_field_at(index=i, name=item.name, value='Без аргумента? Жаль.', inline=item.inline)
await msg.edit(embed=emb) # Отправляем отредактированное сообщение.
@bot.event
async def on_message(message):
if int(message.channel.id) == 1234567890: # ID-канала в котором будут сообщения для отправки.
content = message.content # Получаем содержание сообщения.
await message.delete() # Удаляем отправленное сообщение.
channel = bot.get_channel(1234567890) # ID-канала куда будут отправлены сообщения.
await channel.send(content) # Отправка сообщения с содержанием в нужный нам канал.
@bot.command(pass_context = True)
@commands.has_permissions(administrator = True)
async def checkuser_user(ctx, arg):
await ctx.channel.send('Please, wait')
# Пребираем все пользователей на сервере.
for guild in bot.guilds:
for member in guild.members:
# Сравниваем введенный ник и ники тех кто есть на сервере, убирая идентификатор из ника "#9999"
if arg == str(member)[0:-5]:
PREFIX = '>'
emb = discord.Embed(title = 'User info')
emb.add_field(name = '{}Bans'.format(PREFIX),value = '0')
emb.add_field(name = '{}Kicks'.format(PREFIX),value = '0')
emb.add_field(name = '{}Warns'.format(PREFIX),value = '1/3')
emb.add_field(name = '{}Ban reason: '.format(PREFIX),value = 'None')
emb.add_field(name = '{}Role history'.format(PREFIX),value = 'Verify.')
await ctx.send(embed = emb)
from fuzzywuzzy import fuzz
@bot.command(pass_context = True)
@commands.has_permissions(administrator = True)
async def checkuser_user(ctx, arg):
await ctx.channel.send('Please, wait')
# Пребираем все пользователей на сервере.
for guild in bot.guilds:
for member in guild.members:
# Сравниваем введенный ник и ники полученные из списка.
if fuzz.partial_ratio(arg, str(member)[0:-5]) > 95: # <- Процент при котором совпадение "успешно".
PREFIX = '>'
emb = discord.Embed(title = 'User info')
emb.add_field(name = '{}Bans'.format(PREFIX),value = '0')
emb.add_field(name = '{}Kicks'.format(PREFIX),value = '0')
emb.add_field(name = '{}Warns'.format(PREFIX),value = '1/3')
emb.add_field(name = '{}Ban reason: '.format(PREFIX),value = 'None')
emb.add_field(name = '{}Role history'.format(PREFIX),value = 'Verify.')
await ctx.send(embed = emb)