229 lines
15 KiB
Python
229 lines
15 KiB
Python
|
import datetime
|
|||
|
import config
|
|||
|
import aprint
|
|||
|
import json
|
|||
|
import requests
|
|||
|
import random
|
|||
|
from urllib.request import urlopen
|
|||
|
|
|||
|
aprint.info("Script started")
|
|||
|
|
|||
|
try:
|
|||
|
fwords = json.loads(open("fword.json", "r").read())
|
|||
|
except:
|
|||
|
fwords = {"vk_fwords": {}, "ds_fwords": {}, "vk_last_fword": 0, "ds_last_fword": 0, "created": datetime.datetime.utcnow().timestamp()}
|
|||
|
|
|||
|
ds_delete_fword = requests.delete(f"https://discordapp.com/api/guilds/{config.DISCORD_GUILD}/members/{fwords['ds_last_fword']}/roles/{config.DISCORD_ROLE_fword}", headers={'Authorization': f'Bot {config.DISCORD_TOKEN}'})
|
|||
|
if ds_delete_fword.ok:
|
|||
|
aprint.info(f"Discord remove role: {ds_delete_fword.status_code} {ds_delete_fword.reason}")
|
|||
|
else:
|
|||
|
aprint.error(f"Discord remove role: {ds_delete_fword.status_code} {ds_delete_fword.reason}")
|
|||
|
|
|||
|
midnight_text = ["Миднайт!",
|
|||
|
"Полночь!",
|
|||
|
"Midnight!",
|
|||
|
"миднигхт",
|
|||
|
"Середина ночи",
|
|||
|
"Смена даты!",
|
|||
|
"00:00",
|
|||
|
"Пора ложиться спать!",
|
|||
|
"12 ночи",
|
|||
|
"Медьникель!",
|
|||
|
"Мёднугхт!",
|
|||
|
"Ночное рандеву",
|
|||
|
"Опівночі!",
|
|||
|
"Арабская ночь",
|
|||
|
"Конец смены"]
|
|||
|
role_names = ["F-word дня",
|
|||
|
"Лох дня",
|
|||
|
"Приговорить к расстрелу",
|
|||
|
"Малолетний дебил",
|
|||
|
"Он отправится в Бразилию",
|
|||
|
"Пропустил много стрелок пока битбоксил с пикой точеной",
|
|||
|
"В дурку отправляется",
|
|||
|
"Поставил крейзифрог на рингтон",
|
|||
|
"Попросил наступить на себя еще раз",
|
|||
|
"ААХАААА ОН ДОЛБОЁБ ПОСМОТРИТЕ НА НЕГООО!!",
|
|||
|
"парннь ты долбоёб",
|
|||
|
"Быдло дня",
|
|||
|
"Фоткаю лучшего подписчика. Улыбнись",
|
|||
|
"Восхваляет солнце"]
|
|||
|
|
|||
|
imgvkrequest = requests.post("https://api.vk.com/method/photos.get", data={'owner_id': "-" + str(config.VK_GROUP_ID),
|
|||
|
'album_id': config.VK_ALBUM_MIDNIGHT_ID,
|
|||
|
'count': 1000,
|
|||
|
'access_token': config.VK_SERVICE_TOKEN,
|
|||
|
'v': '5.124'})
|
|||
|
if imgvkrequest.ok:
|
|||
|
try:
|
|||
|
random_images_query = json.loads(imgvkrequest.text)
|
|||
|
random_number = random.randint(0, random_images_query['response']['count']-1)
|
|||
|
aprint.info(f"VK method 'photos.get': {imgvkrequest.status_code} {imgvkrequest.reason}, returned photos: {random_images_query['response']['count']}, selected: {random_number}")
|
|||
|
image = random_images_query['response']['items'][random_number]
|
|||
|
image_request = urlopen(image["sizes"][-1]['url']).read()
|
|||
|
image_file = open("md.jpg", "wb")
|
|||
|
image_file.write(image_request)
|
|||
|
image_file.close()
|
|||
|
MIDNIGHT_IMAGE = True
|
|||
|
except Exception as e:
|
|||
|
MIDNIGHT_IMAGE = False
|
|||
|
aprint.error(f"Error while getting image: {str(e)}")
|
|||
|
else:
|
|||
|
MIDNIGHT_IMAGE = False
|
|||
|
aprint.error(f"VK method 'photos.get': {imgvkrequest.status_code} {imgvkrequest.reason}")
|
|||
|
selected = random.choice(midnight_text)
|
|||
|
now = datetime.datetime.utcnow()
|
|||
|
new_date = now + datetime.timedelta(hours=3, minutes=3)
|
|||
|
to_ny = datetime.datetime(year=2022, month=1, day=1) - now
|
|||
|
if 30 >= to_ny.days > 1:
|
|||
|
if MIDNIGHT_IMAGE:
|
|||
|
text = f"{selected}\nНаступило {new_date.strftime('%d.%m.%Y')}\nДо нового года осталось {to_ny.days} дн.\nКартинка дня:"
|
|||
|
else:
|
|||
|
text = f"{selected}\nНаступило {new_date.strftime('%d.%m.%Y')}\nДо нового года осталось {to_ny.days} дн.\nОшибка при получении картинки дня"
|
|||
|
elif to_ny.days == 1:
|
|||
|
if MIDNIGHT_IMAGE:
|
|||
|
text = f"{selected}\nНаступило {new_date.strftime('%d.%m.%Y')}\nДо нового года осталось 24 часа.\nКартинка дня:"
|
|||
|
else:
|
|||
|
text = f"{selected}\nНаступило {new_date.strftime('%d.%m.%Y')}\nДо нового года осталось 24 часа.\nОшибка при получении картинки дня"
|
|||
|
elif to_ny.days == 0:
|
|||
|
if MIDNIGHT_IMAGE:
|
|||
|
text = f"{selected}\nНаступило {new_date.strftime('%d.%m.%Y')}\nC новым, 2022 годом!!!\nКартинка дня:"
|
|||
|
else:
|
|||
|
text = f"{selected}\nНаступило {new_date.strftime('%d.%m.%Y')}\nC новым, 2022 годом!!!\nОшибка при получении картинки дня"
|
|||
|
else:
|
|||
|
if MIDNIGHT_IMAGE:
|
|||
|
text = f"{selected}\nНаступило {new_date.strftime('%d.%m.%Y')}\nКартинка дня:"
|
|||
|
else:
|
|||
|
text = f"{selected}\nНаступило {new_date.strftime('%d.%m.%Y')}\n\nОшибка при получении картинки дня"
|
|||
|
aprint.info(f"All ready. Waiting...")
|
|||
|
|
|||
|
MIDNIGHT = False
|
|||
|
while not MIDNIGHT:
|
|||
|
now = datetime.datetime.utcnow()
|
|||
|
if now.hour == 21 and now.minute == 0 and now.second == 1:
|
|||
|
aprint.info("Midnight")
|
|||
|
if MIDNIGHT_IMAGE:
|
|||
|
dcrequest = requests.post(f"https://discordapp.com/api/channels/{config.DISCORD_CHANNEL_ID}/messages",
|
|||
|
headers={'Authorization': f'Bot {config.DISCORD_TOKEN}',
|
|||
|
'Content-Disposition': 'form-data; filename="md.jpg"'},
|
|||
|
data={'payload_json': json.dumps({'content': text}), },
|
|||
|
files={'file': open("md.jpg", 'rb')})
|
|||
|
vkrequest = requests.post("https://api.vk.com/method/messages.send",
|
|||
|
data={'peer_id': int(config.VK_DIALOG_ID), 'message': text,
|
|||
|
'random_id': random.randint(-9223372036854775808, 9223372036854775807),
|
|||
|
'attachment': f"photo{image['owner_id']}_{image['id']}",
|
|||
|
'access_token': config.VK_TOKEN, 'v': '5.124'})
|
|||
|
else:
|
|||
|
dcrequest = requests.post(f"https://discordapp.com/api/channels/{config.DISCORD_CHANNEL_ID}/messages",
|
|||
|
headers={'Authorization': f'Bot {config.DISCORD_TOKEN}'},
|
|||
|
data={'payload_json': json.dumps({'content': text}), })
|
|||
|
vkrequest = requests.post("https://api.vk.com/method/messages.send",
|
|||
|
data={'peer_id': int(config.VK_DIALOG_ID), 'message': text,
|
|||
|
'random_id': random.randint(-9223372036854775808, 9223372036854775807),
|
|||
|
'access_token': config.VK_TOKEN, 'v': '5.124'})
|
|||
|
if dcrequest.ok:
|
|||
|
aprint.info(f"Message to Discord: {dcrequest.status_code} {dcrequest.reason}")
|
|||
|
else:
|
|||
|
aprint.error(f"Message to Discord: {dcrequest.status_code} {dcrequest.reason}")
|
|||
|
if vkrequest.ok:
|
|||
|
aprint.info(f"Message to VK: {vkrequest.status_code} {vkrequest.reason}")
|
|||
|
else:
|
|||
|
aprint.error(f"Message to VK: {vkrequest.status_code} {vkrequest.reason}")
|
|||
|
vk_users_request = requests.post("https://api.vk.com/method/messages.getConversationMembers",
|
|||
|
data={'peer_id': config.VK_DIALOG_ID, 'fields': config.VK_ALBUM_MIDNIGHT_ID,
|
|||
|
'group_id': config.VK_GROUP_ID, 'access_token': config.VK_TOKEN,
|
|||
|
'v': '5.124'})
|
|||
|
if vk_users_request.ok:
|
|||
|
aprint.info(f"VK method 'messages.getConversationMembers': {vk_users_request.status_code} {vk_users_request.reason}")
|
|||
|
random_members_query = json.loads(vk_users_request.text)
|
|||
|
if not fwords.get('vk_fword_story_3'):
|
|||
|
fwords['vk_fword_story_3'] = 0
|
|||
|
if not fwords.get('vk_fword_story_2'):
|
|||
|
fwords['vk_fword_story_2'] = 0
|
|||
|
if not fwords.get('vk_fword_story_1'):
|
|||
|
fwords['vk_fword_story_1'] = 0
|
|||
|
new_vk_fword = False
|
|||
|
while not new_vk_fword:
|
|||
|
random_member = random.choice(random_members_query['response']['profiles'])
|
|||
|
black_list = [292394871, 32272927]
|
|||
|
white_list = [260168666]
|
|||
|
debug_text = f"VK random person: {random_member['first_name']} {random_member['last_name']} - "
|
|||
|
if (random_member['id'] != fwords['vk_last_fword'] and random_member['id'] != fwords['vk_fword_story_1'] and random_member['id'] != fwords['vk_fword_story_2'] and random_member['id'] != fwords['vk_fword_story_3'] and random_member['id'] not in white_list) or random_member['id'] in black_list:
|
|||
|
aprint.debug(debug_text + "selected")
|
|||
|
fwords['vk_fword_story_3'] = fwords['vk_fword_story_2']
|
|||
|
fwords['vk_fword_story_2'] = fwords['vk_fword_story_1']
|
|||
|
fwords['vk_fword_story_1'] = fwords['vk_last_fword']
|
|||
|
fwords['vk_last_fword'] = random_member['id']
|
|||
|
if str(random_member['id']) in fwords["vk_fwords"]:
|
|||
|
fwords["vk_fwords"][str(random_member['id'])] += 1
|
|||
|
else:
|
|||
|
fwords["vk_fwords"][str(random_member['id'])] = 1
|
|||
|
text = f"{random.choice(role_names)}: @id{random_member['id']} ({random_member['first_name']} {random_member['last_name']})"
|
|||
|
vkrequest = requests.post("https://api.vk.com/method/messages.send",
|
|||
|
data={'peer_id': config.VK_DIALOG_ID, 'message': text,
|
|||
|
'random_id': random.randint(-9223372036854775808, 9223372036854775807),
|
|||
|
'access_token': config.VK_TOKEN, 'v': '5.124'})
|
|||
|
new_vk_fword = True
|
|||
|
if vkrequest.ok:
|
|||
|
aprint.info(f"Message to VK: {vkrequest.status_code} {vkrequest.reason}")
|
|||
|
else:
|
|||
|
aprint.error(f"Message to VK: {vkrequest.status_code} {vkrequest.reason}")
|
|||
|
else:
|
|||
|
aprint.debug(debug_text + "not selected")
|
|||
|
else:
|
|||
|
aprint.error(f"VK method 'messages.getConversationMembers': {vk_users_request.status_code} {vk_users_request.reason}")
|
|||
|
ds_members_r = requests.get(f"https://discordapp.com/api/guilds/{config.DISCORD_GUILD}/members?limit=1000",
|
|||
|
headers={'Authorization': f'Bot {config.DISCORD_TOKEN}'})
|
|||
|
if ds_members_r.ok:
|
|||
|
aprint.info(f"Discord guild member list request: {ds_members_r.status_code} {ds_members_r.reason}")
|
|||
|
ds_members = json.loads(ds_members_r.text)
|
|||
|
if not fwords.get('ds_fword_story_3'):
|
|||
|
fwords['ds_fword_story_3'] = 0
|
|||
|
if not fwords.get('ds_fword_story_2'):
|
|||
|
fwords['ds_fword_story_2'] = 0
|
|||
|
if not fwords.get('ds_fword_story_1'):
|
|||
|
fwords['ds_fword_story_1'] = 0
|
|||
|
new_ds_fword = False
|
|||
|
black_list = [235010902640820225, 611931400094089269]
|
|||
|
white_list = [324555734115418112]
|
|||
|
while not new_ds_fword:
|
|||
|
member_fword = random.choice(ds_members)
|
|||
|
debug_text = f"DS random person: {member_fword['user']['username']}#{member_fword['user']['discriminator']} - "
|
|||
|
if (member_fword['user']['id'] != fwords['ds_last_fword'] and member_fword['user']['id'] != fwords['ds_fword_story_1'] and member_fword['user']['id'] != fwords['ds_fword_story_2'] and member_fword['user']['id'] != fwords['ds_fword_story_3'] and member_fword['user']['id'] not in white_list) or member_fword['user']['id'] in black_list:
|
|||
|
aprint.debug(debug_text + "selected")
|
|||
|
fwords['ds_fword_story_3'] = fwords['ds_fword_story_2']
|
|||
|
fwords['ds_fword_story_2'] = fwords['ds_fword_story_1']
|
|||
|
fwords['ds_fword_story_1'] = fwords["ds_last_fword"]
|
|||
|
fwords["ds_last_fword"] = member_fword['user']['id']
|
|||
|
new_ds_fword = True
|
|||
|
random_role = random.choice(role_names)
|
|||
|
ds_req_rename_role = requests.patch(f"https://discordapp.com/api/guilds/{config.DISCORD_GUILD}/roles/{config.DISCORD_ROLE_fword}", headers={'Authorization': f'Bot {config.DISCORD_TOKEN}'}, json={'name': random_role, 'color':random.randint(0x000000, 0xffffff)})
|
|||
|
if ds_req_rename_role.ok:
|
|||
|
aprint.info(f"Discord rename role: {ds_req_rename_role.status_code} {ds_req_rename_role.reason}")
|
|||
|
else:
|
|||
|
aprint.error(f"Discord rename role: {ds_req_rename_role.status_code} {ds_req_rename_role.reason}")
|
|||
|
text = f"{random_role}: <@{member_fword['user']['id']}>"
|
|||
|
ds_send_message_r = requests.post(f"https://discordapp.com/api/channels/{config.DISCORD_CHANNEL_ID}/messages", headers={'Authorization': f'Bot {config.DISCORD_TOKEN}'}, data={'payload_json': json.dumps({'content': text})})
|
|||
|
if ds_send_message_r.ok:
|
|||
|
aprint.info(f"Message to Discord: {dcrequest.status_code} {dcrequest.reason}")
|
|||
|
else:
|
|||
|
aprint.error(f"Message to Discord: {dcrequest.status_code} {dcrequest.reason}")
|
|||
|
ds_set_fword = requests.put(f"https://discordapp.com/api/guilds/{config.DISCORD_GUILD}/members/{member_fword['user']['id']}/roles/{config.DISCORD_ROLE_fword}", headers={'Authorization': f'Bot {config.DISCORD_TOKEN}'})
|
|||
|
if ds_set_fword.ok:
|
|||
|
aprint.info(f"Discord set role: {ds_set_fword.status_code} {ds_set_fword.reason}")
|
|||
|
else:
|
|||
|
aprint.error(f"Discord set role: {ds_set_fword.status_code} {ds_set_fword.reason}")
|
|||
|
if str(member_fword['user']['id']) in fwords['ds_fwords']:
|
|||
|
fwords['ds_fwords'][str(member_fword['user']['id'])] += 1
|
|||
|
else:
|
|||
|
fwords['ds_fwords'][str(member_fword['user']['id'])] = 1
|
|||
|
else:
|
|||
|
aprint.debug(debug_text + "not selected")
|
|||
|
else:
|
|||
|
aprint.error(f"Discord guild member list request: {ds_members_r.status_code} {ds_members_r.reason}")
|
|||
|
with open("fword.json", "w") as jsn:
|
|||
|
json.dump(fwords, jsn)
|
|||
|
MIDNIGHT = True
|
|||
|
|
|||
|
aprint.info("Done")
|