summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorit-fixcomart <it@fixcomart.co.id>2024-10-11 10:02:33 +0700
committerit-fixcomart <it@fixcomart.co.id>2024-10-11 10:02:33 +0700
commitc631620706a24426faea6b43c2a0602eebf9a5e4 (patch)
tree440ad54110f0cb11f9252537b58616934fc009e7
parent9c6e2e8f35f14dda376e543e5b63b0bddee2fd88 (diff)
<iman> fix code get telegram api
-rw-r--r--indoteknik_custom/models/stock_picking.py37
-rw-r--r--indoteknik_custom/models/website_telegram.py92
2 files changed, 91 insertions, 38 deletions
diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py
index 58eb5d82..5f2fe99a 100644
--- a/indoteknik_custom/models/stock_picking.py
+++ b/indoteknik_custom/models/stock_picking.py
@@ -312,18 +312,39 @@ class StockPicking(models.Model):
def ask_return_approval(self):
telegram_data = {
- 'tittle': 'Permintaan retur ' + self.name,
+ 'tittle': self.name,
'about': 'Permintaan retur ' + self.name,
'id_data': self.id,
'username': '@'+self.name.replace('/', '')
}
- telegram = request.env['website.telegram'].create(telegram_data)
- for pick in self:
- if self.env.user.is_accounting:
- pick.approval_return_status = 'approved'
- else:
- pick.approval_return_status = 'pengajuan1'
- telegram.create_channel()
+ channel_data = self.env['website.telegram'].search([('tittle', '=', self.name)])
+ if channel_data:
+ for pick in self:
+ self._check_telegram(pick)
+ else:
+ telegram = request.env['website.telegram'].create(telegram_data)
+ telegram.create_channel()
+ for pick in self:
+ pick.approval_return_status = 'pengajuan1'
+
+ def read(self, fields=None, load='_classic_read'):
+ # Panggil method 'read' bawaan terlebih dahulu
+ records = super(StockPicking, self).read(fields, load)
+
+ # Jalankan _check_telegram untuk setiap record yang diakses
+ for record in self:
+ if record.approval_return_status == 'pengajuan1':
+ record._check_telegram()
+
+ return records
+
+
+ def _check_telegram(self):
+ telegram = self.env['website.telegram'].search([('id_data', '=', self.id)])
+ if telegram:
+ ask_return = telegram.receive_messages()
+ if ask_return:
+ self.approval_return_status = 'approved'
def calculate_line_no(self):
for picking in self:
diff --git a/indoteknik_custom/models/website_telegram.py b/indoteknik_custom/models/website_telegram.py
index d67cafc5..8bd789a1 100644
--- a/indoteknik_custom/models/website_telegram.py
+++ b/indoteknik_custom/models/website_telegram.py
@@ -4,68 +4,103 @@ from odoo import models, fields, api
from telethon.sessions import StringSession
from telethon.sync import TelegramClient
from telethon import functions, types
-from telethon.tl.types import InputChannel, InputPeerChannel
+from telethon.tl.types import InputPeerChannel
import asyncio
from telethon.tl.functions.messages import SendMessageRequest
+from telethon.tl.types import InputMediaPoll, Poll, PollAnswer, PeerChannel
+import datetime
+from telethon.tl.types import MessageMediaPoll
+from telethon.tl.functions.messages import SendMediaRequest
+from telethon.tl.types import TextWithEntities
class WebsiteTelegram(models.Model):
_name = 'website.telegram'
_description = 'Telegram Channel'
tittle = fields.Char("Channel Title")
+ invite_link = fields.Char("Channel invite link")
username = fields.Char("Channel Name")
id_data = fields.Char("Channel ID")
about = fields.Char("Channel Description")
is_broadcast = fields.Boolean("Is Broadcast", default=True)
is_megagroup = fields.Boolean("Is Megagroup", default=False)
+ is_accept = fields.Boolean("Is Megagroup", default=False)
+
# session_string = 'MIIBCgKCAQEAyMEdY1aR+sCR3ZSJrtztKTKqigvO/vBfqACJLZtS7QMgCGXJ6XIRyy7mx66W0/sOFa7/1mAZtEoIokDP3ShoqF4fVNb6XeqgQfaUHd8wJpDWHcR2OFwvplUUI1PLTktZ9uW2WE23b+ixNwJjJGwBDJPQEQFBE+vfmH0JP503wr5INS1poWg/j25sIWeYPHYeOrFp/eXaqhISP6G+q2IeTaWTXpwZj4LzXq5YOpk4bYEQ6mvRq7D1aHWfYmlEGepfaYR8Q0YqvvhYtMte3ITnuSJs171+GDqpdKcSwHnd6FudwGO4pcCOj4WcDuXc2CTHgH8gFTNhp/Y8/SpDOhvn9QIDAQAB'
def create_channel(self, *args, **kwargs):
asyncio.run(self._async_create_channel())
async def _async_create_channel(self):
- async with TelegramClient(StringSession('1BVtsOJABu30MWCBFwYvvaYbFoIWi43r5a7TUZ2IWwrnSlXIwEhJS5k2y4UKjoDeMPKwhgUWn9lMk02zQjM0ZDzq61YyhkRBvZuu3hCxMsrtP92bkuZtL2g3g1VgI8s7rMhOD_WaGrZbuj-TmbTwIEbN5i1J4raDW2kYzmlLRCbT74xxrGjpzWCnVv7CSS9L2juXuut0lLMgli3_JZbqDO1IyBYh4ZFQYbMf7zv6moDR4MQp1qfnFArsikQcfxjlNXKFcSoyA_GjiIFfCuymwQVtdERXOAH03M_lm8fYbjvgxEkJvxR6hdCnYMcKpIujEEo9SmMmK7Vnl29g1TCPO5tlrDNXq3Ng='), 27799517, 'df8ee44b0ed11108245037d47b511201') as client:
+ async with TelegramClient(StringSession(
+ '1BVtsOJABu30MWCBFwYvvaYbFoIWi43r5a7TUZ2IWwrnSlXIwEhJS5k2y4UKjoDeMPKwhgUWn9lMk02zQjM0ZDzq61YyhkRBvZuu3hCxMsrtP92bkuZtL2g3g1VgI8s7rMhOD_WaGrZbuj-TmbTwIEbN5i1J4raDW2kYzmlLRCbT74xxrGjpzWCnVv7CSS9L2juXuut0lLMgli3_JZbqDO1IyBYh4ZFQYbMf7zv6moDR4MQp1qfnFArsikQcfxjlNXKFcSoyA_GjiIFfCuymwQVtdERXOAH03M_lm8fYbjvgxEkJvxR6hdCnYMcKpIujEEo9SmMmK7Vnl29g1TCPO5tlrDNXq3Ng='),
+ 27799517, 'df8ee44b0ed11108245037d47b511201') as client:
result = await client(functions.channels.CreateChannelRequest(
- title=self.tittle,
+ title='Permintaan retur ' + self.tittle,
about=self.about,
broadcast=False,
megagroup=True,
))
channel = result.updates[3].message.peer_id
- # username_to_add = ['@imsep81', '6285764475716', '@stephanchrst']
- username_to_add = ['@imsep81']
+ channel_link = await client(functions.messages.ExportChatInviteRequest(
+ peer=InputPeerChannel(channel_id=channel.channel_id, access_hash=result.chats[0].access_hash),
+ ))
+ self.invite_link = channel_link.link
+ username_to_add = ['@imsep81', '6285764475716', '@stephanchrst']
+ # username_to_add = ['@imsep81']
for name in username_to_add:
user_to_add = await client.get_entity(name)
- result = await client(functions.channels.InviteToChannelRequest(
+ result_add_user = await client(functions.channels.InviteToChannelRequest(
channel=channel,
users=[user_to_add.id],
))
- message = 'https://erp.indoteknik.com/web#id='+self.id_data+'&action=209&model=stock.picking&view_type=form&cids=1&menu_id=101'
- result = await client(SendMessageRequest(channel, message))
-
- result = client(functions.channels.UpdateUsernameRequest(
- channel=channel,
- username='@indoJaya21'
+ message = 'https://erp.indoteknik.com/web#id=' + self.id_data + '&action=209&model=stock.picking&view_type=form&cids=1&menu_id=101'
+ result_massage = await client(SendMessageRequest(channel, message))
+
+ # Send the poll to the channel using PeerChannel with the channel's ID
+ result_polling = await client(SendMediaRequest(
+ peer=InputPeerChannel(channel_id=channel.channel_id, access_hash=result.chats[0].access_hash),
+ media=InputMediaPoll(poll=Poll(
+ question=TextWithEntities(text="ASK RETURN?", entities=[]),
+ answers=[
+ PollAnswer(text=TextWithEntities(text="Accept", entities=[]), option=b'\x01'),
+ PollAnswer(text=TextWithEntities(text="Reject", entities=[]), option=b'\x02'),
+ ],
+ id=2
+ )),
+ message='Ask Return Polling'
))
- print(result.stringify())
def receive_messages(self):
- asyncio.run(self._async_receive_messages())
+ return asyncio.run(self._async_receive_messages())
async def _async_receive_messages(self):
- async with TelegramClient(StringSession('1BVtsOJABu30MWCBFwYvvaYbFoIWi43r5a7TUZ2IWwrnSlXIwEhJS5k2y4UKjoDeMPKwhgUWn9lMk02zQjM0ZDzq61YyhkRBvZuu3hCxMsrtP92bkuZtL2g3g1VgI8s7rMhOD_WaGrZbuj-TmbTwIEbN5i1J4raDW2kYzmlLRCbT74xxrGjpzWCnVv7CSS9L2juXuut0lLMgli3_JZbqDO1IyBYh4ZFQYbMf7zv6moDR4MQp1qfnFArsikQcfxjlNXKFcSoyA_GjiIFfCuymwQVtdERXOAH03M_lm8fYbjvgxEkJvxR6hdCnYMcKpIujEEo9SmMmK7Vnl29g1TCPO5tlrDNXq3Ng='),
- 27799517, 'df8ee44b0ed11108245037d47b511201') as client:
- channel = await client.get_entity(self.username)
- result = client(functions.channels.GetMessagesRequest(
- channel=channel,
- id=channel.chats
+ async with TelegramClient(StringSession(
+ '1BVtsOJABu30MWCBFwYvvaYbFoIWi43r5a7TUZ2IWwrnSlXIwEhJS5k2y4UKjoDeMPKwhgUWn9lMk02zQjM0ZDzq61YyhkRBvZuu3hCxMsrtP92bkuZtL2g3g1VgI8s7rMhOD_WaGrZbuj-TmbTwIEbN5i1J4raDW2kYzmlLRCbT74xxrGjpzWCnVv7CSS9L2juXuut0lLMgli3_JZbqDO1IyBYh4ZFQYbMf7zv6moDR4MQp1qfnFArsikQcfxjlNXKFcSoyA_GjiIFfCuymwQVtdERXOAH03M_lm8fYbjvgxEkJvxR6hdCnYMcKpIujEEo9SmMmK7Vnl29g1TCPO5tlrDNXq3Ng='),
+ 27799517, 'df8ee44b0ed11108245037d47b511201') as client:
+ channel = await client.get_entity(self.invite_link)
+ result = await client(functions.messages.GetHistoryRequest(
+ peer=channel,
+ offset_id=42,
+ offset_date=datetime.datetime(2024, 12, 31),
+ add_offset=0,
+ limit=100,
+ max_id=0,
+ min_id=0,
+ hash=channel.access_hash
))
- print(result.stringify())
- def send_to_telegram(self, message):
- # if self.env.all.registry.db_name == 'odoo016':return
+ accept_found = False
+
+ for message in result.messages:
+ if not isinstance(message.media, MessageMediaPoll):
+ continue
+ if message.media.results.total_voters > 0:
+ if message.media.results.results[0].voters > message.media.results.results[1].voters:
+ accept_found = True
+ break
- # message = self.env.all.registry.db_name + " : " + message
- # message = self.test_message
+ return accept_found
+ def send_to_telegram(self, message):
apiURL = f'https://api.telegram.org/bot{self.bot_name}/sendMessage'
try:
requests.post(apiURL, json={'chat_id': self.chatID, 'text': message})
@@ -74,7 +109,7 @@ class WebsiteTelegram(models.Model):
def test_send(self):
try:
- self.env.cr.savepoint() #kembalikan database ke save point jika mengalami kesalahan
+ self.env.cr.savepoint()
self.env['website.telegram'].search([('name', '=', self.name)])[0].send_to_telegram(self.test_message)
except Exception as e:
@@ -109,7 +144,7 @@ class WebsiteTelegram(models.Model):
try:
response = requests.get(apiURL)
updates = response.json()
- return updates # Ini akan berisi semua pembaruan, termasuk pesan baru
+ return updates
except Exception as e:
print(e)
return None
@@ -123,6 +158,3 @@ class WebsiteTelegram(models.Model):
# chat_id = update['channel_post']['chat']['id']
# chat_name = update['channel_post']['chat']['username']
# print(f"Received message: {message_text} from chat_id: {chat_id}, that is: {chat_name}")
-
-
-