#somemodule.py
def load():
import mymodule1
import mymodule2
return mymodule1, mymodule2import somemodule
mymodule1, mymodule2 = somemodule.load()def generate_emails() -> List[str]:
'Генерирует список адресов почты.'
...
def check_emails(emails: List[str]) -> List[bool]:
'Получает список адресов почты возвращает список ответов "успешно или нет".'
...You must have the manage_messages permission to delete messages even if they are your own (unless you are a user account). The read_message_history permission is also needed to retrieve message history.
sheet2["B7"] = sheet['C' + str(i)].value
sheet2["D7"] = sheet['E' + str(i)].value
sheet2["E7"] = sheet['N' + str(i)].value
sheet2["F7"] = sheet['F' + str(i)].value
sheet2["G7"] = sheet['J' + str(i)].valuecols1 = ('B', 'D', 'E', 'F', 'G')
cols2 = ('C', 'E', 'N', 'F', 'J')
row1 = 7 # какие строки тебе нужны, я так и не понял, ну да сам разберёшься
row2 = row1 + 18 # то же самое тут
#делаем цикл по парам - элемент из cols1 и элемент из cols2
for col1, col2 in zip( cols1, cols2):
# запись вида f'{x}' подставит в строку значение переменной x
sheet2[f'{col1}{row1}'] = sheet[f'{col2}{row2}'].value class MyCog (commands.Cog):
def __init__(self, bot):
self.enter_times = {}
@commands.Cog.listener()
async def on_voice_state_update(self, member, before, after):
if before.channel is None and after.channel is not None:
#событие входа в чат - кладем время входа в словарь
self.enter_times[member.id] = time.time() #число секунд от начала эпохи Unix
elif before.channel is not None and after.channel is None:
#событие выхода из чата - вытаскиваем время входа и удаляем его из словаря
enter = self.enter_times.pop(member.id, None)
if enter is not None: # мало ли, бота перезапустили пока кто-то сидел в войсчате
delta = time.time() - enter # число секунд с момента входа
print(f'member {member.id}: {delta:.1f} seconds')